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 |
Tags
- /etc/network/interfaces
- 스프링 시큐리티
- 처음 만나는 AI수학 with Python
- 스프링부트핵심가이드
- 이터레이터
- 티스토리 쿠키 삭제
- 자바편
- 리눅스
- network configuration
- 알파회계
- d
- ㅒ
- iterator
- resttemplate
- Kernighan의 C언어 프로그래밍
- 목록처리
- 코드로배우는스프링웹프로젝트
- 처음 만나는 AI 수학 with Python
- 친절한SQL튜닝
- GIT
- 선형대수
- 자료구조와함께배우는알고리즘입문
- 네트워크 설정
- 코드로배우는스프링부트웹프로젝트
- 자료구조와 함께 배우는 알고리즘 입문
- 페이징
- 데비안
- 서버설정
- 구멍가게코딩단
- baeldung
Archives
- Today
- Total
bright jazz music
추상클래는 왜 반드시 본문
###추상 클래스는 왜 반드시 상속한 후 사용하도록 만들었는가? 왜 상속을 강제하게 만들었는가?
구체적인 구현의 책임은 그것을 사용하는 쪽에 넘기는 것. 추상 클래스에서 공통 부분만 만들고, 맥락과 용도에 따라서 달라질 수 있는 부분이 있을 때 그것을 상속받은 하위 클래스에서 용도에 따라 달라지는 구현을 사용자가 직접하도록 규약하는 것이 추상클래스의 용도이다. 일부는 공통인데 또 일부는 각기 다른, 상황에 따라서 달라질 수 있는 공통적이지 않은 부분을 가지고 있는 어떤 클래스를 만들 때 추상클래스를 쓰는 것이 효과적이다. 계산기를 생각해 보자 사칙연산은 기본이니 추상클래스에 설계한다. 그리고 일부는 또 각기 다르기 때문에 상속받아서 직접 꾸미도록 한 것이다. 이렇게 프로그래밍하는 방식을 탬플릿 패턴이라고 한다. 모양자를 생각해 보자 똑같은 모양의 도형을 계속해서 그려 나갈 수 있지만 그것을 어떤 도구로 어떤 색으로 칠하는지는 사용자에게 달렸다.
그런데 여기서 질문이 생겼다. 그렇다면 인터페이스를 쓰면 되지 않는가?
이러한 추상 클래스의 사용은 작은 프로젝트에는 거의 없지만 큰 프로젝트에는 거의 쓰인다.
클래스 A는 abstract-- 추상클래스의 추상 중괄호가 없고 시그니처만 가지고 있음.
클래스 B는 A를 상속-- 익스텐드 후 반드시 오버라이딩을 해야함.
멤버 중 하나라도 추상이라면 그 멤버를 담고 있는 클래스도 추상이 된다.
abstract class A {
public abstract int b();
public void d(){
System.out.println("world");
}
}
class B extends A {
public int b(){
return 1;
}
}
public class AbstractDemo {
public static void main(String[] args) {
// A obj = new A(); 오류
B obj = new B();
}
}
'Framework > Spring' 카테고리의 다른 글
JpaRepository + 페이징, 쿼리메소드 (0) | 2022.06.23 |
---|---|
JPA 인터페이스 생성 + CRUD 테스트 (insert, findById, getOne, getReferenceById save, deleteById) (0) | 2022.06.12 |
JPA 활용 + 클래스 생성 및 테이블 생성 (0) | 2022.06.09 |
리스트 또는 배열을 파라미터로 전달할 때의 처리 (0) | 2022.04.07 |
Rest방식 (0) | 2021.06.24 |
Comments