자바와 객체지향에대해 공부하다보면 약한 결합, 약한 의존성 등의 단어를 들어봤을 것이다.
나중에 코드의 수정이나 재사용을 쉽게 하기위함 이라고 생각하면 편할 것이다.
아래의 코드를 예로 들어보겠다.
public class PublicTransport {
void move() {
Bus bus = new Bus();
bus.move();
}
public static void main (String[] args) {
PublicTransport p = new PublicTransport();
p.move();
}
} // 대중교통
class Bus {
void move() {
System.out.println("움직이다");
}
} // 버스
Bus 클래스와 PublicTransport 클래스가 있다. 만약 PublicTransport 클래스에서 Bus 클래스가 아니라 택시나 기차 클래스를 호출하고자 한다면
많은 변경이 불가피하다. 그렇다면 어떻게 바꿔야할지 생각해보자.
- 추상클래스, 인터페이스의 활용
- 각자의 공통된 부분을 추상메서드로 만들어 상속을 통해 사용.
- 각 클래스에서 오버라이드 - 메서드 재정의
- 메인 메서드에서 객체 생성후 호출
위의 방식대로 두 가지 코드를 만들어봤다.
public class PublicTransport {
public static void main (String[] args) {
Bus bus = new Bus();
Taxi taxi = new Taxi();
bus.move();
taxi.move();
}
}
interface Interface {
void move();
} // 추상메서드 집합 인터페이스
class Bus implements Interface{
@Override
public void move() {
System.out.println("버스를 타다");
}
} // 버스 클래스 - 인터페이스의 move 메서드 상속, 재정의
class Taxi implements Interface{
@Override
public void move() {
System.out.println("택시를 타다");
}
} // 택시 클래스 - 인터페이스의 move 메서드 상속, 재정의
public class PublicTransport {
void drive(Interface in) {
in.move();
}
public static void main (String[] args) {
PublicTransport pub = new PublicTransport();
pub.drive(new Bus());
pub.drive(new Taxi());
}
}
interface Interface {
void move();
} // 추상메서드 집합 인터페이스
class Bus implements Interface{
@Override
public void move() {
System.out.println("버스를 타다");
}
} // 버스 클래스 - 인터페이스의 move 메서드 상속, 재정의
class Taxi implements Interface{
@Override
public void move() {
System.out.println("택시를 타다");
}
} // 택시 클래스 - 인터페이스의 move 메서드 상속, 재정의
이처럼 공통된 메서드를 만들어두고 클래스가 늘어나면 메서드를 가져와서 사용하면 그만이다.
조금 더 편하고 쉬운 코드를 만들기 위해 여러가지 방법을 찾아보자
'TIL' 카테고리의 다른 글
IOC와 DI란 ?? (0) | 2023.03.12 |
---|---|
Usecase - 유스케이스 다이어그램 (0) | 2023.02.27 |
자바 - 객체지향 프로그래밍의 4가지 특징 (캡슐화, 추상화, 상속, 다형성) (0) | 2023.02.23 |
자바 - 상속 (0) | 2023.02.22 |
자바 - 객체지향 (0) | 2023.02.21 |