본문 바로가기
교육, 학습/멀티캠퍼스_풀 스택

JAVA 문법 - 상속, 생성자 개념과 비교, 주의점(is - a, has - a)

by 개발하는 경제학도 2022. 1. 4.

강의 소개

현재 수강하고 있는 멀티캠퍼스 k-digital 지능형 웹서비스 풀 스택 과정을 수강하며 적은 내용입니다.

교재로는 자바의 정석을 사용하고 있습니다.


상속과 생성자

 

상속

부모 클래스(= 상위 클래스)의 모든 특성(필드, 메서드)들을 그대로 물려받아 자식 클래스(= 하위 클래스)에서 사용할 수 있는 것이다.

하지만, 부모 클래스의 생성자, 초기화 블록은 상속받지 못한다.(오로지 필드, 메서드만 상속된다)

 

- 특징

1) 기존 코드의 재활용적 측면에서 효율적이다.

2) 자바의 특징인 객체 지향 프로그래밍을 구성하는 다형성의 기본이 된다.

3) 부모 클래스는 자식 클래스에 포함된 것으로 볼 수 있다. (자식 클래스에서 필드와 메서드를 확장하기 때문이다)

4) 자바에서는 단일 상속만이 가능하다. (자식 클래스에서 여러 부모 클래스를 둘 수 없다)

5) Object 클래스

사실 모든 자바의 클래스들은 이미 Object클래스라는 부모 클래스를 상속받고 있다. 따라서 직접 작성하지 않고 보이지는 않아도 이미 Object클래스를 상속받고 있어 Object 클래스의 toString()과 같은 메서드를 모든 클래스에서 실행할 수 있다.

6) 오버 라이딩과 관련된 개념이 상속이다.

 

- 형태

class 자식 클래스 extends 부모 클래스

 


 

생성자(construnctor)

자바에서는 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 생성자(constructor)라는 메서드를 제공한다.

자바에서 생성자(constructor)의 이름은 해당 클래스의 이름과 같아야 한다.

 

- 특징

1) 생성자는 반환 값이 없지만, 반환 타입을 void형으로 선언하지 않는다.

2) 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.

3) 객체를 초기화하는 방법이 여러 개 존재할 경우에는 하나의 클래스가 여러 개의 생성자를 가질 수 있다.

    (생성자도 하나의 메서드이기 때문에, 메서드 오버 로딩이 가능하다.)

 

- 생성자의 호출

new 키워드를 사용하면 객체 생성 시 자동으로 생성자가 호출된다.

TV myTV = new TV();

 

- 기본 생성자

모든 클래스에는 1개 이상의 생성자가 반드시 정의되어야 한다.

따라서 생성자가 없다면 컴파일러가 자동으로 기본 생성자를 만들어준다. 이때, 기본 생성자는  매개변수, 기능이 전부 없는 상태이다.

(만약 사용자가 매개변수를 가지는 생성자를 1개라도 생성하면 기본 생성자는 만들어지지 않는다)

 

[기본 생성자의 형태]

클래스이름() {}

[예제]

TV() {
}

 

- 매개변수가 있는 생성자(사용자 지정)

[매개변수를 포함한 생성자의 형태]

클래스이름(매개변수1, 매개변수2 /* .. */) { /*실행 내용*/ }

 

[예제] 매개변수를 사용하여 인스턴스 변수를 초기화하는 예

TV(String 색상, int 가격) {
	this.색상 = 색상;
	this.가격 = 가격;
}

 

- 생성자 오버 로딩

// price를 매개변수로 담는 생성자 1
TV(int price) {
}

// 채널과 주인을 매개변수로 담는 생성자 2
TV(String myChannel, String owner) {
}

오버 로딩은 같은 메서드 이름이지만, 매개변수의 차이로 인하여(매개변수의 타입 또는 개수) 동일한 메서드를 다른 기능으로 사용하는 것이다. 따라서 생성자도 메서드이므로 오버 로딩하면 이렇게 2가지의 생성자를 만들어 용도에 맞게 사용할 수 있다.

 

- 인스턴스 생성(자세히)

2021.12.30 - [교육, 학습/멀티캠퍼스_풀 스택] - JAVA 문법 - 인스턴스 생성 시 스택, 힙 상태변화

 


 

상속 VS 생성자 비교

IS-A 관계일 때는 상속이고, HAS-A 관계일 때는 생성자를 사용한다.

IS-A 관계 : 사람은 동물이다, 노트북은 컴퓨터이다 등과 같이 부모 클래스(일반적인 개념)를 자식 클래스(구체적인 개념)에서 구체화할 때, 상속을 사용한다.

HAS-A관계: 사람은 운전을 한다, 직원은 일을 한다 등과 같이 단순한 포함관계일 때, new로 생성자를 호출하여 다른 클래스를 사용한다.

 

주의점: 상속관계는 두 클래스 간의 영향력이 커지므로, 변경할 때 같이 영향받는 경우가 있어서 is-a 관계가 아닌 경우에는 상속을 지양해야 한다.

 

 

출처: 자바의 정석(남궁 성 저), 멀티캠퍼스

댓글