작성
·
54
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
예
[질문 내용]
3:20에서 Order라는 클래스를 만들어주는데 클래스안에는 calculatePrice 클래스메서드를 만들어주는데, Order의 경우는 Interface로 만들지 않는 이유는 역할과 구현이 각각 무조건 하나이기때문에 만든걸까요? 아니면 다른이유가 있을까요? 예를들어 interface Order {
.... 클래스 변수 및 생성자
int calculatePrice()
}
뭐 이런식으로 역할 인터페이스를 만들고 클래스를 만들면서 구현체를 만들지않는 이유가 궁금합니다!
답변 2
1
안녕하세요. 김태언님, 공식 서포터즈 y2gcoder입니다.
항상 실무에서 개발할 때마다 되새기는 영한님의 말씀이 있습니다.
추상화도 비용이다
말인즉슨, 추상화를 하면 구조가 복잡해지고 이를 분석하거나 파악하는 데에는 비용이 들기 때문에 무조건적인 추상화가 오히려 좋지 않을 수도 있다는 말이었습니다.
Order와 calculatePrice 는 설계상 다형성이 필요한 상황이 아닙니다. 인터페이스를 만들기 위해서는 인터페이스를 만드는 시간, 인터페이스의 효용성(여기서는 간단하게 다형성을 활용해 다양한 구현체를 만드는 것만을 의미해보겠습니다.), 구조의 복잡성 등을 따져볼 수 있습니다.
앞서 얘기한 것들과 인터페이스를 만들었을 때의 이점을 서로 트레이드 오프로 비교해봤을 때, 현재 Order 는 인터페이스를 만드는 것에 대한 장점보다는 인터페이스를 만들었을 때의 비용이 더 크다고 판단할 수 있습니다. 그래서 인터페이스를 만들지 않았다고 생각해주시면 감사하겠습니다 🙂
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김태언님.
Order 클래스와 calculatePrice 메소드를 다루는 것과 관련하여 비슷한 질문을 가진 글을 추천해드립니다. 인터페이스를 정의하지 않고 클래스를 사용하는 이유에 대해서 설명된 내용입니다.
Order 클래스의 calculatePrice() 가 있는 이유?
또 다른 유사한 질문 및 답변도 함께 참고하시면 좋겠습니다:
Order의 calculatePrice()
간단한 설명을 드리자면, Order
클래스에 calculatePrice
메소드를 포함하는 이유는 비즈니스 로직을 도메인 객체 내에 모아 명확한 책임을 부여하기 위함입니다. 인터페이스로 분리하는 것은 큰 이점이 없고, 불필요한 복잡성을 증가시킬 수 있습니다. 비즈니스 로직이 특정 도메인에 속하는 경우는 해당 도메인 클래스에 이 로직을 위치시키는 것이 자연스럽습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
오 이해했습니다 감사합니다!
추상화도 비용이기에 굳이 필요하지 않은 추상화는 해석하는 비용이 드는군요