오버로딩
오버로딩이란?
- 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것
오버로딩의 조건
- 메서드 이름이 같아야 한다
- 매개변수의 개수 또는 타입이 달라야 한다
- 반환 타입은 영향력이 없다
오버로딩의 장점
- 하나의 이름으로 여러 메서드를 정의할 수 있어서 기억하기 쉽고 오류의 가능성도 줄일 수 있다
- 메서드의 이름을 절약할 수 있다
가변인자와 오버로딩
- 메서드의 매개변수 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해 줄 수 있게 되었으며 이 기능을 가변인자라고 한다
- 가변인자는 타입... 변수명 과 같은 형식으로 선언한다
- 가변인자 외에 매개변수가 있다면 가변인자를 매개변수 중 제일 마지막에 선언해야 한다
- 가변인자는 인자의 개수를 가변적으로 할 수 있다(인자가 아예 없어도 된다)
- 가변인자는 내부적으로 배열을 이용하기 때문에 가변인자가 선언된 메서드를 호출할 때마다 배열이 새로 생성된다
- 매개변수의 타입을 배열로 하면 반드시 인자를 지정해줘야 하기 때문에 인자가 생략 불가능하다
- 가변인자를 오버로딩 할 때 오버로딩된 메서드끼리 구별이 잘 되지 않는 경우가 있기 때문에 주의해야 한다.
생성자
생성자란?
- 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
- 인스턴스 초기화 작업에 주로 사용되며 인스턴스 생ㅇ성 시에 실행되어야 할 작업을 위해서 사용된다
- 클래스 내에 선언, 이름은 클래스 이름과 같으며 리턴 값이 없다
- 리턴값이 없으면 void를 붙여야 하지만 모든 생성자가 리턴값이 없으므로 void를 생략함
- 생성자도 오버로딩이 가능하기 때문에 여러개의 생성자가 존재할 수 있다
- 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다
- Card c = new Card();
- 연산자 new에 의해 메모리(heap)에 Card 클래스의 인스턴스가 생성
- 생성자 Card()가 호출되어 수행
- 연산자 new의 결과로 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장
기본 생성자
- 클래스에 정의된 생성자가 하나도 없을 때 기본 생성자가 컴파일러에 의해 추가됨
매개변수가 있는 생성자
- 매개변수가 있는 생성자를 사용하면 인스턴스를 생성하는 동시에 원하는 값으로 초기화 할 수 있음
생성자에서 다른 생성자 호출하기
- 생성자의 이름으로 클래스 이름 대신 this를 사용
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다
- 생성자 내에서 초기화 작업 도중 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수의 값을 초기화 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문이다.
- this는 참조변수로 인스턴스 자신을 가리킨다(인스턴스의 주소가 저장되어 있으며 모든 인스턴스메서드에 지역변수로 숨겨진 채 존재한다)
- this를 사용할 수 있는 것은 인스턴스 멤버 뿐이고 static 메서드는 this를 사용할 수 없다
- static 메서드는 인스턴스를 생성하지 않고돌 호출될 수 있으므로 static 메서드가 호출된 시점에 인스턴스가 존재하지 않을수도 있기 때문이다
생성자를 이용한 인스턴스의 복사
- 현재 사용하고 있는 인스턴스와 같은 상태를 갖는 인스턴스를 하나 더 만들고자 할 때 생성자를 이용할 수 있다