객체 지향 프로그래밍이란?
객체를 만들어 놓고, 그것들을 조합해 하나의 프로그램을 만드는 것
클래스(설계도)에서 객체가 나온다(탄생한다)
설계도가 있으니, 거기서 객체를 하나씩 탄생시켜서 사용하면 된다.
객체 모델링
현실 세계의 객체를 소프트웨어 객체로 만들어 주는 것
객체들 간의 상호 작용은 남의 객체의 메소드를 호출해서 사용하는 방법이다.
소프트웨어에서 객체를 만들 때
클래스(설계도)에 필드, 생성자, 메소드를 만들어야 하고, 클래스로 찍어낸 결과들이 인스턴스들이 된다.
프로그램에서 클래스는 한 개의 실행용 클래스와 여러 개의 라이브러리용 클래스가 있다.
필드
객체의 데이터가 저장 된 것으로, 변수랑 다름으로 필드라고 부르면 좋다.
생성자
생략하면 자동으로 추가되고, 객체를 사용할 준비를 해준다. (초기화)
생성자의 매개변수로 직접 초기화도 가능하다.
이때 필드와 매개변수가 이름이 같으면 필드를 사용할 수 없기 때문에, ‘this.필드 = 매개변수’로 this를 붙여 필드를 사용할 수 있게 한다.
여러 형태의 객체를 만들기 위해 생성자 오버로딩을 제공한다.
메소드
매개변수의 개수를 모를 때, (int[] values)처럼 배열로 매개 변수를 선언하거나, (int … values)로 매개 변수를 선언한다.
- 메소드 오버로딩
매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다. 리턴 타입이 다른 것은 오버로딩이 아니다.
인스턴스 필드, 인스턴스 메소드
객체 생성 후 사용하는 인스턴스 멤버
정적 필드, 정적 메소드
객체 생성 하지 않고 자유롭게 클래스에 접근하여 사용 가능
정적 메소드에서 인스턴스 멤버를 사용하려면 객체를 먼저 생성해야 한다.
private(싱글톤 객체)
클래스 내부에서 객체를 하나 생성하고, 클래스 외부에서는 생성을 못하도록 막음.
클래스 내부에서 객체를 static으로 직접 생성한다.
외부에서 메소드는 접근할 수 있도록 자기 클래스를 리턴하는 getInstance()메소드를 만들어준다.
final(최종적)
필드 선언 시나, 생성자를 통해 한번만 초기화할 수 있는 것.
final에 값이 없으면 컴파일 에러 (ex. 주민번호)
static final(상수)
객체마다 저장할 필요가 없고 공용성을 띰. (ex. 원주율)
클래스가 많아지면 관리하기가 어려워 패키지가 도입되었다.
패키지는 클래스의 일부분이기 때문에 클래스만 복사해서 사용할 수가 없다.
다른 패키지에 있는 클래스를 사용할 경우에는 import를 사용한다.
<접근 제한>
- 생성자에 접근 제한을 따로 두지 않으면, 클래스의 접근 제한자와 동일 사용한다.
- protected와 default 접근제한자의 차이는 protected는 자식 클래스는 다른 패키지라도 접근 허용한다.
- 객체지향 프로그래밍에서는 필드를 보호하기 위해 메소드를 통해서 값을 바꾸도록 한다.
값을 가공해줄 때
값을 바꿀 때