4 분 소요

메소드(method) 절차지향 프로그래밍 클래스(class) 생성자(constructor)



메소드(method)

- 어떤 로직이나 기능을 만들어 내는 방법(함수)

- 코드를 재활용할 수 있도록 하여 경제적으로 코드를 작성할 수 있음.

접근 제어자 [static] 반환타입 메소드명(매개변수, 매개변수2, 매개변수3, ..){
    메소드가 호출시 실행될 문장;
    ...
    [return 반환값;]
}
예) static이 없는 메소드
    Scanner sc = new Scanner(System.in);
    sc.next();

예) static이 붙은 메소드
	Math.random();
// JVM 실행시 메모리에 (자동적)우선적으로 올라가기 때문에 객체생성을 하지않아도됨
// static이 많으면 처음 실행시 느려짐


이름만 호출하면 실행되는 메소드

    public static void method1(){
    	System.out.println("Hello Java");
    }
--------------------------------------------
    method1();


매개변수가 있는 메소드

    public static void method2(int num){
   	 	System.out.println(num);
    }
--------------------------------------------
	method2(10);


매개변수가 있고 리턴값이 있는 메소드

    public static int method3(int num){
    	return num;
    }
--------------------------------------------
    int num = method3(10);


예제

사직연산을 구하는 메소드를 각각 만들어 아래와 같이 출력하는 프로그램을 작성해보자. (단, 메소드는 각 연산마다 변도로 작성, return 키워드를 반드시 사용)

  실행결과
  첫번째 숫자를 입력하세요 10
  두번째 숫자를 입력하세요 3
  10+3 = 13
  10-3=7
  10*3=10
  10/3=3.3333
  import java.util.Scanner;
  
  public class Method4 {
      public static int plus(int num1, int num2) {
          return (num1 + num2);
      }
  
      public static int minus(int num1, int num2) {
          return (num1 - num2);
      }
  
      public static int multi(int num1, int num2) {
          return (num1 * num2);
      }
  
      public static double div(int num1, int num2) {
          return ((double) num1 / num2);
      }
  
  
      public static void main(String[] args) {
          Scanner sc = new Scanner(System.in);
          System.out.print("첫번째 숫자를 입력하세요 >>> ");
          int num1 = sc.nextInt();
          System.out.print("두번째 숫자를 입력하세요 >>> ");
          int num2 = sc.nextInt();
  
          System.out.println(num1 + " + " + num2 + " = " + plus(num1, num2));
          System.out.println(num1 + " - " + num2 + " = " + minus(num1, num2));
          System.out.println(num1 + " * " + num2 + " = " + multi(num1, num2));
          System.out.println(num1 + " / " + num2 + " = " + div(num1, num2));
  
      }
  }



절차지향 프로그래밍

- 물리 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시됨

- 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법

- 장점 : 가독성이 좋음

- 단점 : 협업 어려움


객체지향 프로그래밍(OOP(Object Oriented Programming))

- 실제 세계를 모델링하여 소프트웨어를 개발하는 방법

- 데이터와 절차를 하나의 덩어리(집합)로 묶어서 생각

- 명사(변수), 동사(메소드)로 생각

- 장점 : 협업 유리함

- 단점 : 설계가 어려움

    User user = new User();
    user.id = "apple";
    user.name = "김사과";
    user.pass = "1234";
    user.age = 20;
    user.point = 100;

    user.info();
    System.out.println("---------------------------");

    User member = new User();
    member.id = "banana";
    member.name = "반하나";
    member.pass = "4987";
    member.age = 26;
    member.point = 102;

    member.info();
--------------------------------------------------------------
public class User {
    // 필드
    String id;
    String name;
    String pass;
    int age;
    double point;

    //메소드
    public void info() {
        System.out.println("아이디 : " + id);
        System.out.println("이름 : " + name);
        System.out.println("비밀번호 : " + pass);
        System.out.println("나이 : " + age);
        System.out.println("포인트 : " + point);
    }
}

아이디 : apple
이름 : 김사과
비밀번호 : 1234
나이 : 20
포인트 : 100.0
---------------------------
아이디 : banana
이름 : 반하나
비밀번호 : 4987
나이 : 26
포인트 : 102.0



클래스(class)

- 설계도와 같은 의미

- 객체의 상태를 저장하는 필드(변수), 객체의 행동을 나타내는 메소드(함수)로 구성

- 설계도(파일) -> 메모리(객체)


클래스 만드는 방법

	접근제어자 class 클래스명{
        자료형 필드1;
        자료형 필드2;
        ...

        메소드1(){
        ...
        }
        메소드2(){
        ...
        }
        ...
    }


객체를 생성하는 방법

    클래스명 객체명 = new 생성자();


객체의 배열

    클래스명[] 참조변수 = new 클래스명[요소의 개수];
    Member[] members = new Member[3];
    members[0] = new Member();
    members[1] = new Member();
    members[2] = new Member();



✔ 은닉화

- 내부 데이터, 내부 연산을 외부에서 접근하지 못하도록 은닉 혹은 격리시키는 것

- 변수에 접근 제한자는 private로 지정

- setter, getter 메소드를 사용하여 변수의 접근, 제어함


✔ 추상화

- 공통의 속성이나 기능을 묶어 이름을 붙이는 것(클래스)

- 클래스를 정의하는 것


✔ 캡슐화

- 실제로 구현되는 부분을 외부에 드러나지 않도록 갭슐로 감싸 이용방법만 알려주는 것

- 변수와 함수를 하나로 묶는 것

- 객체가 맡은 역할을 수행하기 위한 하나 목적을 하나로 묶는 과정



생성자(constructor)

- new 연산자를 통해 객체를 생성할때 반드시 호출, 제일 먼저 실행되는 메서드

- 클래스 명과 동일한 이름을 가진 메서드

- 필드를 초기화하는 역할

- 반환 타입이 없음

- 직접 생성하지 않으면 JVM이 자동으로 빈 생성자를 만들어 호출

    [public] 클래스명(){
        생성자가 호출되면 실행할 문장;
        ...
    }

- 생성자 메소드 오버로딩

- 메소드명이 같고, 시그니처(파라미터의 타입과 개수)가 다른 생성자 메소드를 여러개 만드는 것

- this 키워드 : 현재 클래스의 필드를 가리킴

    this.gender = gender;
    // this() : 현재 클래스의 생성자


✔ 필드의 선언과 초기값

byte : 0
short : 0
int : 0
long : 0
char : \u0000
float : 0.0
double : 0.0
boolean : false
String, 배열, 클래스, 인터페이스 : null
	Person apple = new Person();

    System.out.println(apple.getName()); // String : null
    System.out.println(apple.getAge()); // String : 0
    System.out.println(apple.getHeight()); // String : 0.0
    System.out.println(apple.isLover()); // String : false

    apple.info();
-----------------------------------------------
    public class Person {
    private String name;
    private int age;
    private double height;
    private double weight;
    private boolean isLover;

    public Person() {
        this.name = "무명";
        this.age = 0;
        this.height = 0.0;
        this.weight = 0.0;
        this.isLover = true;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public boolean isLover() {
        return isLover;
    }

    public void setLover(boolean lover) {
        isLover = lover;
    }

    public void info(){
        System.out.println("이름 : " + name);
        System.out.println("나이 : " + age);
        System.out.println("키 : " + height);
        System.out.println("몸무게 : " + weight);
        System.out.println("애인 : " + isLover);
    }

}
실행결과
무명
0
0.0
true
이름 : 무명
나이 : 0
키 : 0.0
몸무게 : 0.0
애인 : true

태그:

카테고리:

업데이트: