1. 오버로딩
오버로딩이란?
한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도
매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메서드를 정의
할 수 있다.오버로딩의 조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
반환 타입은 상관이 없다.
예시
오버로딩의 장점
- 근본적으로 같은 기능을 하는 메서드를 따로 선언할 필요가 없다.
- 기억하기 쉽다
- 이름을 짧게 할 수 있다.
장점 예시(println)
- 메서드의 이름을 여러가지로 정의하지 않고 오버로딩을 통해 매개변수만 바꾸어 주었다.
가변인자와 오버로딩
- 가변인자란?
- 변수를 동적으로 더 받을 수 있음 {type}… 변수명 형태로 지정
- 매개변수 부여 수식의 끝에 와야함.
- 가변인자와 매개변수의 타입을 배열로 하는 것의 차이
- 차이점
인자 | 가변 인자 사용 | 매개변수 배열 |
null | 가능 | 가능 |
인자 x | 가능 | 불가능 |
- 가변인자를 오버로딩 할때 주의사항
- 가변 인자를 선언한 메서드를 오버로딩하면, 메서드를 호출했을 때 이와 같이 구별되지 못하는 경우가 발생한다.
- 가변 인자를 사용한 메서드는 오버로딩 하지 않는 것이 좋다.
2. 생성자
2.1 생성자란
생성자는 인스턴스가 생성될때 호출되는 인스턴스 초기화 메서드이다. 인스턴스 변수의 초기화에 주로 사용되며 인스턴스 생성시에 바로 실행되어야 할 작업을 위해서도 사용된다.
- 생성자를 설정해 주지 않으면 컴파일러가 아무런 내용도 없는 생성자를 추가해 준다.
- 따라서 생성자를 사용할 일이 없으면 기본 생성자를 사용하는 것도 좋다.
기본 생성자, 매개변수가 있는 생성자
- 생성자는 클래스 안에서 클래스이름(인자){초기 선언문} 형식으로 만든다.
- 클래스에는 기본적으로 기본 생성자가 내장되어 있다.
- 클래스에 매개변수가 있는 생성자가 존재한다면 컴파일러는 기본 생성자를 생성하지 않는다.
생성자에서 다른 생성자 호출하기
생성자에서 다른 생성자를 호출해줄 필요가 있을 때가 있다. this()를 사용하면 생성자에서 다른 생성자를 호출해줄 수 있다.
- 생성자 안에 생성자를 호출 할 경우 반드시 첫 줄에서만 호출이 가능하다.
- 생성자의 이름으로 클래스 이름 대신 this를 사용한다.
생성자를 이용한 인스턴스의 복사
- 해당 클래스의 참조변수를 넘겨준다면 생성자를 이용하여 맴버 변수를 복사할 수 있다.
3. 변수의 초기화
변수의 초기화
- 멤버 변수와 배열의 초기화는 선택적이다. 멤버변수는 변수를 초기화 하지 않아도 기본값으로 초기화가 자동으로 된다.
- 지역변수의 초기화는 필수이다.
➡️ 알고 가자(변수 초기화 기본값)
자료형 | 기본값 |
boolean | false |
char | ‘\u0000’ |
byte, short, int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d or 0.0 |
참조형 변수 | null |
멤버 변수의 초기화 방법
- 명시적 초기화
→ 그냥 생성과 동시에 값을 고정시켜 넣어서 초기화.
- 생성자
→ 생성자 사용과 동시에 초기화
- 초기화 블럭
초기화 블럭
➡️ 클래스 초기화 블럭
- 클래스 변수의 복잡한 초기화에 사용된다
- 클래스가 메모리 영역에 올라갈 때 한번만 수행된다.
- 초기화 순서( 기본 값 → 명시적 초기화 → 클래스 초기화 블럭)
➡️ 인스턴스 초기화 블럭
- 인스턴스 변수의 복잡한 초기화에 사용된다
- 인스턴스가 생성될 때마다 초기화된다.
- 초기화 순서(기본값 → 명시적 초기화 → 인스턴스 초기화 블럭 → 생성자)
인스턴스 변수의 초기화는 보통 생성자를 이용한다. 인스턴스 초기화 블럭은 모든 생성자에서 공통으로 수행되어야 하는 코드를 넣는데 사용한다.
😜 예제를 통해 왜 초기화 블럭을 사용해야 하는지 알아보자
예제 1번. 반복된 코드
- 인스턴스가 생성될떄마다 인스턴스 초기화 블럭이 클래스 변수를 한개 증가시키고 인스턴스 변수를 선언한다. (따로 인스턴스 변수를 계속 초기화 할 필요가 없다.
- 클래스 변수는 초기화 되지 않기 떄문에 차량의 시리얼 번호가 계속 증가할 수있다.
예제 2번 - 생성자에서 반복되는 코드