Java/Java의 정석

[Java의 정석] 06. 객체지향 프로그래밍

동현 유 2022. 3. 8. 20:23
모르는 것만 짧고 빠르게 정리한 노트입니다.

 

 

4.5 가변인자(varargs)와 오버로딩
  • 기존에는 메서드의 매개변수 개수가 고정적이었으나, JDK1.5 부터 동적으로 지정해 줄 수 있게 되었다.
  • '타입... 변수명' 과 같은 형식응로 선언.
  • 매개변수 중에서 가장 마지막에 선언해야 한다. (컴파일러의 매개변수 매핑 로직인듯하다.)
  • 인자가 아예 할당되지 않을 수도 있고, 배열이 포함될 수도 있다. 
public PrintStream(String format, Object... args);

 

 

여러개의 문자열을 타입으로 받는 메서드를 생각해보자.

아래와 같이 두가지 버전으로 작성할 수 있다.

//1st
String concatenate(String... str) {...}

//2nd
String concatenate(String[] str) {...}

매개변수를 배열로 지정해주면, 반드시 파라미터에 인자가 전달되어야 한다.

그래서 빈 값을 전해주려면, 빈 배열이나 null 을 지정해주어야한다는 불편함이 있다.

 

//1st
String result = concatenate(); // ok

//2nd
String result = concatenate(); // compile error
String result1 = concatenate(null);
String result2 = concatenate(new String[0]);

 

 

6.1 변수의 초기화

 - 멤버면수와 배열의 초기화는 선택적이지만, 지역변수의 초기화는 필수적이다.

 - 근데 보통 초기화하는게 안전하다.

 

6.2 명시적 초기화

  : 변수를 선언과 동시에 초기화하는 것. 가장 간단한 방법.

 

6.3 초기화 블럭

  : 클래스 초기화블럭과 인스턴스 초기화 블럭이 있다. 

  : 클래스 블럭은 {} 블럭 앞에 static 만 붙여주면 된다. 클래스가 JVM 에 로드될 때 실행된다.

  : 인스턴스 블럭은 생성자 함수가 실행되기 이전에 먼저 실행된다. 보통 생성자의 공통코드를 뽑아내서 사용한다.

  : 코드의 중복을 줄일 수 있는 방법이다.

Car() {
    count++;
    serialNo = count;
    color = "white";
    gearType = "auto";
}
Car(String color, String gearType) {
    count++;
    serialNo = count;
    this.color = color;
    this.gearType = gearType;
}

위의 코드를 아래처럼 변경할 수 있다.

{
    count++;
    serialNo = count;
}
Car() {
    color = "white";
    gearType = "auto";
}
Car(String color, String gearType) {
    this.color = color;
    this.gearType = gearType;
}