티스토리 뷰

IT/OOP

객체지향 프로그래밍(OOP)

Stv 2025. 3. 11. 16:01

목차



    자격증 공부를 위해 객체지향 프로그래밍에 대해 단순 암기만 했었는데 이번 글을 통해 해당 패러다임이 왜 필요한지 그리고 특징은 무엇인지를 알아보면서 제대로 학습해보고자 한다.

    과거를 알면 현재를 알고 현재를 알면 미래를 알 수 있듯이 먼저, 객체지향 프로그래밍을 이해하기전에 객체지향 프로그래밍이 등장하기 이전의 패러다임을 이해할 필요가 있다.


     

    1. 순차적 프로그래밍

    • 정의한 기능의 흐름에 따라 순서대로 동작을 추가하며 프로그램을 완성하는 방식
    • 간단한 프로그램이라면 흐름이 눈으로 보이기 때문에 매우 직관적이지만 프로그램의 규모가 커지면 곤란하게 된다.(ex 스파게티 코드)

    2. 절차적 프로그래밍

    • '절차'는 함수를 의미한다. 따라서 반복되는 동작을 함수 및 프로시저 형태로 모듈화하는 방식
    • 반복 동작을 모듈화하여 코드르 많이 줄일 수 있다. but 프로시저라는 것 자체가 너무 추상적임
    • 논리적으로 묶여있을 수 없는 구조이기 때문에 동작이 추상적

    3. 객체지향 프로그래밍의 등장

    • 어떠한 개념에 대한 자료형과 함수를 '객체' 형태로 함께 묶어서 관리하기 위해 등장
    • 객체 내부에 자료형 필드와 함수가 함께 존재 (<-> 절차적 프로그래밍과 확연하게 다른 차이점)
    • 가능한 모든 물리적, 논리적 요소를 객체로 만드는 것
    • 객체 간의 독립성이 뚜렷하게 생기고, 중복되는 코드의양이 줄어즐고 유지보수가 용이해짐

    4. 객체지향 프로그래밍의 4가지 특징

    • 추상화(Abstraction)
      • 객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출해내는 작업
      • 추상적인 개념에 의존하여 설계해야 유연함을 갖출 수 있다. 
      • 세부적인 사물들의 공통적인 특징을 파악한 후, 하나의 묶음으로 만들어내는 것이 추상화
    • 캡슐화(Encapsulation)
      • 정보 은닉화를 통해 높은 응집도, 낮은 결합도를 유지할 수 있도록 설계하는 것
      • 객체 내부의 어떤 동작에 대한 구현이 어떻게 되어있는지 감추는 것 이를 통해 외부에서 객체를 손상시키는 일을 방지할 수 있음
      • 외부 객체는 객체 내부의 구조를 모르게 하고 해당 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있도록 의도하지 않은 동작 오류 방지 및 유지보슈 효울 향상
    • 상속(Inheritance)
      • 여러 개체들이 지닌 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립하는 과정
      • 자식 클래스를 외부로부터 은닉하는 캡슐화의 일종
      • 상위 클래스의 구현을 활용함으로써 코드 재상용이 용이해짐
      • '코드 재사용성'을 목적으로 하는 상속 행위는 지양하고 기능의 확장 관점에서 사용하는 것을 지향해야 함
      • IS-A -> 포함관계, HAS-A -> 구성 관계
    • 다형성(Polymorphism)
      • 서로 다른 클래스의 객체가 같은 동작 수행 명령열 받았을 때, 각자의 특성에 맞는 방식으로 동작하는 것
      • 간결한 코드, 유연함, 또한 구체적으로 어떤 클래스 객체가 참조되는 지 무관하게 프로그래밍이 가능
      • 상속 관계에 있다면, 새로운 자식 클래스가 추가되어도 부모 클래스의 함수를 참조해오면 되기 때문에 다른 클래스는 영향을 받지 않음