객체 지향(Object-Oriented Programming)
객체지향의 특징
- 캡슐화(Encapsulation)
- 객체의 데이터와 메서드를 하나로 묶어 외부로부터 정보를 은닉하는 원칙
- 객체가 제공하는 공용 메서드를 통해서만 조작가능
- 접근제어자를 통해 구현될 수 있음
- 상속(Inheritance)
- 부모클래스의 속성과 메소드를 자식클래스가 물려받아 사용할 수 있도록 하는 원칙
- 코드의 재사용성 증가, 객체간의 관계가 명확하짐
- 다형성(Polymorphism)
- 동일한 이름의 메서드를 다양한 형태로 구현하는 기능(Overloading, Overriding)
- 오버로딩
- 같은 이름 - 다른 매서드 시그니쳐(매개변수 타입, 개수 등)
- 오버라이딩
- 추상화(Abstraction)
- 복잡한 시스템내의 중요한 부분만 강조, 세부사항은 숨기는 것
- 추상 클래스, 인터페이스로 추상화 구현
객체
객체는 데이터와 메서드를 하나로 묶은 실체로 상태와 행동으로 구성
클래스
객체의 설계도로 생각할 수 있다.
객체의 상태를 나타낼 수 있는 필드와 행동을 나타내는 메서드로 구성
이름은 대문자로 시작
- 정적변수(Static) : 클래스 자체에 속하여 모든 객체가 공유하는 변수
- 클래스가 메모리에 올라갈때 같이 적재(클래스 멤버 변수) → 클래스에서 직접 참조 가능
- 인스턴스변수 : 인스턴스별로 독립적으로 가지는 변수
인스턴스
인스턴스는 클래스을 바탕으로 생성된 객체이다.
new 키워드로 생성
생성자
객체를 초기화하는 메서드
객체의 초기 상태를 설정한다.
- 생성자가 오버로딩되어 있지 않고 없는 상태면 컴파일러가 기본생성자를 자동 생성한다.
- 사용자지정생성자가 하나 있으면 이 생성자가 기본생성자의 역할을 함(매개변수는 맞춰줘야 한다.)
- 생성자의 이름은 클래스의 이름과 같아야한다.
- 변환타입X
this
객체 자신을 참조하는 키워드
객체의 필드를 참조
public class Test{
private int age;
public howOld(int age){
this.age = age;
}
}
위와 같은 예일때 메서드의 매개변수 age와 필드 age를 구분하기 위해 this.age를 사용하여 객체자신을 참조한다.
생성자 체이닝(Constructor Chaining)
this로 같은 클래스의 다른 생성자를 호출 할 수 있다.
예를 들어 매개변수가 없는 생성자를 호출 했을때
this.(0,0) 이런식으로 다른 생성자를 호출하면 필드에 0값이 들어가게 된다.
스코프(Scope)
변수나 메서드에 접근할 수 있는 범위를 뜻한다.
- 클래스 스코프
- 메서드 스코프
- 블록 스코프
- 매개변수 스코프
- 정적 영역 스코프