[JAVA] 객체지향의 설계원칙-SOLID

JUNYOUNG·2024년 3월 22일
0

지난번에 작성했던 [JAVA]추상클래스와 인터페이스 에 있는 예제를 보면서 객체지향의 설계 원칙을 알아보겠습니다.
객체지향의 설계원칙은 소프트웨어 개발에서 견고하고 유지보수가 쉬우며 확장 가능한 시스템을 구축하는 기반을 제공합니다. 이번 글에서는 인터페이스와 추상 클래스를 사용하여 SOLID 원칙을 어떻게 실현할 수 있는지 알아봅니다.

단일 책임 원칙 (Single Responsibility Principle, SRP)

RemoteControl 인터페이스는 전자 기기를 제어하는 하나의 책임만을 가집니다. 이는 SRP 원칙을 잘 보여주는 예시입니다. 각 메소드(powerOn, powerOff, volumeUp, volumeDown)는 리모컨의 하나의 기능을 나타냅니다.

public interface RemoteControl { 
	void powerOn();  
    void powerOff();
    void volumeUp();     
    void volumeDown(); 
}

개방-폐쇄 원칙 (Open/Closed Principle, OCP)

Animal 추상 클래스는 eat 메소드를 통해 확장 가능한 구조를 제공합니다. LionElephant 클래스는 Animal을 상속받아 eat 메소드를 각자의 방식으로 구현함으로써 OCP 원칙을 따릅니다.

public abstract class Animal {
	public abstract void eat();     
    public void sleep() {        
    	System.out.println("This animal is sleeping.");   
	}
}

리스코프 치환 원칙 (Liskov Substitution Principle, LSP)

TelevisionAirConditioner는 모두 RemoteControl 인터페이스를 구현합니다. 이는 RemoteControl 인터페이스 타입으로 Television 또는 AirConditioner 인스턴스를 사용할 수 있음을 의미하며, LSP 원칙을 만족시킵니다.

public class Television implements RemoteControl {
// 구현 코드... 
}  
public class AirConditioner implements RemoteControl {  
// 구현 코드... }

인터페이스 분리 원칙 (Interface Segregation Principle, ISP)

RemoteControl 인터페이스는 사용하는 클라이언트에 필요한 메소드만을 정의하여 ISP 원칙을 따릅니다. 만약 특정 기기가 볼륨 조절 기능을 필요로 하지 않는다면, 해당 기능을 분리하여 별도의 인터페이스로 정의할 수 있습니다.

의존성 역전 원칙 (Dependency Inversion Principle, DIP)

고수준 모듈(Television, AirConditioner)은 저수준 모듈(RemoteControl 인터페이스의 구현)에 직접 의존하지 않고, 모두 RemoteControl이라는 추상화에 의존함으로써 DIP 원칙을 준수합니다.

public class RemoteControlUser {     
	private RemoteControl remoteControl;      
    public RemoteControlUser(RemoteControl remoteControl){
    	this.remoteControl = remoteControl;     
        }
	public void turnOn() {
    	remoteControl.powerOn();     
        }
	}

이러한 방식으로 RemoteControl 인터페이스와 Animal 추상 클래스를 사용하면 SOLID 원칙을 준수하면서 유연하고 확장 가능한 코드를 작성할 수 있습니다

REF

[JAVA]추상클래스와 인터페이스
https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)

profile
Onward, Always Upward - 기록은 성장의 증거

0개의 댓글