객체의 설계도 만들기
객체가 제품이라면, 클래스는 제품의 블루프린트이다
데이터(멤버 변수)와 기능(메소드)들의 결합으로 이루어져있다
클래스명은 주로 파스칼 케이스를 사용한다
class TV {
String color;
boolean power;
int channel;
void toString() {
...
}
}
public class Test {
private int num;
protected void toString() {
...
}
...
}
객체를 생성하는 것은 클래스에 정의된 내용을 메모리에 생성되는 과정이다
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며, 객체는 특정 클래스의 인스턴스이다
new 연산자는 클래스 인스턴스화를 하며, JVM의 heap 영역에 객체가 생성되고 객체 주소를 반환한다
ExClass ex; // 객체 참조 위한 참조변수 선언
ex = new ExClass(); // 객체 생성 후, 객체의 주소를 참조변수에 저장
멤버 변수가 데이터라면, 메소드는 행동과 기능이다
형태 자체는 다른 언어의 함수와 같지만, 자바에서 모든 코드는 클래스 내에 존재하기 때문에 메소드라고만 부른다
선언부와 구현부로 나눌 수 있다. 자바는 접근 지정, 반환 타입, 매개변수 타입이 명확하기 때문에 선언부만으로도 무슨 기능을 하는 메소드인지 추론 가능한게 자바의 장점 중 하나이다
주로 스네이크 케이스로 이름을 짓는다
public int getA() { // 선언부
return A; // 구현부
}
인스턴스 생성 시 호출되는 메소드
객체의 데이터를 초기화하기 위해 주로 사용된다
클래스와 이름이 같은 메소드는 생성자로 인식된다
오버로딩을 통해 여러 생성자를 만들 수 있다. 이때 서로 다른 생성자는 매개 변수의 개수가 다르거나 또는 순서가 달라야한다. 매개변수 이름만 달라서는 오버로딩이 되지않는다
생성자를 작성하지 않을 시 컴파일러가 매개변수가 없는 생성자를 자동 생성하기 때문에 문제가 발생하지 않지만, 생성자를 하나라도 작성할 시 자동으로 생성되지 않기 때문에 신경써야한다
class User {
String name;
int age;
User() {}
User(String name, int age) {
this.name = name;
this.age = age;
}
}
this란 참조변수로 인스턴스 자신을 가리킨다
인스턴스 멤버만이 this를 사용할 수 있다
this 자체도 참조변수이기 때문에 인스턴스의 주소가 저장되어 있다
this() 형태로 생성자를 나타낼 수도 있다
class Rectangle {
private int x, y;
private int width, height;
Rectangle() {
this(0,0,1,1);
}
Rectangle(int width, int height) {
this(0,0,width,height)
}
Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
}