객체지향이론의 기본 개념은 실제 세계가 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들이 사물간의 상호작용이라는 것이다. 그리고 그러한 상호작용(관계)를 프로그래밍 언어로서 구현한 것이 객체지향 언어이다.
프로그래밍에서 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻함
객체지향 언어의 주요특징
1. 코드의 재사용성이 높다.
2. 코드 유지보수가 용이하다.
3. 중복 코드를 방지한다.
class CoffeeMachine {
//CoffeeMachine클래스의 멤버변수(=속성)
int price; //가격
String productCode; //제품 코드
String colorCode; //색상 코드
//생성자
public CoffeeMachine(int price, String productCode, String colorCode) {
price = price;
productCode = productCode;
colorCode = colorCode;
}
//커피를 만드는 메서드
public Coffee makeCoffee(CoffeeBean bean) {
...
return coffee;
}
}
클래스명은 대문자로 시작한다.
class CoffeeMachine
초기화가 필요한 멤버변수를 위해 생성자를 선언한다.
public CoffeeMachine(int price, String productCode, String colorCode) {...}
선언된 생성자가 없는 경우 파라미터와 몸통부분이 비어있는 default 생성자가 호출된다.
객체에 어떤 기능이 있는 경우 기능을 구현한 메소드를 선언한다. 메소드에는 반환형을 명시해줘야 한다.
public Coffee makeCoffee(CoffeeBean bean) {...}
반환타입 메서드명 (타입 변수명, ...) //선언부
{
//구현부
}
public Coffee makeCoffee(CoffeeBean bean) //선언부
{
//구현부
...
//반환되는 변수 coffee의 타입은 선언부에 적힌 것과 같이 Coffee타입 이거나
//Coffee타입으로 자동 형변환될 수 있는 타입이어야 한다.
return coffee;
}
매개변수를 입력할 때 타입을 적어줘야 하며, 같은 타입의 매개변수를 여러개 입력하는 경우에도 타입은 다 적어줘야 한다.
cf. 매개변수도 지역변수이다.
메서드가 반환하는 게 없다면 반환타입을 void로 선언한다.
클래스명()
가 호출되어 수행됨.클래스명() {}
public CoffeeMachine() {}
public CoffeeMachine(int price, String productCode, String colorCode) {
price = price;
productCode = productCode;
colorCode = colorCode;
}
public CoffeeMachine(int price, String productCode) {
this(price, productCode, "#000000);
// 가격과 제품 코드만 입력받은 생성자는 내부에서 디폴트 색상코드를 입력하여
// 생성자를 한번 더 호출.
};
public CoffeeMachine(int price, String productCode, String colorCode) {
this.price = price;
this.productCode = productCode;
this.colorCode = colorCode;
}
public CoffeeMachine(int p, String pc, String cc) {
price = p;
productCode = pc;
colorCode = cc;
}
위 코드에서는 인스턴스 변수 price와 지역변수 p의 변수명이 구별되므로 문제가 없다.
public CoffeeMachine(int price, String productCode, String colorCode) {
this.price = price;
this.productCode = productCode;
this.colorCode = colorCode;
}
하지만 위 코드와 같이 작성하는 경우 인스턴스 변수명과 지역변수명이 같기 때문에 두 변수가 구별되지 않는다. 이런 경우에 인스턴스 변수에 this를 붙이면 된다.
이때 this는 참조변수로 인스턴스 자신을 가리키며(인스턴스의 주소가 저장되어 있음) 모든 인스턴스 메서드에 지역변수로 존재한다(숨겨진 상태).