이번에는 구어체로 정리해볼게요?
자 오버로딩과 오버라이딩. 많이들 들어보셨나요?
이번에는 오버로딩 먼저 배워봅시다.
오버로딩을 설명하기 위해 println 메소드를 예시로 들어볼게요.
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)
자! 무엇이 같고, 무엇이 다른지 보이시나요?
네 맞습니다. 메소드명은 같은데, 매개변수가 다르죠?
또한 println() 메소드는 출력하는 기능을 담당하죠.
네. 메소드 오버로딩이란,
같은 이름, 다른 매개변수로 다양한 메소드를 만들어
메소드에 다양한 매개변수가 들어와도 같은 기능을 할 수 있도록 하는 것입니다.
오버로딩을 하기 위해 지켜야 할 규칙을 정리하면 다음과 같습니다.
오버라이딩은 상속 이후에 다뤄보겠습니다!! 슈웅~
자 저번 시간에 클래스와 객체에 대해서는 공부했었죠?
Java를 시작하면 매~~앤 처음에 변수의 선언과 초기화를 배우구요.
자 이번에는 위 두 개념을 합쳐볼거예요!
클래스를 만듭니다. 이 안에는 변수와 메서드가 선언되겠죠?
그 중에서 변수를 볼게요. 변수가 선언만 되고, 값이 안 들어가 있는 상황이에요.
이제 값을 넣을 건데...
'아.. 객체를 생성한 후에, 내가 일일히 변수에 값을 넣어줘야 하나?
c.kind = "Heart";
매번 이러면 너무 귀찮아...ㅠㅠ
더 좋은 방법은 없을까?'
있습니다. 바로 생성자를 이용하는 것이죠
생성자가 뭔데??
자 설명이 부족하죠? 하나씩 살펴 보자구요.
Card card = new Card();
Card 클래스의 참조변수(주소를 저장하는 변수)를
card라는 이름으로 만들었어요.
그리고 new Card();
로 인스턴스를 만들었어요.
그럼 이 인스턴스의 주소값이 card에 저장돼요.
new
가 인스턴스를 생성하는 키워드라면Card()
는 뭘까요?
Card()
가 생성자에요.
클래스 이름이랑 똑같은 메소드의 형태죠.
즉, Card card = new Card();
이 코드는
Card() 생성자가 시키는대로 new (새로운) 인스턴스를 만들자!!
그리고 이 인스턴스의 주소를 참조변수 card 에 넣어주자!!
그럼 참조변수를 통해 인스턴스의 멤버(변수,메소드)들을 다룰 수 있어!!
데이터를 담아서 활용하거나, 특정 기능을 수행시킬 수 있다고!!
이런 의미입니다.
근데, 위에서 이런 말을 했어요.
※ 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
하지만 전에는 생성자를 안 적었단 말이죠?
그 이유는 생성자를 클래스에 작성하지 않아도,
컴파일러가 기본 생성자 Card() {}
를 생성해주기 때문이에요.
( 매개변수가 없는 생성자가 기본 생성자야 )
근데, 매개변수가 있는 생성자를 써놓잖아요? Card(String x) {}
그럼 컴파일러는 기본 생성자를 만들어 주지 않아요.
이미 생성자가 있으니까 기본 생성자를 만들 필요를 못 느끼는 거죠
근데 기본 생성자가 없으면 나중에 에러가 발생할 수 있어요.
앞으로는 클래스를 생성할 때 기본 생성자를 직.접. 적어주자고요!
한 번 매개변수가 있는 생성자의 예시를 볼까요?
class Car {
String color; // 차의 색
String gearType; // 차의 기어유형
int door; // 차 문의 개수
Car () {} // 기본 생성자
Car(String color, String gearType, int door) { // 매개변수가 있는 생성자
this.color = color; //this.color은 인스턴스변수, color은 매개변수로 받아온 지역변수다.
this.gearType = gearType;
this.door = door;
}
}
Car c1 = new Car();
Car c2 = new Car("white","auto",4);
c1은 기본 생성자를 통해 인스턴스가 만들어지죠.
이러면 변수에 값을 저장하는 코드를 직접 작성해야 돼죠.
c2는 매개변수가 있는 생성자를 통해 인스턴스를 만들었어요.
"white","auto",4 가 각각 color, gearType, door에 저장된 채로 인스턴스가 만들어지죠.
이렇게 인스턴스변수를 생성과 동시에 초기화 시킬 수 있어요.
아까 봤던 생성자 설명
이제 이해가 좀 되죠?
축하해요. 우리 모두 한 걸음 더 나아갔어요.
다음에 또 만나요~