[CS] 절차지향(PP) / 객체지향(OOP)

Onam Kwon·2022년 8월 2일
0

CS

목록 보기
7/22
post-custom-banner

Procedural Programming(PP) / 절차지향

  • 물이 위에서 아래로 흐르는 것처럼, 순차적인 처리를 우선으로 하는 프로그래밍을 말하며 대표적인 언어로는 C언어가 있다.
  • 컴퓨터 관점에서의 프로그래밍 패러다임.
  • 프로그램을 유기적으로 연결하여 만든다.
    • 이는 컴퓨터의 처리 구조와 비슷하기 때문에 실행속도가 빠른 장점이 있다.

장점

  • 절차지향 언어의 구조는 컴퓨터의 처리 구조와 비슷하며 따라서 실행속도가 빠른 장점이 있다.
  • 코드의 가독성이 좋다.

단점

  • 프로그램이 유기적으로 연결되어 있어서 유지보수가 어렵다.
    • 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 기대하기 힘들다.

Object Oriented Programming(OOP) / 객체지향

  • 모든 데이터를 객체(object)로 취급하여 특정 개체가 처리 요청을 받았을 때, 객체 내부의 기능을 사용해 처리하는 방법. 프로그래밍의 객체화, 부품화. 대표적인 언어로 C++, Java등이 있다.
  • 인간이 구분할수 있는 요소를 객체로 표현한 인간 중심적 프로그래밍 패러다임.
  • 객체는 기억장소와 이 기억장소의 값을 변경할 수 있는 연산의 집합이 정의되면 객체를 선언할 수 있다.
  • 많은 객체 지향 언어에서 객체는 클래스로 그룹화 된다.
    • 생성된 클래스로 객체의 특정 예를 생성하는데 이를 인스턴스라고 부른다.

OOP 4가지 특징

  • 추상화: 공통된 특성을 파악하고 불필요한 특성은 제거한다.
    • 클래스의 속성과 메소드를 정의하는것.
    • 추상화는 객체의 속성과 행동을 일반화하여 추상적인 개념으로 표현하는 것이고, 캡슐화는 객체의 내부 구조와 동작 방식을 숨겨 외부에 노출시키지 않는 것이라는 차이점이 있습니다.
  • 캡슐화: 객체는 상태와 동작을 가지며 객체 스스로 상태를 책임지도록 하며, 또한 외부에서 데이터와 코드의 형태를 알 수 없게 한다(은닉화).
    • 데이터의 구조와 역할, 기능을 하나의 캡슐 형태에서 스스로 책임지도록 함.
    • 은닉화로 인해 보안성 증가. 외부로의 노출을 최소화하여 모듈 내의 응집도를 높이며 모듈 간의 결합도를 내림.
      • 이로인해 다른 사람의 클래스를 뜯어 볼 필요 없이 사용 가능.
  • 상속성: 상위 객체를 상속 받을 수 있도록 한다.
    • 부모 클래스에 정의된 변수 및 메소드를 자식 클래스에서 상속받아 사용함.
  • 다형성: 동일한 요청에 다른 방식으로 처리할 수 있도록 한다.
    • Overloading(오버로딩): 하나의 클래스 안에서 같은 이름의 메소드를 매개변수의 타입이나 개수에 따라 다르게 여러개로 정의하는것.
    • Overriding(오버라이딩): 부모 클래스로부터 상속 받은 메소드 내용을 변경하여 사용하는것.

SOLID (객체지향 5대 원칙)

  • SRP (Single Responsibility Principle/단일 책임 원칙): 하나의 클래스는 하나의 책임만 가져야 합니다.
    • 클래스는 변경의 이유가 단 하나여야 하며, 한 가지 책임에만 집중해야 합니다. 이를 통해 클래스의 재사용성과 유지보수성이 향상됩니다.
  • OCP (Open&Closed Principle/개방-폐쇄 원칙): 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
    • 새로운 기능이 추가되더라도 기존 코드는 수정되지 않아야 합니다. 이를 위해 추상화와 다형성을 활용하고, 인터페이스를 이용하여 개체 간의 의존성을 낮춥니다.
  • LSP (Liskov’s Substitution Principle/리스코프 치환 원칙): 객체는 정확성을 유지하면서 하위 타입의 객체로 바꿀 수 있어야 한다.
    • 상속 관계에서 하위 클래스는 최소한 상위 클래스의 기능을 수행할 수 있어야 합니다. 이를 통해 다형성을 지원하고, 상속 계층 구조를 안정적으로 유지할 수 있습니다.
  • ISP (Interface Segregation Principle/인터페이스 분리 원칙): 클라이언트는 자신이 사용하지 않는 인터페이스에 의존해서는 안 됩니다. 즉, 하나의 클라이언트는 자신이 필요로 하는 인터페이스에만 의존해야 합니다. 인터페이스를 작은 단위로 분리하여 클라이언트에게 필요한 기능만 제공함으로써 결합도를 낮추고 의존성을 관리합니다.
  • DIP (Dependency Inversion Principle/의존관계 역전 원칙): 추상적인 것은 자신보다 구체적인 것에 의존하지 않고, 변화하기 쉬운 것에 의존해서는 안된다는 원칙. 구체적으로는 구현 클래스에 의존하지 말고, 인터페이스에 의존해야 하는 원칙이다.
    • 의존 관계를 형성할 때, 자주 변하는 것보다, 변화가 적은 것에 의존하라는것. 이를 통해 모듈 간의 결합도를 낮추고 유연한 구조를 유지할 수 있습니다.

장점

  • 코드의 재활용성이 높음.
  • 분석과 설계변경의 자유로움.

단점

  • 절차지향보다 느린 실행속도.
  • 설계시 많은 시간 소모.

마무리

  • 절차지향의 반대는 객체지향이 아니며 마찬가지로 객체지향의 반대는 절차지향이 아니다.
  • 절차지향은 데이터 중심으로 코드를 작성하고 실행순서, 절차가 더 중점이 되며, 객체지향은 기능을 중심으로 코드를 작성하며 객체의 종류와 속성 등이 더 중점이 된다.
  • 절차지향 언어가 객체지향적으로 프로그래밍 가능하며, 객체지향 언어가 절차지향적으로 프로그래밍도 가능하다.
profile
권오남 / Onam Kwon
post-custom-banner

0개의 댓글