본문 바로가기
Study/Study Alone

[나혼자공부] 6주차 복습-1

by 햄리뮤 2025. 1. 8.
반응형

오늘은 가수 솔리드노래를 들으며  SOLID개념에 대해서 공부하였다. 



오늘의 공부 내용

내 답변은 혼자 계속 다듬어 가면서 고치고 고치고 고치다가 정리된 답변입니다... 처음부터 절때 저렇게 정리하지 않았습니다...!

 

  1. SOLID 원칙에 대해 설명해주세요.
    1. SRP(Single Responsibility Principle) 단일 책임 원칙: 클래스는 하나의 책임만 가져야하며, 변경사유는 하나뿐이다.
    2. OCP(Open Closed Principle) 개방-폐쇄 원칙:자신의 확장에는 열려있고, 주변의 변화에는 닫혀있어야 한다.
    3. LSP(Liskov Substitution Principle) 리스코프 치환 원칙 : 자식 클래스는 부모클래스의 기능을 대체할 수 있어야 한다.
    4. ISP(Interface Segregation Principle) 인터페이스 분리 원칙: 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다.
    5. DIP(Dependency Inversion Principle) 의존 역전 원칙: 추상화 된 것은 구체적인 것에 의존하면 안되고 구체적인 것은 추상화 된것에 의존해야 한다.
  2. OCP를 적용했을 때의 장단점은 무엇인가요?
    • 장점: 기존 코드를 수정하지 않고 새로운 기능을 추가할 수 있고 요구사항 변화에 유연하게 대응할 수 있습니다. 추가로 기존 코드의 영향 없이 새로운 구현만 테스트하면 되므로 테스트 효율성이 높아집니다.
    • 단점: 확장성을 고려한 설계로 인해 코드 구조가 복잡해 질 수 있고 이로인해 불필요한 추상화와 복잡도가 생길 수 있습니다.
  3. OCP 원칙을 적용할 때 고려해야 할 디자인 패턴은 무엇인가?
    • 객체에 추가적인 행동이나 책임을 부여할때 사용하는 데코레이션 패턴이나 상위 클래스에서 구조를 정의하고, 하위 클래스에서 세부적인 구현을 결정하도록 하는 템플릿 패턴이 있습니다. 추가로 객체 상태 변경에 따라 다른 객체들이 자동으로 감지하는 옵저버 패턴도 있습니다.
  4. OCP 원칙을 위반했을 때 발생할 수 있는 문제는 무엇인가?
    • 기존 코드 수정으로 인한 버그나 종속된 코드가 많아져서 다른 프로젝트나 모듈에서 재사용이 어렵게 됩니다.
  5. SRP를 적용한 후 테스트 코드 작성이나 유지보수에 어떤 이점이 있는지 설명해주세요.
    • 테스트 관점으로는 클래스는 하나의 책임만 가지므로 작은 단위의 테스트가 가능합니다. 테스트 실패시 문제가 발생한 부분을 정확히 파악할 수 있습니다. 유지보수 관점으로는 하나의 책임만 처리하는 클래스는 변경시 다른 책임에 영향을 주지 않는 장점이 있습니다.
  6. SRP를 적용한 코드가 성능에 미치는 영향은 어떻게 평가할 수 있나요?
    • 성능에 직접적인 영향을 미치지는 않지만 지나친 책임 분리로 인해 클래스를 분리하면 I/O 작업이 늘어날꺼고 이로인해 성능 저하가 발생할 수 있습니다. 성능에 대한 영향 평가는 모니터링 도구를 활용해서 관리하면 됩니다.
  7. SRP를 준수하면서 클래스의 응집도를 높이는 방법은 무엇인가요?
    • 같은 책임 내에서 서로 연관된 데이터와 메서드를 한 클래스에 포함시켜 응집도를 높이거나 의존성 주입(DI) 을 사용해서 유연성을 유지할 수 있는 방법이 있습니다.
  8. 리스코프 치환 원칙을 적용하기 위한 코드 리팩토링 전략은 무엇인가요?
    • 상속보다는 인터페이스를 사용해서 하위 클래스가 독립적으로 동작할 수 있도록 설계합니다. 또는 상위클래스에 공통 기능만 포함하고, 특수화된 동작은 별도 클래스로 분리하는 전략이 있습니다.
  9. 리스코프 치환 원칙(LSP)이 객체의 자율성에 미치는 영향에 대해 설명해주세요.
    • 하위클래스의 동작이 상위클래스에 의해 제한되지 않아서 다양한 하위클래스의 자율성을 보장할 수 있습니다. 아무래도 LSP를 준수하는 설계는 상위클래스와 하위클래스 간의 의존성을 최소화 하기 때문에 객체간의 결합도를 줄입니다.
  10. 인터페이스 분리 원칙(ISP)과 DIP의 차이점과 각각의 적용 사례를 설명해주세요.
    • ISP는 인터페이스가 사용하지 않는 메소드를 분리시켜야한다는 것이 목적이고 DIP는 구체화는 추상화를 의존하도록 설계 해야한다는 목적입니다. 이런 개념을 바탕으로 ISP는 지나치게 큰 인터페이스에 대한 문제를 해결하기 위하여 나온 원칙이고 DIP는 계층간 결합도를 낮추고, 재사용성을 높이기 위하여 나온 원칙입니다.
  11. ISP를 적용하면서 겪었던 문제점은 무엇이었나요?
    • 메소드를 인터페이스 성격에 맞게 하기 위해서는 지나치게 많은 인터페이스이 생길 수 있어서 복잡성이 증가했었습니다. 그리고 과도하게 작은 인터페이스를 만들다보면 실제로는 사용하지 않았던 인터페이스도 있어서 재사용성이 낮은 문제점도 있었습니다.
  12. DIP를 적용할 때 생길 수 있는 문제점은 무엇이 있을까요?
    • DIP원칙을 적용하기 위해서는 구현체와 추상화가 있어야 하기때문에 설계의 복잡도가 올라갈 수 있습니다. 그리고 DIP는 보통 의존성 주입인 DI와 함께 사용되는데, 잘못된 의존성 주입으로 인해 테스트와 유지보수가 어려워 질수도 있다는 문제가 있습니다.
반응형

'Study > Study Alone' 카테고리의 다른 글

[나혼자공부] 6주차 복습-2  (0) 2025.01.09
[나혼자공부] 5주차 복습-2  (0) 2025.01.04
[나혼자공부] 5주차 복습-1  (2) 2025.01.03
[나혼자공부] 4주차 복습-2  (0) 2024.12.26
[나혼자공부] 4주차 복습-1  (2) 2024.12.25

댓글