/ INTERVIEW

기술 면접 예상 질문(객체지향의 정의와 특징)

객체지향의 정의

객체가 중심이 되며, 누가 어떤 일을 할 것인지가 핵심이다.(절차지향: 기능 중심으로 무엇을 어떤 ‘절차’로 할 것인지가 포인트) 필요한 객체들을 파악하고, 객체들의 역할을 정의하고 객체들간의 상호작용으로 프로그램을 구현하는 것을 의미한다. (객체는 실제하는 모든 것을 객체라고 할 수 있고, 그렇게 때문에 객체간의 상호작용들을 실제 각 사물들의 상호작용을 이해하는 것을 생각하면 쉬울 것 같다.)

객체지향의 특징

  1. 추상화
    • 객체들의 공통적인 기능이나 속성(특징)을 도출하는 것을 의미하고 자바에서는 클래스를 정의하는 것이 추상화라 할 수 있다.
    • 반복되는 부분을 계속 정의하는 것이 아닌 공통적인 속성을 뽑아내어 추상시켜 필요할 때마다 객체로 만들어 사용하는 것을 의미한다고 생각한다.
  2. 캡슐화
    • 실제로 구현되는 부분은 외부에 드러나지 않도록 정보를 은닉하는 것을 의미한다.
    • 객체가 독립적으로 역할을 수행할 수 있도록 데이터와 기능을 하나로 묶는 것을 의미한다.
    • 코드가 묶여 있기 때문에 오류가 없어 편리하다.(외부의 객체가 특정 객체의 데이터에 직접 접근하거나 변경할 수 없기 때문)
    • 데이터를 보지 않고 외부와 상호작용할 떄 메소드를 사용하여 통신한다.(보통 Library로 만들어 업그레이드하여 사용이 가능하다.)
  3. 상속성
    • 하나의 클래스가 가진 특징을 다른 클래스가 그대로 물려받는 것을 의미한다.
    • 이미 작성된 클래스를 받아 새로운 클래스로 생성하는 것을 의미한다.
    • 기존코드를 재사용할 수 있다.
      4.다형성
    • 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출 -> 연결된 객체에 의존
    • 오버라이딩: 부모클래스의 메소드와 이름과 매개변수는 같지만 내부 소스코드가 재정의 된 것을 의미한다.
    • 오버로딩: 같은 이름의 함수를 여러개 정의하고, 매개변수를 다르게 설정하여 같은 이름의 메소드를 경우에 따라 호출하는 것을 의미한다.

객체 지향의 장점

  1. 생산성이 향상된다 -> 재사용을 지향하기 때문(다형성, 객체, 캡슐화)으로, 소프트웨어를 자성할 때의 부담을 줄인다.(코드의 재사용, 추상화 시켜놓은 것들이기 때문)
  2. 현실 세계의 것들을 객체로 만들었기 때문에 우리가 생각하는 것 현실에서 일어나는 것들을 프로그래밍화하기 쉽다.
  3. 유지보수(프로그램 수정, 추가 등)이 뛰어나다. -> 캡슐화로 내부의 내용이 바뀌더라도 사용법이 달라지지 않고, 데이터가 변경되도 다른 객체에 영향을 주지 않기 때문에 독립성이 유지된다. 연결되어 프로그램에 변경에도 외부에서 변경이 안되기 때문에, 오류의 파급이 적다.


최근 면접에서 당연히 알고 있는 것이라 생각했던 것이 막상 머리속에 추상적으로는 떠오르는데 단어선택이 안되고 포기해버리게 되는 자신을 발견하고 면접관님한테 너무 죄송했고, 너무 답답하였다.(내가 당사자였다면 진짜 무례하다고 생각했을 것 같다.)