객체지향이란 ?
- 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체들
- 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
클래스 : 객체를 정의한 설계도 (붕어빵 틀)
클래스의 요소 : 필드(클래스의 속성,클래스에 포함된 변수),메서드(클래스의 기능),생성자(객체 생성),이너 클래스
- 필드 : 변수(전역변수(클래스 변수(static),인스턴스(no static) 변수),지역 변수(메서드 내에 포함된 변수))
- 객체 : 모든 실재하는 어떤 대상
- 인스턴스 : 클래스에서 실행된 객체(붕어빵)
객체지향 4가지 특징
- 캡슐화
데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할,기능
을 하나의 캡슐 형태로 만드는 방법(접근 제어자 활용/메서드를 통한 멤버 변수 활용)
- 추상화
클래스들의 공통적인 특성(변수,메소드)들을 묶어 표현
- 상속화
부모 클래스에 정의된 변수 및 메서드를 자식 클래스에서 상속받아 사용하는 것
- 다형화
메세지에 의해 객체가 연산을 수행하게 될 때, 하나의 메세지에 대해 각 객체가
가지고 있는 고유한 방법으로 응답할 수 있는 능력
(오버로딩-하나의 클래스 안에서 같은 이름의 메서드를 여러개 정의->새로운 메소드 추가
/오버라이딩-부모 클래스로 부터 상속받은 메서드 내용을 변경하여 사용하는 것->재정의 함수형 인터페이스,메소드이름 매개변수,타입,리턴타입 동일)
OOP의 5가지 원칙(solid)
- 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야 한다.
- 개방 폐쇄 원칙 : 확장에는 열려있으나,변경에는 닫혀 있어야한다.
- 리스코프 치환 원칙 : (부모 클래스 자리에 자식 클래스를 넣어도 제대로 작동해야함 -> 자식클래스는 부모클래스의 확장)
- 인터페이스 분리 원칙 : 한 클래스는 자신이 사용하지 않는 인터페이스 구현 X
- 의존관계 역전 원칙 : 추상화에 의존하고 구체화에 의존하면 안된다.
-> 구체적인 클래스보다 추상 클래스나 인터페이스와 관계를 맺어야함
객체지향 vs 절차지향 vs 함수형 프로그래밍
- 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용으로 진행하는 방식
- 절차지향 프로그래밍 : 수행되어야 할 기능을 순차적인 처리 과정으로 진행하는 방식
- 함수형 프로그래밍 : 순수 함수를 조합하여 소프트웨어를 만드는 방식(비절차형 언어)