잘못 된 내용에 대한 지적은 언제든 환영입니다.
객체 지향형 프로그래밍
- 프로그래밍 페러다임의 종류 중 하나로, 명령형 프로그래밍에 속한다.
- How(어떻게)에 초점을 두었다. 즉, 원하는 목적을 달성하기 위한 과정을 중요시하는 프로그래밍이라고 할 수 있다.
- 작동에 필요한 알고리즘을 제어문과 상태 변화로 표현한다.
- 객체를 정의하고 각각의 객체에 대한 역할을 부여하며, 객체끼리 서로 상호작용을 통해 로직을 이룬다.
객체 지향 프로그래밍의 네가지 특징
- 상속 : 부모의 상태와 메소드에 접근할 수 있다.
- 캡슐화 : 은닉화라고도 부르며, 객체의 상태나 메소드를 외부에서 접근할 수 없는 것을 의미한다.
- 추상화 : 실행 대상 객체의 공통적인 특징을 도출하는 것을 말한다.
👉 객체 지향 언어에서 클래스를 정의하는 것 자체를 추상화라고 할 수 있다. 예를 들어, 사자/토끼/고양이 인스턴스는 모두 숨쉬기/걷기/먹기 같은 동작을 하는 동물이라는 클래스로 묶을 수 있다.
- 다형성 : 약간 다른 동작을 하는 메소드를 동일한 이름으로 호출하는 것을 의미한다.
👉 부모로부터 상속받은 메소드를 덮어씌워서, 약간 다른 동작을 하는 메소드를 자식 클래스에 정의하더라도 해당 메소드명으로 호출하면 부모든 자식이든 해당 이름의 메소드가 호출된다.
객체 지향 프로그래밍의 장/단점
- 장점
- 프로그래밍 생산성 향상 : 이미 만들어진 객체를 상속을 받아 인스턴스를 만들어 낼 수 있기에 생산성이 향상된다.
- 보안 향상 : 캡슐화로 인한 상태 및 데이터 은닉으로 보안성이 향상된다.
- 단점
- 느린 속도 : 캡슐과의 격리 구조로 인해 절차지향에 비해 속도가 느리다.
함수형 프로그래밍
- 프로그래밍 패러다임의 종류 중 하나로, 선언형 프로그래밍에 속한다.
- What(무엇을)에 초점을 두었다. 즉, 원하는 목적에 대한 선언을 중요시하는 프로그래밍이라고 할 수 있다.
- 작동에 필요한 알고리즘은 코드만 보고는 알 수 없으며, 제어문의 사용과 상태 변화를 억제하여 부수 효과(side-effect)를 방지한다.
- 순수 함수(부수 효과가 없는 함수)와 보조 함수의 조합을 통해, 부수 효과를 피하는 방향으로 로직을 이룬다.
함수형 프로그래밍의 장/단점
- 코드 예측의 편리성 : 상태 변화가 없는 불변성을 지향하기 때문에, 코드 예측이 간편해진다.
- 간결한 코딩 : 간결한 구조의 프로그래밍에 유리하다.
- 높은 수준의 추상화 : 추상화를 객체들의 공통적인 특징을 도출하는 것이라고 정의할 수도 있으나, 복잡한 것을 단순화한다는 의미 또한 될 수 있다. 함수형 프로그래밍은 복잡한 알고리즘을 단순한 함수의 조합으로 표현한다.
References
"객체 지향" .incodom
"객체지향개발(OOP) 개념 정리" .shaking
"기존의 사고 방식을 깨부수는 함수형 사고" .Evan Moon