Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 엔드포인트
- 얕은 복사
- has-a
- Up Casting
- constructor
- node.js
- Java
- 셔뱅
- 파이참
- Stream
- pycharm
- parameter group
- access modifier
- finalize
- 내부클래스
- generic programming
- arraycopy
- lambda
- shebang
- singletone
- dbeaver
- down casting
- 자바
- 깊은 복사
- 스트림
- extends
- public static final
- Wrapper class
- Inbound
- identityHashCode
Archives
- Today
- Total
٩(๑•̀o•́๑)و
20200306 본문
추상 클래스
- 1개 이상의 추상 메서드를 포함한 클래스
- 추상 메서드 : 구현 코드가 없이 선언부(리턴타입, 메서드명, 매개변수) 만 있는 메서드. body가 없음.
- 리턴타입 메서드명 (매개변수); 형태. 중괄호가 들어가지 않는다.
- public void test();와 public void test(){};는 다름. 전자는 추상메서드, 후자는 구현부에서 아무것도 하지 않는 일반클래스.
- abstract 예약어 사용. public abstract class 클래스명과 같은 형태로 클래스를 선언&메서드도 접근제어자 abstract 리턴타입 메서드명 (매개변수); 형태로 정의해야함.
- 추상 클래스는 new(인스턴스화)할 수 없음
- 실제 메서드 바디는 하위클래스에서 구현된다. 추상클래스는 상위 클래스용으로 주로 사용됨.
- 구현해야하는 메서드들을 상위 클래스에서 선언해두고 구현의 책임을 하위클래스에 위임한다.
- 추상클래스에서 바디가 구현된 메서드도 함께 존재할 수 있음.
- 클래스 내에 추상메서드가 한개이상 존재할 경우에는 추상 메서드의 바디를 구현하거나 abstract 예약어로 클래스와 메서드를 정의해야함
- 추상 클래스를 구현하는 하위클래스는 extends 키워드로 추상클래스를 상속받은 후 추상메서드들을 @Override를 통하여 오버라이딩해야한다.
- 하위 클래스에서 상속받은 추상클래스의 추상메서드를 모두 구현하지 않았다면 해당 클래스도 abstract 클래스가 되어야한다.
- 모든 메서드가 구현되었다고해도 클래스에 abstract키워드를 사용하면 추상클래스 - 상속용으로만 사용하려는 경우..실제 쓰이지는 않고 기반이 되는 용도로 사용하려는 경우
<> concrete class
==> 추상 클래스는 주로 상속의 상위 클래스로 사용됨.
- 추상 클래스 내 추상 메서드 : 하위 클래스가 구현해야 하는 메서드. 하위클래스에 구현의 책임을 위임한다.
- 추상 클래스 내 구현된 메서드 : 하위 클래스가 공통으로 사용하는 기능의 메서드(상속받기때문). 하위 클래스에 따라 재정의(오버라이딩)할 수 있음(단, final로 선언된 메서드는 재정의할 수 없다.)
==> 만약 모든 하위클래스가 반드시 추가해야하는 메서드가 있다면 ?
- 상위클래스에서 abstract로 추상 메서드를 선언하기
- public void display(){} 과 같이 구현부에서 아무것도 하지 않는 메서드로 상위클래스에서 선언한 후 하위클래스에서 재정의하기



추상 클래스 응용 - ex. 템플릿 메서드 (패턴)
템플릿 : 틀이나 견본을 의미
템플릿 메서드
- 추상 메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오, logic)를 정의해 놓은 매서드
- 하위 클래스에서 추상 메서드의 구현 여부와 관계 없이 로직은 변함이 없음.
- final로 선언하여 재정의 할 수 없게 함 - 재정의할 수 없는 메서드가 됨.
- final로 선언된 메서드는 하위클래스에서 재정의하면 안되며, 할수도 없음.
- 시스템관련, 메모리관련, 시나리오정의 등의 용도이기때문에 하위클래스에서 재정의를 막아둔 메서드
템플릿 메서드 패턴
- 디자인 패턴의 일종
- 프레임 워크에서 많이 사용되는 설계 패턴
- 추상 클래스로 선언된 상위 클래스에서 추상 메서드를 이용하여 전체 구현의 흐름을 정의하고 구체적인 각 메서드 구현은 하위 클래스에 위임함
- 하위 클래스에서 어떻게 구현했는지와 관계없이 템플릿 메서드에 정의된 시나리오(로직)대로 수행됨.

final 예약어
- final 변수 : 값이 변경될 수 없는 상수. 오직 한번만 값을 할당할 수 있기 때문에 반드시 선언과 동시에 초기화되어야함. 값이 변할일도 거의 없고 외부에서 정적으로 사용되는 경우가 종종있기 때문에 static final형태로 주로 사용됨. (ex. public static final double PI = 3.141592;)
- final 메서드 : 하위 클래스에서 재정의(overriding)할 수 없음
- final 클래스 : 더이상 상속되지 않음. (ex. java의 String 클래스 - extends String은 불가!) 상속할 경우 오버라이딩시 상위클래스에 영향을 줄 수도 있거나 상속이 되었을때 문제가 될 수 있거나 해당 클래스의 고유한 기능이 있을 경우 클래스 앞에 final을 선언한다.
public static final 상수값 정의하여 사용하기
- 프로젝트 구현 시 여러 파일에서 공유해야하는 상수 값은 하나의 파일에 선언하여 사용하면 편리함.
- static으로 인하여 제일 처음 한번만 메모리에 잡히고 new할 필요 없이 클래스 이름으로 상수값을 바로 사용할 수 있게 됨.
- 자바에서는 글로벌 변수같은 것을 둘 수 없기 때문에 사용하는 방법

'Java' 카테고리의 다른 글
20200307 - Object Class (0) | 2020.03.07 |
---|---|
20200307 - 인터페이스 (0) | 2020.03.07 |
20200305 (0) | 2020.03.06 |
20200304 (0) | 2020.03.05 |
20200303 (0) | 2020.03.03 |