객체지향 프로그래밍
- 현실세계에서 어떠한 제품을 만들기 위해 부품들을 하나씩 조립해서 완성시키는 것처럼 소프트웨어 또한 필요한 부품들을 만들고 하나씩 조립해서 하나의 완성된 프로그램을 만드는 기법
객체지향 프로그래밍의 특징
- 캡슐화
- 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것
- 외부 객체에서는 캡슐화된 객체의 내부 구조를 알 수 없기 때문에 노출시켜 준 필드 혹은 메서드를 통해 접근 가능
- 필드와 메서드를 캡슐화하여 숨기는 이유는 외부 객체에 사 해당 필드와 메서드를 잘못 사용하여 객체가 변화하지 않게 함
- Java에서 캡슐화된 객체의 필드와 메서드를 노출 시킬지 감출 지 결정하기 위해 접근 제어자를 사용
- 상속
- 부모 객체는 가지고 있는 필드와 메서드를 자식 객체에 물려주어 자식 객체가 이를 사용할 수 있도록 함
- 상속을 하는 이유 :
- 각각의 객체들을 상속 관계로 묶음으로써 객체 간의 구조를 파악하기 쉽게 함
- 필드와 메서드를 변경하는 경우 부모 객체에 있는 것만 수정하게 되면 자식 객체 전부 반영이 되기 때문에 일관성을 유지하기 좋음
- 자식 객체가 부모 객체의 필드와 메서드를 물려받아 사용할 수 있기 때문에 코드의 중복이 줄어들고 재사용성이 증가함
- 다형성
- 객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 가지고 있는 고유한 특성에 따라 다른 여러 가지 형태로 재구성되는 것을 의미
ex) 자동차 객체를 만들 때 A자동차 객체와 B자동차 객체의 경적 소리가 다르다면 경적 메서드의 구현을 다르게 재정의 하여 사용할 수 있음.
- 객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 가지고 있는 고유한 특성에 따라 다른 여러 가지 형태로 재구성되는 것을 의미
- 추상화
- 객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는 것
ex) 현실세계의 여러 종류의 자동차들이 공통적으로 가지고 있는 가속, 브레이크, 속도와 같은 것들을 모아 자동차라는 객체를 모델링할 수 있다.
- 객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는 것
클래스
- 클래스는 객체를 생성하기 위한 설계도
클래스를 만들기 위한 4가지 단계
- 만들려고 하는 설계도 선언(클래스 선언)
- 객체가 가지고 있어야 할 속성(필드) 정의
- 객체를 생성하는 방식을 정의(생성자)
- 객체가 가지고 있어야 할 행위(메서드) 정의
- 클래스 선언
public class Car(){}
- 클래스의 필드 정의
String company;
double price;
char gear;
- 클래스의 생성자 정의
- 생성자는 반환 타입이 없고 이름은 클래스의 이름과 동일
- 괄호() 안에 아무것도 없는 생성자를 기본 생성자라 함
public Car(){}
- 클래스의 메서드 정의
double gadPedal(double kmh){
speed = kmh;
return speed;
}
- 메서드 오버로딩
- 오버로딩은 함수가 하나의 기능만을 구현하는 것이 아닌 하나의 이름으로 여러 기능을 구현하도록 함
즉, 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도, 매개변수의 개수 또는 타입, 순서가 다르면 동일한 이름을 사용해서 메서드를 정의할 수 있음 - 오버로딩의 조건
- 메서드의 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야 한다.
- 접근 제어자만 다른 것도 오버로딩을 할 수 없다.
- 결국, 오버로딩은 매개변수의 차이로만 구현할 수 있다.
- 오버로딩은 함수가 하나의 기능만을 구현하는 것이 아닌 하나의 이름으로 여러 기능을 구현하도록 함
- 접근 제어자 : 멤버 또는 클래스에 사용, 외부에서 접근하지 못하도록 제한
- public : 접근 제한이 전혀 없음
- protected : 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능
- default : 같은 패키지 내에서만 접근이 가능
- private: 같은 클래스 내에서만 접근이 가능
'개발 공부 > Java' 카테고리의 다른 글
Java 문법 정리 8. 다형성 (1) | 2023.10.19 |
---|---|
Java 문법 정리 7. 상속 (1) | 2023.10.19 |
Java 문법 정리 **length vs length() vs size() - 길이 값 불러오기 (0) | 2023.10.13 |
Java 문법 정리 5. 컬렉션(List, Stack, Queue, Set, Map) (0) | 2023.10.13 |
Java 문법 정리 4. 배열 (0) | 2023.10.13 |