책너두 (코딩 인터뷰 완전분석) 22일차 (~188p, 7.1, 7.2)

메모

7. 객체 지향 설계

  • 디자인 패턴들을 쏟아내도록 요구하는 것이 아님.
  • 우아하고, 유지보수가 가능한 객체 지향적 코드를 만드는 방법을 이해하고 있는지 살펴보기 위한 것임.
  • 이 문제들에서 낮은 성적을 받으면, 합격 전선에 빨간불이 켜질 수 있음.

접근법

  • 객체 지향 설계에 관한 질문들은 거의 비슷한 방식으로 공략 가능함.

단계 #1: 모호성의 해소

  • 면접관들은 여러분이 스스로 가정을 만들어내고 질문을 통해 명확히 해나가는 과정을 살펴보고 싶어하기 때문에 대부분의 문제들이 고의적으로 모호성을 띔.
  • 객체 지향 설계에 관한 질문을 받으면 누가 그것을 사용할 것이며, 어떻게 사용할 것인지에 대한 질문을 던져야 함.
    • 질문에 따라 육하원칙에 따른 질문을 던져야할 수도 있음.
    • 상황에 따라 설계 자체가 완전히 뒤바뀌기 때문임.

단계 #2: 핵심 객체의 설계

  • 시스템에 넣을 ‘핵심 객체’ (core object)가 무엇인지 생각해야 함.

단계 #3: 관계 분석

  • 핵심 객체를 결정했다면, 이 객체 사이의 관계를 분석해야 함.
    • 어떤 객체가 어떤 객체에 속해있는지?
    • 다른 객체로부터 상속 받아야 하는 객체가 있는지?
    • 객체간 관계까 다대다인지, 일대다인지?
  • 종종 잘못된 가정을 만들어서 사용하는 경우가 있음.
    • 여러분의 설계가 얼마나 일반적이어야 하는지에 관해서 면접관과 상의 후 결정하는 것이 좋음.

단계 #4: 행동 분석

  • 여기까지 오면 객체 지향 설계의 골격이 어느 정도 잡힌 상태일 것임.
    • 객체가 수행해야 하는 핵심 행동(core action)들에 대해서 생각하고, 이들이 어떻게 상호작용해야 하는지 따져봐야 함.
    • 이 과정에서 깜박 잊은 객체가 있을 수도 있고, 상황에 따라 설계를 변경해야 할 수도 있음.

디자인 패턴

  • 면접관은 여러분의 지식이 아닌, 능력을 평가할 것이므로, 디자인 패턴은 보통 면접 범위 외로 침.
    • 하지만, 싱글톤(singleton)이나 팩터리 메서드(factory method)와 같은 디자인 패턴을 알아 두면 면접 볼 때 특히 유용하므로 여기서 다룸.

싱글톤 클래스(singleton class)

public class Restaurant {
    private static Restaurant _instance = null;
    protected Restaurant() { ... }
    public static Restaurant getInstance() {
        if (_instance == null) {
            _instance = new Restaurant();
        }
        return _instance;
    }
}
  • 어떤 클래스가 오직 하나의 객체만을 갖도록 함.
    • 프로그램의 전반에 걸쳐 그 객체 하나만 사용되도록 보장해야 함.
  • 많은 사람들이 싱글톤 디자인 패턴을 좋아하지 않고, 심지어 ‘안티 패턴’ 이라고 부르기도 함.
    • 그 이유는 싱글톤이 단위 테스트에 방해되는 요인이기 때문

팩터리 메서드(factory method)

  • 어떤 클래스의 객체를 생성하기 위해 인터페이스를 제공함.
    • 하위 클래스에서는 어떤 클래스를 생성할지 결정할 수 있도록 도와줌.
public class CardGame {
    public static CardGame createCardGame(GameType type) {
        if (type == GameType.Poker) {
            return new PokerGame();
        } else if (type == GameType.BlackJack) {
            return new BlackJackGame();
        }
        return null;
    }
}

면접 문제

7.1 카드 한 벌

  • 카드 게임에서 쓰이는 카드 한 벌을 나타내는 자료구조를 설계하라. 그리고 블랙잭 게임을 구현하려면 이 자료구조의 하위 클래스를 어떻게 만들어야 하는지 설명하라.

7.2 콜 센터

  • 고객 응대 담당자, 관리자, 감독관 이렇게 세 부류의 직원들로 구성된 콜 센터가 있다고 하자. 콜 센터로 오는 전화는 먼저 상담이 가능한 고객 응대 담당자로 연결돼야 한다. 고객 응대 담당자가 처리할 수 없는 전화는 관리자로 연결되고, 관리자가 처리할 수 없는 전화는 다시 감독관에게 연결된다. 이 문제를 풀기 위한 자료구조를 설계하라. 응대 가능한 첫 번쨰 직원에게 전화를 연결시키는 dispatchCall() 메서드를 구현하라.

댓글

Designed by JB FACTORY