Java 상속(extends)과 super 키워드
요약
Java 상속(extends)의 개념과 super 키워드 사용법을 알아봅니다. 정보처리기사 실기에 출제된 상속 문제를 풀기 위한 핵심 개념을 정리합니다.
상속 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 상속 (extends) | 부모 클래스의 필드와 메서드를 물려받음 | class Square extends Rectangle |
| super | 부모 클래스의 생성자를 호출 | super(s, s); |
| this | 현재 객체 자신을 가리킴 | this.width = width; |
| 기본 생성자 | 매개변수 없는 생성자 | Rectangle() { } |
상속이란?
상속(Inheritance) 은 기존 클래스(부모)의 필드와 메서드를 새로운 클래스(자식)가 물려받는 것입니다.
쉽게 말하면, "부모가 가진 것을 자식이 그대로 사용할 수 있다" 는 뜻입니다.
위 코드에서 Square는 Rectangle을 상속받았기 때문에, 직접 선언하지 않아도 width, height, getArea()를 사용할 수 있습니다.

extends 키워드
자식 클래스가 부모 클래스를 상속할 때 extends 키워드를 사용합니다.
extends vs implements 비교
| 키워드 | 사용 대상 | 의미 | 예시 |
|---|---|---|---|
| extends | 클래스 -> 클래스 | 상속 (부모 기능을 물려받음) | class Square extends Rectangle |
| implements | 클래스 -> 인터페이스 | 구현 (약속한 기능을 만듦) | class A implements Person |
this 키워드
this 는 현재 객체 자신을 가리키는 키워드입니다. 주로 매개변수와 필드 이름이 같을 때 구분하기 위해 사용합니다.
- 필드(field): 클래스 안에 선언된 변수로, 객체의 데이터를 저장합니다. 아래 코드에서
int width, height;가 필드입니다. - 매개변수(parameter): 메서드나 생성자를 호출할 때 전달받는 값입니다. 아래 코드에서
Rectangle(int width, int height)의width,height가 매개변수입니다.
이 두 이름이 같으면 Java는 가까운 쪽(매개변수)을 우선 인식하기 때문에, 필드를 가리키려면 this.를 붙여야 합니다.
| 표현 | 의미 |
|---|---|
this.width | 현재 객체의 필드 width |
width | 매개변수 width |
this를 사용하지 않으면 매개변수 width와 필드 width를 구분할 수 없어서, 매개변수의 값이 필드에 저장되지 않습니다.
생성자란?
생성자(Constructor) 는 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 클래스 이름과 동일하고, 반환 타입이 없습니다.
기본 생성자
기본 생성자 는 매개변수가 없는 생성자입니다. 클래스에 생성자를 하나도 작성하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어줍니다.
super 키워드
super 는 부모 클래스의 생성자를 호출하는 키워드입니다. 자식 클래스의 생성자에서 반드시 첫 번째 줄에 위치해야 합니다.
super(s, s)는 부모 클래스인 Rectangle의 생성자 Rectangle(int width, int height)를 호출합니다. s가 width와 height 모두에 전달되므로, 정사각형(가로 = 세로)이 됩니다.
super를 반드시 명시해야 하는 경우
부모 클래스에 기본 생성자(매개변수 없는 생성자)가 없는 경우, 자식 클래스에서 반드시 super를 명시적으로 호출해야 합니다.
super를 생략할 수 있는 경우
부모 클래스에 기본 생성자가 있는 경우, 컴파일러가 자동으로 super()를 호출합니다.
super 정리 표
| 부모 클래스 상태 | super 필요 여부 | 이유 |
|---|---|---|
| 생성자 없음 (기본 생성자 자동 생성) | 생략 가능 | 컴파일러가 super() 자동 호출 |
| 기본 생성자 있음 | 생략 가능 | 컴파일러가 super() 자동 호출 |
| 매개변수 생성자만 있음 | 반드시 명시 | 기본 생성자가 없어서 자동 호출 불가 |
실전 예제: Rectangle과 Square
이 예제는 25년 3회 기출문제와 동일한 구조입니다.
실행 순서 추적
| 순서 | 코드 | 설명 |
|---|---|---|
| 1 | new Square(10) | Square 생성자 호출 (s = 10) |
| 2 | super(10, 10) | Rectangle 생성자 호출 (width = 10, height = 10) |
| 3 | this.width = 10 | Rectangle의 width에 10 저장 |
| 4 | this.height = 10 | Rectangle의 height에 10 저장 |
| 5 | sq.getArea() | 부모의 getArea() 호출: 10 * 10 = 100 |
Square는 Rectangle을 상속받았기 때문에 getArea() 메서드를 직접 선언하지 않아도 사용할 수 있습니다.