[기술면접] 객체 지향 프로그래밍

한재창·2023년 5월 23일
0
post-thumbnail

객체 지향 프로그래밍(Object Oriented Programming)

객체 지향 프로그래밍 이전의 프로그래밍은 컴퓨터가 사고하는대로 프로그래밍을 하는 컴퓨터 중심의 프로그래밍이었다. 하지만 객체 지향 프로그래밍의 개념이 생기고 난 후 인간 중심적 프로그래밍을 할 수 있게 되었다. 즉, 현실 세계를 프로그래밍으로 옮겨와 프로그래밍을 할 수 있게 되었다는 것을 의미한다. 현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것이다.

OOP로 코드를 작성하면 이미 작성한 코드에 대한 재사용성이 높다. 자주 사용되는 로직을 라이브러리로 만들어두면 계속해서 사용할 수 있으며 그 신뢰성을 확보할 수 있다. 또한 라이브러리를 각종 예외상황에 맞게 잘 만들어두면 개발자가 사소한 실수를 하더라도 에러를 컴파일 단계에서 잡아낼 수 있으므로 버그 발생이 줄어든다. 또한 내부적으로 어떻게 작동하는지 몰라도 개발자는 라이브러리가 제공하는 기능들을 사용할 수 있기 때문에 생산성이 높아지게 된다. 객체 단위로 코드가 나뉘어져 있어서 디버깅이 쉽고 유지보수에 용이하다.

객체 간의 정보 교환이 모두 메시지 교환을 통해 일어나므로 실행 시스템에 많은 오버헤드가 발생하게 된다. 하지만 이것은 하드웨어의 발전으로 많은 부분 보완되었다.

💡 오버헤드(overhead) : 추가적으로 시간, 메모리, 자원이 사용되는 현상

절차 지향

절차 지향 모델링은 프로그램을 기능중심으로 바라보는 방식으로 무엇을 어떤 절차로 할 것인지가 핵심이 된다. 즉, 어떤 기능을 어떤 순서로 처리하는가에 초점을 맞춘다.

객체 지향

객체 지향 모델링은 기능이 아닌 객체가 중심이 되며 누가 어떤 일을 할 것인지가 핵심이 된다. 즉, 객체를 도출하고 각각의 역할을 정의해 나가는 것에 초점을 맞춘다.

절차 지향 VS 객체 지향

대형 프로그래밍의 경우 많은 기능을 수반하기 때문에 객체 지향이 적합하다. 각 객체가 하는 역할이 많아도 많은 역할을 객체로 묶을 수 있기 때문이다.

소형 프로그래밍의 경우 작은 기능을 수반하기 때문에 절차 지향이 적합하다. 작은 기능을 객체별로 나눌 경우 오히려 복잡해질 수 있기 때문이다.

객체 지향 프로그래밍 특징

  1. 추상화
    객체들의 공통적인 기능과 속성을 도출한다.
    객체 지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있다.

  2. 캡슐화
    실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다.
    객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리한다.
    코드가 묶여있어서 오류가 없어 편리하다.
    데이터를 보이지 않고 외부와 상호작용을 할 때는 메소드를 이용하여 통신을 한다. 보통 라이브러리로 만들어서 업그레이드해 사용할 수 있다.

  3. 상속성
    하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는 것
    이미 작성된 클래스를 받아서 새로운 클래스를 생성하는 것
    기존 코드를 재활용해서 사용함으로써 객체 지향 방법의 중요한 기능 중 하나이다.

  4. 다형성
    약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것
    동일한 명령의 해석을 연결된 객체에 의존하는 것
    오버라이딩 - 부모클래스의 메소드와 같은 이름을 사용하며 매개변수도 같되 내부 소스를 재정의하는 것
    오버로딩 - 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것

  5. 동적바인딩
    가상 함수를 호출하는 코드를 컴파일할 때, 바인딩을 실행시간에 결정하는 것
    파생 클래스의 객체에 대해, 기본 클래스의 포인터로 가상 함수가 호출될 때 일어난다.
    함수를 호출하면 동적 바인딩을 통해 파생 클래스에 오버라이딩 된 함수가 실행
    프로그래밍의 유연성을 높여주며 파생 클래스에서 재정의한 함수의 호출을 보장

profile
취준 개발자

0개의 댓글