자바에서 부모클래스는 Superclass, 자식클래스는 Subclass 이다.
탄생에 관련된 것은 super() (생성자) --> 부모의 생성자를 명시적으로 부르는것
부모가 가진 것에 대해서 접근할 때는 super. 으로 한다. (변수, 메서드) ex) super.mom_wallet
자식 클래스가 생성될 때는 무조건 부모 클래스를 부른다. (무조건 부모의 생성자를 실행한다.) 이와 관련된 문제를 정리해본다.
class Parent{
Parent() {
System.out.println("Parent Consturctor");
}
}
class Child extends Parent{
Child() {
super(); //부모 클래스의 생성자 호출
System.out.println("Child Constructor);
}
}
public class Main{
public static void main(String[] args){
Child c = new Child();
}
}
이 문제의 답은 "Parent Constructor \n Child Constructor" 이다.
그럼 여기에서 super()가 없다면 어떻게 될까?
답은 똑같다.
왜 똑같냐? 자식 클래스는 기본적으로 생성될 때 (Child c = new Child() 의 시점에서) 부모의 생성자를 명시적으로 불러온다. 그러니까 super()를 쓰든 쓰지 않든 똑같게 출력이 된다.
그러면 위의 코드는 Parent Constructor 두 번, Child Constructor 한 번이 결과값이 되어야 하지 않을까?
super()를 명시적으로 호출하든 호출하지 않든, 부모 생성자는 딱 한번만 호출된다.위 코드에서 super()는 추가적인 호출을 만드는 것이 아니라, 부모 생성자가 호출되는 정확한 위치를 지정하는 역할인 것이다.
자식 클래스에 생성자가 없는 경우도 마찬가지이다. 자식 클래스에 만약 생성자가 없다면 컴파일러가 기본 생성자를 자동으로 생성한다. 자식 클래스가 생성될 때 부모의 생성자를 무조건 불러오는 이유가 이 때문이다.
this는 무엇인가?
클래스로부터 파생된 객체 그 변수를 말한다.
이게 뭔 소린가 싶다. 예를 들어보겠다. 강아지 라는 클래스가 있는데 이로부터 생성된 개체들에게 이제부터 이름을 지어줄 거다. 여러분은 내가 이 강아지들의 이름을 뭐라고 지을건지 예상할 수 있는가? 없다. 그러므로 "이것" 이라고 지칭한다. 사용자가 이름을 뽀삐라고 짓든 바둑이로 짓든 내가 코드를 짤 때 이것들은 다 "this"로 표현할 수 있다는 소리이다.
class Example{
int x;
Example(int x) {
this.x = x; //this.x는 인스턴스 변수, x는 매개 변수
}
void display() {
System.out.println("x =" + this.x);
}
public static void main(String[] args){
Example obj = new Example(10);
obj.display();
}
}
obj 라는 객체 생성되었다. 생성자를 불러 this(obj).x 에 new Example(10) 에서 받아온 10을 가져오고 출력한다.
정리
- super, this 둘 다 뒤에 괄호 ( ) 가 붙으면 생성자이다.
- super, this 둘 다 뒤에 점 . 이 붙으면 변수이거나 메서드다.
확실히 문제 풀어보면서 감을 익혀야 하는 부분인듯하다.
정보처리기사 실기 | Java에서 super와 this 키워드 박살내기
'멘토링' 카테고리의 다른 글
[SpringBoot] 날짜 별 폴더생성 및 이미지 정렬 (서버->프론트 UI) (0) | 2025.05.12 |
---|---|
React랑 Spring 연동 후 간단한 예제 실행 (0) | 2025.04.29 |
[Java] 지역 전역 변수 접근지정자 생성자 상속 Copilot 문제 풀어보기 (0) | 2025.04.21 |
[Java] OOP 개념과 특징 (0) | 2025.04.18 |
전역변수 vs 지역변수 vs 정적변수 (0) | 2025.04.14 |