1. SRP: 단일 책임 원칙 (Single Responsibility Principle)
"한 클래스(또는 모듈/함수)는 하나의 책임만 가져야 한다."
2. OCP: 개방-폐쇄 원칙 (Open/Closed Principle)
"확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다."
Calculator 인터페이스를 만들고 DomesticCalculator, OverseasCalculator를 구현하면, 기존 코드를 수정하지 않고도 새로운 계산 로직을 추가할 수 있습니다.3. LSP: 리스코프 치환 원칙 (Liskov Substitution Principle)
"자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 한다."
4. ISP: 인터페이스 분리 원칙 (Interface Segregation Principle)
"사용하지 않는 메서드에 의존하도록 강제해서는 안 된다."
TradeAction이라는 거대 인터페이스 안에 매수(), 매도(), 수익정산(), 세금신고()가 다 들어있으면, 단순 조회만 필요한 화면에서도 불필요한 기능에 의존하게 됩니다. 이를 각각 분리해야 합니다.5. DIP: 의존역전 원칙 (Dependency Inversion Principle)
"고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다."
ProfitRepository라는 **인터페이스(추상화)**를 바라보게 합니다. 실제 그 안에서 SQL이 도는지, 메모리에서 계산하는지는 나중에 갈아 끼울 수 있게 만드는 것입니다.