: Object - Oriented Programming
출처
구조적 프로그래밍 방식의 개선된 형태이며, 큰 문제를 작게 쪼개는 것이 아닌, 작은 문제들을 해결하는 객체를 만들어 조합해 큰 문제를 해결해 나가는 Bottom - up 방식이다.
- 코드의 재사용성 증가
- 유지보수가 용이하다.
- 코드의 가독성이 좋아진다.
- 처리 시간이 비교적 오래 걸린다.
- 프로그램을 설계할 때, 비용이 든다.
1) Abstraction (추상화)
- 공통적인 속성 및 기능을 묶어서 이름을 지정하는 것
- 클래스를 정의하는 것
2) Encapsulation (캡슐화)
- 필드와 메소드를 하나의 캡슐로 묶는 것
- 외부에 데이터를 드러내지 않음
- 직접 접근이 불가하고 메소드를 통한 접근 가능
- 정보은닉으로 데이터 보호 가능
- 유지보수가 쉬움
3) Inheritance (상속)
- 상위의 특징을 하위가 물려받음
- 코드의 중복을 줄이고 생산성이 향상됨
4) Polymorphism (다형성)
- 부모에서 받은 가상 함수를 자식에서 overriding, - overloading 하여 사용되는 것
- 동작은 같지만 결과가 다름
:Functional Programming (함수형 프로그래밍)
개발하는 소프트웨어의 크기가 커짐에 따라 유지보수가 어려워짐 이를 해결하기 위한 함수형 프로그래밍이다.
- 가독성을 높이고 유지보수를 용이하게 함
- 작은 문제를 해결하기 위한 함수 작성
- 대입문이 없기 때문에 메모리에 한 번 할당된 값은 새로운 값으로 변할 수 없음
1) Side Effect (부수 효과)
- 변수 값 변경
- 자료구조를 제자리에서 수정
- 객체의 필드값 설정
- 예외, 오류 발생으로 실행 중단
- 콘솔, 파일 입출력 발생
2) Pure Function (순수 함수)
- 부수 효과들을 제거한 함수
- 메모리, 입출력 관점에서 부수 효과가 없는 함수
- 함수의 실행이 외부에 영향을 끼치지 않는 함수
- 함수 자체가 독립적이고 부수 효과가 없기 때문에 스레드에 안전성을 보장 받음
- 스레드에 안정성을 보장 받아서 병렬 처리를 동기화 없이 진행 가능
3) 1급 객체
- 변수나 데이터 구조 안에 담을 수 있음
- 매개변수로 전달할 수 있음
- 반환값으로 사용 가능
- 할당에 사용된 이름과 무관하게 고유한 구별이 가능
- 함수형 프로그래밍에서 함수를 1급 객체로 취급
4) Referential Transparency (참조 투명성)
- 동일한 인자에 대해 항상 동일한 결과 반환 y = f(x)
- 기존 값은 변경되지 않고 유지됨 (Immutable Date, 불변 데이터)