JAVA의 정석 | Chapter 6 : 객체지향프로그래밍 1 (2)

Yunny.Log ·2022년 6월 2일
0

JAVA

목록 보기
14/29
post-thumbnail

4. 오버로딩

오버로딩의 조건

  1. 메서드 이름과 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  • 메서드 이름이 같아도 매개변수가 다르면 서로 구별 가능해서 오버로딩 가능
  • 반환 타입은 오버로딩을 구현하는데 전혀 영향을 주지 못함
int add(int a, int b)
int add(int x, int y)

=> 오버로딩 성립 x 매개변수 the same

int add(int a, int b)
int add(int x, int y)

=> 오버로딩 성립 x 매개변수 the same
=> 오버로딩에서 반호나 타입은 전혀 오버로딩에 영향 x

  • 오버로딩 장점 :

    만일 메소드가 변수처럼 이름만으로 구별되면, 매개변수 달라질 때마다 이름 다 달라져야 함 - 그래서 매개변수만 다르더라도 다른 함수로 취급 가능하게 해주는 것

5. 생성자

  • 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드
  • 인스턴스 변수 초기화 시 주로 사용, 인스턴스 생성 시 실행돼야 할 작업을 위해 사용

생성자의 조건

  1. 생성자 이름 == 클래스 이름
  2. 생성자는 리턴 값 없기
  • 연산자 new는 인스턴스 생성하는 것, 생성자가 인스턴스 생성하는 것은 아니다.
  • 단순히 인스턴스 변수 초기화

인스턴스 생성할 때는 반드시 클래스 내 생성자 중 하나를 선택해 지정해주기!

5.2 기본 생성자

  • class에 생성자 정의 아무것도 하지 않으면, 인스턴스 생성 시 컴파일러가 제공한 기본 생성자 사용!
  • 컴파일러가 자동적으로 기본 생성자 추가해주는 경우는 클래스 내에 생성자가 아무도 없을 때의 경우 뿐이라는 것을 명심*
class Data1 {
	int value;
}

class Data2 {
	int value;

	Data2(int x) { 	// 매개변수가 있는 생성자.
		value = x;
	}
}

class ConstructorTest {
	public static void main(String[] args) {
		Data1 d1 = new Data1();
		Data2 d2 = new Data2();		// compile error발생
	}
}

5.3 매개변수 존재 생성자

  • 인스턴스마다 각기 다른 값으로 초기화 되어야 하는 경우 많아서 매개변수 사용 초기화 유용 경우 많음

5.4 생성자에서 다른 생성자 호출 - this(), this

  • 같은 클래스 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출 가능

    1) 생성자의 이름으로 클래스 이름 대신 this 사용하기
    2) 한 생성자에서 다른 생성자 호출 시 (this(), 혹은 this(매개변수)) 반드시 첫 줄에서만 호출 가능

this : 인스턴스 자기 자신 가리키는 것

  • 지금 클래스 영역의 클래스를 가리키는 것
    => this를 사용할 수 있는 것은 인스턴스 변수들 뿐이지
  • static 메소드에선 인스턴스 멤버들을 사용할 수 없는 것처럼 this 역시 사용 불가능
  • static 메소드에서는 인스턴스가 존재하지 않을 가능성이 높기 때문이지

this () , this(매개변수) : 다른 생성자 호출 시 사용

  • 생성자, 같은 클래스의 다른 생성자 호출 시 사용
  • 반드시 첫줄에서 사용 !

Car(String color){
		x=5;
		this(color, "auto", 4) 
	}

=> 생성자 호출이 첫째줄 아니라서 에러


Car(String color){
		Car (color, "auto", 4) 
	}

=> 생성자 호출을 Car로 해서 에러

0개의 댓글