2025/04 5

[JAVA] DIP (의존 관계 역전 원칙)

■ DIP구체화의 의존하지 말고 추상화(인터페이스, 추상 클래스)에 의존해야 한다. 예제)● Car는 Engine을 사용해서 움직인다.● 엔진 종류는 GasEngine, ElectricEngine이 있다.■ DIP 위반 (엔진에 직접 의존)class GasEngine { public void start() { System.out.println("휘발유 엔진 시동"); }}class Car { private GasEngine engine = new GasEngine(); // 직접 생성 (구체 클래스에 의존) public void drive() { engine.start(); System.out.println("차가 출발합니다!"); }}1)..

JAVA 2025.04.12

[JAVA] ISP (인터페이스 분리 원칙)

■ ISP- 인터페이스를 각각 사용에 맞게 분리해야한다는 원칙- SRP 원칙은 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조- 인터페이스를 사용하는 클라이언트를 기준으로 분리함으로써 클라이언트의 목적과 용도에 적합한 인터페이스 만 제공  ■ ISP 적용 전// 너무 많은 책임을 지는 인터페이스public interface Worker { void work(); void eat(); void sleep();}// 로봇도 이 인터페이스를 구현해야 함public class Robot implements Worker { @Override public void work() { System.out.println("로봇이 작업 중..."); } ..

JAVA 2025.04.08

[JAVA] LSP (리스코프 치환 원칙)

■ LSP- 부모 객체와 자식 객체가 있을 때 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙- 자식 클래스는 부모 클래스가 정의한 계약을 위반하지 않고 부모 클래스의 기능을 확장하거나 수정할 수 있어야 한다   ■ LSP 위반한 예제// 부모 클래스class Bird { public void fly() { System.out.println("새는 날 수 있다."); }}// 자식 클래스class chicken extends Bird { @Override public void fly() { throw new ChickenException("닭은 날지 못한다."); }}// 테스트 클래스public class LSPV..

JAVA 2025.04.07

[JAVA] SRP (단일 책임 원칙)

■ SRP클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙이다. 이 원칙에 따라 클래스는 하나의 이유로 변경되어야 한다. ■ SRP 따르지 않은 예시class User { private String name; private String email; public User(String name, String email) { this.name = name; this.email = email; } public String getName() { return name; } public String getEmail() { return email; }}class UserManager { public void saveU..

JAVA 2025.04.06

[JAVA] OCP (개방 폐쇄 원칙)

● OCP - Open for extension : 새로운 기능의 추가나 변경 사항이 생겼을 때 , 기존 코드는 확장할 수 있어야 한다.- Closed for modification : 기존의 코드는 수정되지 않아야 한다. ■ 새로운 차량의 추가- Driver의 코드는 변경하지 않고, 다른 차들이 늘어나도 Car를 사용하는 Driver 코드 전혀 변경하지 않는다.  ■ 확장에 열려있다는 의미- Car 인터페이스를 사용해 새로운 차량을 추가할 수 있고 Car 인터페이스를 구현해서 기능을 추가할 수 있다는 의미 그러면 Driver도 Car 인터페이스를 통해 새롭게 추가된 차량을 자유롭게 호출할 수 있다.  ■ 코드 수정은 닫혀 있다는 의미- 새로운 차를 추가하게 되면 기능이 추가되기 때문에 기존 코드의 수정..

JAVA 2025.04.06