본문 바로가기
Study/Java

05. <오버로딩, 생성자, 상속, 포함 > ~자바의 정석 summary ~

by 하구땡 2023. 1. 12.
반응형

15.오버로딩(overloading)

: 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것

(1) 메서드 이름이 같아야 한다.

(2) 매개변수의 개수 또는 타입이 달라야 한다.

(3) return타입은 아무런 영향도 주지 않는다.

 

16.생성자(constructor)

- 인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’

- 모든 클래스에는 반드시 하나 이상의 생성자가 생성되어야 한다.

- 리턴값이 없다. (void사용 x)

- 생성자의 이름은 클래스의 이름과 같아야 한다.

- 오버로딩 가능

- point:생성자와 (클래스/인스턴스)메서드 구분하기

- 생성자가 갖는 몇 가지 특징을 제외하면 메서드와 다르지 않다.

 

[1]기본 생성자 - default constructor

: 매개변수가 없는 생성자 (클래스 내에 생성자가 하나도 없을 시 자동 생성됨)

 

[2]매개변수가 있는 생성자

 

           16-1.생성자에서 다른 생성자 호출 - this()

- 생성자의 이름으로 클래스이름 대신 this를 사용한다.

- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출 가능

 

17. 참조변수 this

- 인스턴스 변수와 지역 변수를 구분하는 데에 사용

- 인스턴스 변수 앞에 this.를 붙인다.

- static메서드에서는 인스턴스 변수를 사용하지 않으므로 참조변수 this를 사용하지 않는다.

- 참조변수 this와 생성자 this()를 혼동하지 않아야 한다. (완전히 다름)

 

18. 멤버변수의 초기화

- 지역변수는 초기화 항상 필요 / 멤버변수는 기본값으로 자동 초기화 된다.

- 자동 초기화 -> 명시적 초기화 -> (클래스/인스턴스)초기화 블럭 -> 생성자

- 클래스 변수 -> 인스턴스 변수

- 클래스 초기화 블럭은 처음 메모리에 로딩될 때 한번만 수행되지만,

  인스턴스 초기화 블럭은 인스턴스가 생성될 때마다 수행된다.

 

19. 상속

(~은 ~이다.  is-a)

: 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것

- 코드의 재사용성을 높이고 중복을 제거. 유지보수가 용이하다.

 

상속 클래스 예시

class Parent {}

class Child extends Parent {}

- 상속 해준 클래스 = 조상클래스 (Parent)

- 상속 받은 클래스 = 자손 클래스 (Child)

* 상속관계를 그림으로 표현한 것 : 상속계층도(class hierarchy)

* 자손 클래스는 조상 클래스의 생성자, 초기화 블럭을 제외한 모든 멤버를 상속받는다.

* 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.

* 조상 클래스를 변경하면 자손 클래스는 영향을 받지만, 자손 클래스의 변경은 조상 클래스에 아무런 영향을 주지 않는다.

* 상속은 오직 하나의 클래스로부터만 상속 받을 수 있다. (단일 상속)

* 모든 클래스 상속계층도 최상위에는 Object라는 조상클래스가 있다.

  (아무것도 상속 받지 않는 클래스들은 컴파일러에 의해 자동으로 Object 클래스를 상속받는다.)

 

19-1. 포함

(~은 ~을 가지고 있다.  has a)

: 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것

 

           19-2. 오버라이딩(overriding)

: 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것

* 메서드의 선언부(메서드 이름, 매개변수, 반환타입)은 변경할 수 없다.

* 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.

* 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

 

           19-3. 참조변수(super) / 생성자 super()

1) 참조변수super - 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수

2) 생성자 super() - 조상의 생성자를 호출하는데 사용

 

20. static - 클래스의, 공통적인

*static이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화 블럭

- static이 붙은 메서드 내에서는 iv를 사용할 수 없다.

- static이 붙은 멤버변수, 메서드는 인스턴스를 생성하지 않고도 사용 가능

 

21. final - 마지막의, 변경될 수 없는

*final이 사용될 수 있는 곳 - 클래스, 메서드, 멤버변수, 지역변수

1) 클래스 - 확장될 수 없는 클래스로 다른 클래스의 조상이 될 수 없다.

2) 메서드 - 오버라이딩을 통해 재정의 될 수 없다.

3) 변수 - 상수가 되어 값을 변경할 수 없다.

 

23. abstract - 추상의, 미완성의

*abstract가 사용될 수 있는 곳 - 메서드, 클래스

- 추상 클래스, 추상 메서드를 만들 때 사용된다.

- 추상 클래스는 아직 완성되지 않는 메서드가 존재하는 ‘미완성 설계도’이므로 인스턴스 생성 불가

- 추상 클래스는 상속을 통한 자손클래스에 의해서만 완성될 수 있다.

- 추상 메서드는 구현부가 없으므로 괄호{} 대신 ‘;’을 적어준다.

/*주석을 통해 어떤 기능을 수행할 목적으로 작성했는지 설명한다.*/

 

< abstract 리턴타입 메서드이름(); >

- 추상클래스를 상속받은 자손클래스는 오버라이딩을 통해 이를 구현한다.

  하나라도 추상메서드가 남아있다면 자손클래스 또한 추상클래스가 된다.

- 추상 클래스는 보편적으로 자손 클래스의 공통적인 부분을 뽑아내 만든다.

- 추상 클래스의 메서드를 호출할 때에 실제로는 이를 구현한 자손 클래스의 메서드가 호출된다.

반응형

댓글