모르는 것만 짧고 빠르게 정리한 노트입니다.
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;
}
'Java > Java의 정석' 카테고리의 다른 글
[Java의 정석] 7.2 메소드 오버라이딩 시 예외 선언 (0) | 2022.03.14 |
---|---|
[Java의 정석] 07. 클래스 상속 & 인터페이스 상속 (0) | 2022.03.14 |
[Java의 정석] 05. 배열 (0) | 2022.03.05 |
[Java의 정석] 04. 조건문 (0) | 2022.03.05 |
[Java의 정석] 03. 연산자 (0) | 2022.03.05 |