: 같은 기능, 같은 이름의 메소드를 중복정의 하는 것 . 매개변수의 개수나 타입이 달라야함.
: 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임.
실무에서는 객체지향 언어와 혼용해서 자주 사용함.
: 프로그램을 명령어의 목록으로 보는 시각에서 벗어나, 여러개의 독립된 단위, "객체"들의 모임으로 파악하고자 하는 것.
ex)게임에서 필요한 캐릭터가 어떻게 생겼는지, 어떤 기능을 가지고 있는지 구체적인 정보를 설계해야함. (머리색깔, 눈 색깔 - 속성(field. 변수, 상수(final)) / 걸어다닌다. 공격한다. - 메서드) 이정도 까지만 정의해주는 것.
클래스를 이용해 만든 것을 실제로 구현한 형태. 클래스를 통해 실체가 만들어 지면, 오브젝트는 여러개 생성 할 수 있음. 그 각각의 독립적 데이터(=인스턴스).
캡슐화 (Encapsulation)
: 관련된 필드(속성)와 메소드(기능)를 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 기법. (정보 은닉->변수, 로직을 보호하기 위해.
: 만일의 상항(타인이 외부에서 조작)을 대비해서 특정 속성이나 메소드를 사용자가 조작할 수 없도록 숨겨 놓은 것.
: 외부에서 공개된 메소드(기능)의 인터페이스를 통해 접근할 수 있다. (ex. int volumn = 20; 했을 때 볼륨 높낮이 조절할 수 있어야 하니까 공개된 메소드인 volumn up, volumn down을 통해서만! 조절 가능함. )
상속 (Inheritance)
: 이미 작성된 클래스(상위 클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)를 생성하는 기법.
: 기본 코드를 그대로 재사용하거나 재정의 -> 재사용+확장
다형성 (Polymorphism)
: 메소드 오버로딩. ex) 리모컨 하나로 전원 버튼 누르면 각각 티비, 빔프로젝터 등에 같은 기능을 수행할 수 있음.
: 다양한 형태로 나타날 수 있는 능력.
: 같은 기능(메소드)를 호출하더라도 객체에 따라 다르게 동작하는 것.
: 상위클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것 또한 다형성으로 볼 수 있다.
오버로딩 : 메소드의 매개변수(개수, 타입, 순서)를 다르게 하는 것.
오버라이딩 : 매개변수, 반환값, 모두 동일. 로직만 다르게 하는 것.
오브젝트 클래스 : 모든 객체의 최상위 클래스.
: 메소드
: 생성자 이름은 클래스 이름과 동일.
: 리턴 타입을 지정할 수 없다.
: new를 통해 객체를 생성할 때만 호출되어 객체의 초기화를 담당.
: 하나 이상 선언되어야 함. 한개는 무조건 필수!
[public]클래스(){}
// 컴파일러에 의해 자동 생성.
// 만약 defalut생성자만 존재하고 defalut에 아무런 기능이 없을 경우, 생략 가능.
클래스 ( [매개변수, ...]){
this(매개값, ..., 값, ...); // < 원래 이자리에 다양한 초기화 코드가 작성이 되어야 하는데 그 초기화코드를 작성하지 않고 대신 다른 생성자에서 초기화 코드를 실행할수 있게 함.
실행문;
}