Summary

  • 추상클래스 : 공통클래스
  • abstract라는 키워드로 객체화를 못하게하고, 메소드가 재정의 되도록 할 수 있다.
  • abstract 메소드 : 일괄처리를 위해 부모 영역에 둔다. (서비스항목만 공통 / 구현은  공통이 아님)

 


추상화로 만들어진 클래스의 특징
1. 추상클래스는 뼈대이므로 절대로 실체화 되어서는 안됨.(객체화X)
2. 추상클래스는 뼈대이므로 반드시 재정의 해야하는 메소드가 있다.


 

객체지향 프로그래밍

캡슐화 : 개체가 하는 서비스함수를 모아둔 것.. ?

캡슐 : 주체, 대상

 

캡슐의 조립 : has a(조립) / is a (고쳐서 쓰는형태)

 

Is a 상속

-오버라이드

-생성자 오버로드

-super

-참조형식의 다양화

-동적바인딩(참조형식이 부모일 경우의 상황)

(오버라이드, 주소, 자식객체) 

추상화 

다형성 

 

추상화

개체(모듈,캡슐)가 3가지 목적으로 사용된다.

1. 큰거를 잘라서사용

2. 공통적이고 반복된 부분을 집중화

3. 잘라낸부분다음에 재사용

 

추상화 : (캡슐의)공통부분을 잘라내는 것

아우를수있는 추상적인 것

추상화도 is a 상속이다

 

클래식,자동차,세단,suv 의 공통분모 : 자동차

사람+토끼 : 동물

동물,생물의 공통분모 : 생명체

전투기,적기 : 비행기

*Bottom→ up

고도화작업/리팩토링

 

*Top→down :

공통적인것 -> 구체적인것 만드는 것

설계가 잘되어 있어야할 때 (바람직한 방법)

 

 abstract : 실체화되지못하도록 막는작업

Exam은 뼈대일 뿐 객체화되지 않게한다.

YBMExam와 NewlecExam들이 구체화될 것.

Exam클래스에 abstract를 붙이면 객체 생성할 수 없다라고 뜬다.

abstract는 결여된 부분이있기때문에 객체화될 수 없다.

 

추상클래스: 공통분모지만 객체화해야하는 경우가 있나요 ?

반드시 객체화되지 않아야하는건 아니다. (abstract를 붙이지않는 경우)

 

e.g. AWT(Abstract Window Toolkit 추상화된클래스)

Frame : 추상클래스

이것만가지고 쓸필요가있다면 쓰라고 마음으로만 추상클래스로 준비

코드로는 abstract를안붙여놓은것도 추상클래스가 될 수 있다.

객체화되지않길원하면 abstract를 붙여 실체화 못하도록 막을 수 있다.

 

 

추상클래스를 만들다보면 강요하고싶어질수가있다.

부모참조형식인 이유 ? 

Exam을 한 이유는 일괄관리를 하기위해 , 범용적으로 쓸수있는자료형

참조형식이 YBMEame이면 객체도 YBMEame만 쓸 수 있다.

네모,세모,원의 공통분모는 도형이다. 도형이라면 자식모두를 참조할 수 있다.

moveBy()기능이 서로 다르게 구현되었더라도 도형에 있어야만 한다. 

일괄적으로 관리하는 이유

부모 Exam에 avg()가 있어야하는 이유 ?

각각다르게구현되더라도 부모에 avg()가있어야한다.

Exam이 avg() 가지고있어야 일괄적으로 자식을 관리할 수 있다.

자식객체만 avg를 갖고있다면 일괄관리가 불가능 (e.g. exam.avg()오류발생)

1. 오버라이드를 해야해서 ? (X)

2. Exam으로 참조하려면 Exam클래스안에 avg()가 있어야한다 (△)

3. 일괄관리를 위해서, 범용적으로 쓸 자료형이 필요하다. 일괄적인 행위를 구현하기위해.

Exam의 avg()구현은 없애고 구현내용은 자식이 한다.

일괄처리를 위해 함수는 두지만 구현은 공통이아니다.

몸통은 상속하는 클래스들이 할것.

추상메소드

추상클래스가 갖고있는 공통기능을 의미

기능은 공통으로 가지고있고, 구현은 공통이 아니다.

서비스 항목만 공통으로 가지고있다.

 

상속하는애들이 구현 .자식이 구현책임을 갖는다.

자식이 무조건 오버라이드해야함

자식클래스에서 추상메소드를 구현하도록 에러메세지발생

 

 abstact 메소의 의미 

추상처리안하면 : 자식은 오류가안나니까 부모것을 그대로 사용할수도있다.

부모: 자식이 반드시 구현하도록 명시화,

자식: 모든자식이 구현하도록만드는 것

avg()메소드의 경우 NewlecExam 객체, YBMExam객체에서 각각 따로 구현되어야한다.

재정의 하지않으면 부모것을 그대로 실행하게되는데, 그럼 의도한 결과가 나오지않는다.

각 객체마다 가지고있는 멤버변수가 달라 구현과정이 다르다.

좌: YBMExam / 우 : NewExam


 

+ Recent posts