[CS] 객체지향(OOP) VS 절차지향(PP)
대략적으로는 알고있는 내용이지만 정확한 개념을 정리하는 시간을 가져보고자 한다
간단하게 알아보기
절차식 방법
데이터와 기능(함수)으로 나누어서 기능의 목록을 절차적으로 수행한다
객체지향 방법
데이터(변수)와 기능(메서드)을 가진 독립적인 객체(클래스)를 만들고
그 객체들의 집합을 프로그램이라 한다
이 각각의 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 방법이다
객체지향 (OOP : Object-Oriented Language) 프로그래밍
컴퓨터 프로그래밍의 한가지 기법으로 객체를 만들고 객체를 사용하는 프로그래밍 방법
특징
객체지향언어의 특징은 크게 캡슐화, 상속, 다형성, 추상화 4가지로 나눌수 있다
캡슐화(Encapsulation)
하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메서드를 하나로 묶는것이다
캡슐화의 이유중 정보은닉이 있는데 데이터와 코드의 형태를 외부로부터 감추기 위해 한다
private으로 설정하고 getter/setter 메서드를 통해서만 접근할 수 있다
상속(Inheritance)
상위 클래스(부모)의 모든걸 하위 클래스(자식)가 모두 이어 받는것이다
즉 부모의 기능을 다 물려받아 사용할 수 있고 본인것도 사용할 수 있게된다
다형성(Polymorphism)
상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다
형태는 같은데 다른 기능을 하는것을 의미 하기도 한다
오버로딩이나 오버라이딩이 그 예시라고 볼 수 있다
오버로딩 : 메서드의 이름은 같고 매개변수의 개수나 타입이 다른 함수를 정의하는 것
오버라이딩 : 상속 받은 하위 클래스가 메서드의 내용만 변경(재정의) 하는것
추상화(Abstraction)
객체의 공통적인 속성과 기능을 추출하여 정의하는 것이다
실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서
필요없는 특성을 제거하는 과정을 가리킨다
객체지향 장점
재사용성
상속을 통해 프로그래밍시 코드의 재사용성을 높일 수 있다
생산성 향상
잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상할 수 있다
자연적인 모델링
우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아 들어 있기 때문에
생각하고 있는 것을 그대로 자연스럽게 구현이 가능하다
유지보수의 우수성
프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 다른 객체에 영향이 적기 때문에
유지보수가 쉽고 매우 경제적이라고 할 수 있다
객체지향 단점
느린 개발 속도
모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그래밍에 많은 시간이 소요된다
느린 실행 속도
객체 지향언어의 처리 속도는 절차지향언어보다 느리다
높은 난이도
객체지향언어는 대체로 난이도가 높다
언어
Java, Swift, Python 등등
절차지향 (PP : Procedural Programming) 프로그래밍
순차적인 처리를 중요시 되며, 프로그램 전체가 유기적으로 연결되도록 프로그래밍 기법
절차지향 장점
빠른 실행 속도
초기 프로그래밍 언어로 컴퓨터 처리구조와 비슷해 실행 속도가 쁘랃
절차지향 단점
유지보수의 어려움
모든 구성요소가 유기적으로 연결되어 있어서 한 부분이 고장나면 전체가 고장이 난다
엄격하게 순서가 정해져 있어 비효율적
실행 순서가 정해져 있기 때문에 코드의 순서가 바뀌면 결과가 달라질 가능성이 높다
과도한 전역변수의 사용
모든 함수에 개방되어 잇어 값을 잘못 설정하게 될 수 있다
프로그램 이해가 어려움
함수가 많아지면 어떻게 상호작용이 되는지 이해가 어렵다
언어
FORTRAN, COBOL, PASCAL, C, BASIC