CS 면접대비 - 객체지향 프로그래밍

객체 지향 프로그래밍이 무엇인가요?
  • 개념의 추상화에 대응하는 데이터와 코드를 보유할 수 있는 “객체” 와 그 객체간의 상호작용을 통해 프로그램을 작성하는 방법론
객체지향 프로그래밍의 장점이 무엇인가요?
  • 코드 재사용이 용이 남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다. _ 전형적인 절차형 언어들도 함수를 가져오면 재사용할 수 있는것 아닌가요? _ 재사용을 위해서 상속을 사용하는건가요?

  • 유지보수가 쉬움 절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다.

  • 대형 프로젝트에 적합 클래스 단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트처럼 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담하기 쉽다.

  • 개인적으로는, 도메인을 객체라는 추상화로 보는것이 설계에 굉장히 유용하다고 생각함

클래스와 인스턴스의 차이는 무엇인가요?
  • 플라톤의 이데아와 유사하게 추상화를 거쳐 데이터와 코드로 정의한것

  • 인스턴스는 클래스를 바탕으로 실제 메모리에 할당된 객체를 의미

추상화란 무엇인가요?
  • 여러 클래스에서 사용하는 공통된 메소드, 혹은 요소들을 공통으로 묶어내서 규칙만 빼내는 행위?

  • 추상화란 어떤 양상, 세부사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다

  • 추상화가 꼭 클래스에만 적용되는가?

    • 꼭 추상 클래스나 인터페이스를 통해서만 추상화가 가능한가?
캡슐화란 무엇인가요?
  • 변경될 가능성이 높은 부분을 객체 내부로 숨기는 추상화의 한 종류
    • 왜? 변경될 가능성이 높은 부분을 숨긴다면 “수정의 전파”가 이루어지지않음
    • 메시지와 인터페이스 의존 원칙과도 연관됨
    • 불안정한 = 변경이 잦은 구현 세부사항을 안정적인 인터페이스 뒤로 캡슐화
  • 캡슐화를 저해하면 무엇이 안좋은가?
    • 애초에 캡슐화가 무엇인가?
      • 객체의 행위와 필요한 상태를 하나의 클래스에 응집시키는것, 외부에서 알 수 없게 하는 것
    • 지키지 않는다면 무엇이 나쁜가?
      • 내부 구현이 퍼블릭 인터페이스에 노출되게 된다
      • 내부 구현의 변경이 외부 클라이언트로 전파된다 - 확장에 적합하지 않은 설계
객체의 책임이란?
  • 객체의 존재이유 = 협력에 참여 ⇒ 협력에 필요한 행동을 제공해야 함
  • 객체는 상태가 아닌 행동을 통해 다른 객체와 협력

  • 객체의 상태를 먼저 결정하고 상태에 필요한 행동을 정하는것은 캡슐화를 저해한다
객체의 협력이란?
  • 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용
객체의 역할이란?
  • 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 역할이라고 부른다.
    • 책임의 추상화
  • 역할에게 책임을 할당하라
  • 사용하면 “유연하고 재사용 가능한 협력”을 얻을 수 있다 - 동일한 책임을 수행하는 객체를 추상화 하여 하나의 역할로 만든다

댓글남기기