절차지향 프로그래밍 (Procedural Programming)
- 일이 진행되는 순서대로 프로그래밍하는 방법
- 장점
- 코드의 가독성이 좋음
- 컴퓨터의 처리구조와 비슷해 실행 속도가 빠름
- 단점
- 각각의 코드가 순서에 민감하게 연결 되어있어, 유지보수 및 분석이 어려움
객체지향 프로그래밍 (Object Oriented Programming)
- 모든 데이터를 객체 (Object)로 취급
- 객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능을 사용해 처리
- 서로 연관되어 있는 함수와 변수들을 객체라는 것을 그룹핑
- 객체에 들어있는 함수들을 호출해서 다른 함수들과 분리/구분해줌
- 특징
- 추상화 : 공통적인 속성이나 기능을 하나로 묶어 이름을 정의함
- 캡슐화 : 데이터를 은닉하고 데이터 기능을 노출시키지 않음 (보안 강화)
- 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려 받는 것
(만약 어떤 객체가 이미 존재하는 객체의 특성을 가지고 있다면, 기존 객체의 특성을 상속시켜 만들 수 있음) - 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것
- 오버로딩 : 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 가질 수 있지만 메서드의 인자는 다름
- 오버라이딩 : 상속 관계에 있는 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 같은 시그니쳐를 갖는 메서드로 다시 정의하는 것
- 장점
- 코드의 재사용이 가능 (확장과 유지보수에 용이)
- 분석과 설계의 전환이 쉬움
- 캡슐화로 정보를 은닉할 수 있어 보안성이 높음
- 단점
- 처리 속도가 상대적으로 느림
- 설계에 많은 시간이 소요
함수형 프로그래밍
- "순수 함수"를 사용해 상태를 제어하기보단, 빠르게 처리하는데 초점을 둔 방법
- 실행 순서를 지정할 필요가 없기 때문에 '비절차형 언어' 라고도 함
- 순수 함수란?
- 동일한 입력 값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부의 영향을 받지 않음
- 함수의 실행이 프로그램에 영향을 주지 않음
- 비상태 불변성 유지 (전달된 데이터를 변경하는 것이 아니라 새로운 버전, 새로운 오브젝트를 만들어 결과값으로 전달해야 함)
=> 여러가지 동시다발적인 멀티쓰레딩 환경에서도 안정적으로 동작 가능
- 장점
- 함수의 동작부가 간결해져 객체지향 프로그래밍에 비해 코드 이해도와 가독성이 좋아짐
- 테스트가 쉬움
- 단점
- 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없음
절차형 프로그래밍과 객체지향 프로그래밍의 차이
- 절차형 프로그래밍 위에서 객체지향형 프로래밍이 탄생한 것
- 절차형 프로그래밍이 갖고 있는 부족함을 객체지향형 프로그래밍이 보완해줌
- 절차형 프로그래밍과 객체지향형 프로그래밍 모두 함수가 있지만, '객체'라는 개념에서 차이가 있음
함수형 프로그래밍과 객체지향 프로그래밍의 차이
- 함수형 프로그래밍에서는 함수(function) 자체가 일급 객체가 되지만, 객체지향 프로그래밍에서는 클래스 (또는 객체)가 일급 객체가 된다
- 일급 객체?
- 다른 요소들과 차별이 없는 객체
- 즉, 함수의 인자로 넘겨질 수 있고, 변수에 대입도 가능한 객체를 말함
- 일급 객체의 명확한 정의
- 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있음
- 모든 일급 객체는 함수의 반환값이 될 수 있음
- 모든 일급 각체는 할당의 대상이 될 수 있음
- 모든 일급 객체는 비교 연산(==, equal)을 적용할 수 있음
- 일급 객체?
- 객체지향 프로그래밍에서는 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있지만, 함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있음
- 객체지향 프로그래밍
- 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어짐
- 즉, 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가짐
- 특히, 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라짐
- 함수형 프로그래밍
- 값의 연산 및 결과 도출 중심의 코드작성
- 함수는 인자로 받은 값을 별도로 저장하지 않고, 간결한 과정으로 처리하고 매핑하는데 목적을 둠
- 어느 하나가 우위에 있다고 말할 수 있다기보다는 필요에 따라 합쳐서 사용하기도 하고, 원하는 목표에 따라 적절한 것을 잘 골라 사용해야 함
- 객체지향 프로그래밍
728x90
'ssung_항해일지 > CS 지식 및 기술면접' 카테고리의 다른 글
RDB & NoSQL (0) | 2023.05.18 |
---|---|
오버로딩과 오버라이딩 (0) | 2023.05.18 |
Stack & Queue / Array & LinkedList (0) | 2023.05.16 |
Web Server 와 WAS (0) | 2023.05.16 |
TCP와 UDP (0) | 2023.05.15 |