절차 지향 언어 vs 객체 지향 언어

Weed·2024년 2월 16일
0

C언어

목록 보기
1/1

출처: https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95

C언어

절차지향언어

  • 개체를 순차적으로 처리하여 프로그램 전체가 유기적으로 연결
  • 자동차 제조를 예제로 들자면, 자동차는 엔진 -> 차체 -> 핸들 -> 바퀴 순으로 차례대로 만들어져야 한다. 이는 서로 분리되어서도 안되며 순서가 틀려서도 안된다.
  • 컴퓨터 처리구조와 유사. 즉 실행 속도가 빠르다.
  • 유지보수가 어려움: 하나가 고장났을 때 시스템 전체가 고장. 문제 해결 위해 시스템 전체를 수리. 디버깅이 어려움
  • 비효율적: 코드 순서가 바뀌면 결과가 달라질 가능성 높음. 언어의 융통성이 부족하여 생산 효율 떨어짐

객체 지향 언어 (자바를 예시)

  • 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍. 수 많은 부품들의 결합과 연결로 자동차가 만들어지는 것과 같다. 즉, 객체(부품)을 먼저 만들고 이 객체들을 조립해서 하나의 완성된 프로그램을 만드는 방법

장점

  • 프로그램을 유연하고 변경이 용이하게 제작. 컴퓨터 특정 부품만 갈아 끼우듯이. 다른 부품은 안건들고
  • 프로그램의 각각의 부품들이 독립적인 역할을 가지므로 코드의 변경을 최소화 하고 유지보수 하는데 유리
  • 코드의 재사용 통해 반복적인 코드를 최소화하고, 간결하게 표현 가능
  • 인간 친화적이고 직관적인 코드

4가지 특징

추상화

  • 객체의 공통적인 속성과 기능을 추출하여 정의
  • 자동차와 오토바이는 이동수단이며 전진 및 후진을 할 수 있다는 공통점을 지님.
  • (자바 문법) 자동차, 오토바이라는 하위 클래스(sub-class)들의 공통적인 기능 (전진,후진)을 추출하여 이동 수단이라는 상위 클래스에 정의

    자바에서의 인터 페이스로 예시를 들어본다. (추상 클래스로도 추상화 구현 가능). 객체 지향적 설계에서 인터페이스는 객체의 역할만을 정의하여 객체들 간의 관계를 유연하게 연결하는 역할. 즉, 인터페이스는 추상 메서드나 상수를 통해 어떤 객체가 수행해야 하는 핵심적인 역할만을 규정하고, 실제 구현은 해당 인터페이스를 구현하는 각각의 객체들에서 진행

    자동차,오토바이의 공통 기능을 추출하여 이동수단이라는 인터페이스에 정의.


    Car, MotoBike라는 클래스에서 앞서 인터페이스에 정의한 역할을 각각의 클래스의 맥락에 맞게 구현. 두 클래스 모두 전진과 후진 기능을 갖지만, 자동차는 자동차의 시동을, 오토바이는 오토바이의 시동을 걸어야 하므로 구현은 각 클래스에 따라 달라져야 한다.
    이를 객체 지향 프로그래밍에서는 역할과 구현의 분리라 함

상속

  • 기존의 클래스를 재활용하여 새로운 클래스를 작성
  • 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용.
  • 클래스들 간 공유하는 속성, 기능들을 한번만 정의하여 재사용한다. 이는 반복적인 코드를 최소화

    이는 즉, 아래 사진처럼 표현 하면





    Car, MotorBike클래스 공통 속성과 기능들을 추출(추상화)하여 Vehicle클래스(상위 클래스)에 정의, extends 키워드를 통해 각각 하위 클래스로 확장하여 반복 코드를 제거. MotorBike처럼 메서드 오버라이딩 통해 내용 재정의 가능.

다형성

  • 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질
  • 즉, 어떤 객체의 속성, 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성. 메서드 오버라이딩과 메서드 오버로딩이 있다.



    오버라이딩을 통해 moveForward(), moveBackward()를 각각의 클래스의 맥락에 맞게 재정의.

Point!

객체 지향 프로그래밍에서 다형성이란 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미. 좀 더 구체적으로, 상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있도록 함.
상위 클래스 타입의 참조 변수로 관계있는 하위 클래스들을 참조


또한,






인터페이스 적용 전과 적용 후를 비교하면 Driver클래스의 코드가 간결. 이를 도식화 하면

Driver클래스는 각각의 클래스 내부 변경이나 다른 객체가 새롭게 교체되는 것을 신경 쓰지 않아도 인터페이스에만 의존하여 수정이 있을 때마다 코드 변경 필요 없다.

캡슐화

  • 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호
  • 데이터 보호: 외부로부터 클래스에 정의된 속성과 기능들을 보호
  • 데이터 은닉: 내부의 동작을 감추고 외부에는 필요한 부분만 노출
  • 자바에는 public, default, protected, private 총 4가지 접근 제어자가 있다.
profile
개발자로 전직해보자

0개의 댓글