본문 바로가기

카테고리 없음

추상화

추상화

 

- 클래스간의 공통점을 찾아내 공통의 조상을 만드는 작업

- 상속 계층도를 따라 올라갈수록 클래스의 추상화는 더욱 심화됨

 

 

 

ex )  게임을 예로 들어,  직업 - 전사분류 - 용기사  용기사는 직업으로 추상화 될 수 있음. 

 

구체화

 

- 상속을 통해 클래스를 구체화 함

 

 

추상 메서드

 

- 선언되어 있으나 구현되어 있지 않은 메서드  

- abstract 키워드로 선언

- public abstract int getValue();  //접근제한자 옆에 쓰이며, 메서드명 안에 입력 자료형이 없다.

- 바디로 특정화를 시킬 수 없다  ( {}로 바디를 만들수 없음 }

이것은 몸체만 제공 하므로 무엇이든 생각해볼 수 있게 하는것이다.

 

 

- 추상 메서드는 서브 클래스에서 오버라이딩하여 구현

예를들어, 위의 public abstract int getValue(); 를 오버라이딩해서 구현해야 한다.

 

 

추상 클래스

 

- 추상 메서드를 하나라도 가진 클래스

- 클래스 앞에 반드시 abstract 키워드를 선언해야 함.

 

 

 

추상 클래스의 특징

 

- 객체를 생성할 수 없다. (new 생성자();  불가능) [구현되지 않은 클래스이기 때문에]

 

필요성: 상속관계에서 추상클래스가 가지고 있는 추상메서드를 서브클래스가 반드시 구현해야 함을 알릴 때 (강제성)

 

 

설계와 구현 분리 : 슈퍼 클래스에서는 개념적 특징을 정의하고

서브클래스에서 구체적 행위를 구현.

 

추상 클래스는 다음과 같이 파일위에 A 아이콘이 표기된다.

 

 

-추상 메서드는 몸체를 가질 수 없지만, 추상 클래스는 몸체를 가진 메서드를 만들 수 있다.

-그러니까, 추상 메서드가 아닌 일반 메서드를 사용 할 수 있다.

 

추상 클래스는 인스턴스화 시킬 수 없다.

생성자의 선언은 가능하지만, 객체 생성은 불가능하다.

 

 

세개의 고용 클래스를 추상화 하기위해 하나의 추상화 클래스를 생성하였다.

필드에 공통된 변수가 있을 경우, 서브 클래스에서 이것을 지우고

생성자에 this 를 통해서 생성 가능하다, 왜냐하면 extends로 부모 클래스를 타고 올라가 그 변수가 있을경우에

그것을 인식하기 때문이다.