본문 바로가기
뉴렉처 과정 기록 (Backend)/JAVA

04/05 JAVA 추상화

by yeonee3219 2021. 4. 5.

jwkim96.tistory.com/90

 

[다시시작하는 자바] 5. 추상화(추상클래스, 인터페이스)

1. 추상화 추상화란 여러 객체에 공통적으로 사용되는, 사용되어야 하는 내용을 뽑아내는것을 말한다. 치즈라면과 떡라면, 만두라면이 있다. 물을 끓이고, 스프와 면을 넣는 과정 까지는 모든 라

jwkim96.tistory.com

 

 

 

캡슐들 중에서 공통적으로 나타나는 부분을 분리해서 캡슐로 만들어 놓는 행위를 추상화라 한다

 

->  공통분모의 캡슐화

 

 

 

 

 

 

이건 생활코딩

abstract란 한국어로는 추상으로 번역된다.

abstract라는 것이 상속을 강제하는 일종의 규제라고 생각하자.

즉 abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것이 abstract다. 

 

추상 메소드란 메소드의 시그니처만이 정의된 비어있는 메소드를 의미한다. 

 

 

 

*  추상화로 만들어진 클래스의 특징

 

   1. 추상 클래스는 뼈대이므로 절대로 실체화 되어서는 안됨 -> new 해서 객체를 생성할 수 없다 

 

   2. 추상 클래스는 뼈대이므로 반드시 재정의해야하는 메소드가 있다

 

 

 

 

 

 

 

Exam 클래스를 상속받는 새로운 YBMExam 클래스가 생겨났다 -> toeic 과목 추가된 클래스

 

 

 

 

 

 

 

 

 

NewExam클래스와 YBMExam클래스의 

공통분모 클래스인 Exam에 추상클래스라는 의미인 abstract를 붙여주었다

 

 

abstract를 붙여주면 객체화 시킬 수 없다

 

 

 

 

하지만 반드시 객체화 시키면 안된다는 것은 아니다 -> abstract 안붙이면 됨

그냥 객체화되길 원하지 않는다면 -> abstract 붙여주서 객체화 못하게

 

 

 

-> 그렇다면 언제 쓰는 거지?

 

 

 

 

 

추상화 된 클래스

 

 

 

 

YBMExam 클래스에도 필요한 total과 avg 함수 넣어주었다. 

자식 클래스 둘 다 고쳐사용하는 함수이므로 부모함수에서는 정의할 필요가 없다 

 

-> 그래서 없애면? -> 메인 함수에서 부모형식을 참조로 한 객체 생성을 한 경우에 avg함수 사용 불가하다

 

 

그래서 abstract하고 내용이 없는 함수 제공만 해주었다

-> 자식 클래스에서 꼭 함수를 구체화 해주어야 한다

     (안해줄 경우 자식클래스에서 오류)