반응형
목차
- 추상클래스란?
- 추상클래스의 특징
- 추상클래스 작성
- 추상클래스는 왜필요한가?
1. 추상클래스란?
미완성 설계도
추상메서드를 하나 이상 갖고 있는 클래스
추상메서드
abstract + 리턴타입 + 메서드이름();
선언부만 있고 구현부(몸통,{})가 없는 메서드
2. 추상클래스의 특징
1. 추상클래스는 new 동적할당자를 통해 인스턴스 객체를 만들 수 없다.
abstract class Unit{
abstract void move(int x,int y); //추상메서도 (몸통{}이 없는 미완성 메서드)
abstract void stop();
}
public class AbstractExample{
public static void main(String[] args){
//추상클래스의 인스턴스를 만들었을 때
Unit unit = new Unit();
}
2. 추상메서드 2개중 한개만 구현한 경우
abstract class Unit{
abstract void move(int x, int y);
abstract void stop();
}
class Terran extends Unit{
void move(int x, int y){
System.out.println("좌표 ("+x+","+y+")로 이동합니다.");
};
// void stop() {
// System.out.println("정지합니다.");
// };
}
public class AbstractExample{
public static void main(String[] args){
Terran terran = new Terran();
terran.move(100,100);
terran.stop();
}
}
추상 클래스인 Unit을 상속받은 Terran 클래스는 추상메서드 2개중 1개만 구현했기때문에 추상메서드를 포함하고 있다.
그러므로 Terran 클래스도 추상클래스가 되어야 하므로 앞에 abstract를 붙여줘야 한다.
다음과 같이 수정했을때는 추상클래스는 객체화 할 수 없다는 특징 때문에 new Terran();에서 에러가 나는 것이다.
3. 추상클래스의 작성
- 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성
- 기존 클래스의 공통부분을 뽑아서 작성
예를 들면, 동물이라는 추상클래스에 "짖다"라는 메서드명이 각자 다르다면?
강아지는 bark(), 사자는 roar(), 늑대는 howl() => 코드의 가독성이 떨어지고 중구난방이 된다.
따라서 공통부분을 뽑아서 작성하게 되면 코드가 훨씬 예뻐진다.
다형성을 이용한 작성
다형성이란 ?
조상타입의 참조변수로 자손타입의 객체를 다루는 것을 말한다.
public class AbstractExample{
public static void main(String[] args){
Unit[] group = new Unit[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new DropShip();
for(int i=0; i<group.length; i++){
group[i].move(100,100);
}
}
}
다형성을 이용해서 이렇게 묶게되면 객체끼리도 묶을 수가 있고 동시에 작업을 진행할 수도 있다.
4. 추상클래스는 왜 필요한가?
- 객체들의 필드와 메서드의 이름을 통일하여 가독성을 높이기 위해
- 개발의 효율을 증대시키기 위해
상속을 했을 때 중복이 제거되고 작성하기가 쉬워진다.
새로운 모델이 만들어지면 상속받아서 새로운 설계도를 만들면 된다.
부모의 변경사항이 자손들에게도 적용된다라는 말은 관리가 용이하다라는 뜻이다.
추상클래스와 많이 비교되는 것이 인터페이스이다.
다음 포스팅은 인터페이스가 될 예정이다.
반응형
'자바' 카테고리의 다른 글
[JAVA] 단언문 Assert (0) | 2024.12.24 |
---|---|
[Java] for문 - 향상된 for문 (0) | 2024.02.03 |
[Java] 원 만들기 (0) | 2024.02.01 |
[JAVA] 인터페이스(interface)를 분석해보자 (1) | 2024.01.15 |