자바에서 클래스란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다. 속성과 기능으로 정의되어 있다.
클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성되어 있다.
필드
: 클래스에 포함된 변수(variable)을 의미한다.
class MyClass {
// field, constructor, and
// method declarations
}
객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다. 객체가 가지고 있는 속성과 기능을 그 객체의 멤버라 한다.
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 한다. 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라 한다.
객체는 new 키워드를 이용해 생성이 가능하다. new 키워드를 이용하면 메모리 힙영역에 데이터를 저장할 영역을 할당 받은 후 해당 영역의 주소를 객체에게 반환하여 객체를 사용할수 있도록 한다.
Person person = new Person();
특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.
메서드는 크게 선언부(header)와 구현부(body)로 이루어져 있다.
선언부는 메서드의 이름과 매개변수 선언 그리고 반환타입으로 구성되어 있다.
int add (int x, int y) { // 선언부
int result = x + y; // 구현부
return result; // return문
}
생성자는 인스턴스가 생성될 때, 호출되는 인스턴스 초기화 메서드이다.
인스턴스변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 하는 작업을 위해서도 사용된다.
class Example {
Example() { ... }
Example(int x, int y) { ... }
}
연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다. 생성자라는 용어 때문에 오해하기 쉬운데, 생성자는 단순히 인스턴스변수들의 초기화에 사용되는 조금 특별한 메서드일 뿐이다.
컴파일 할 때, 소스파일(*.java)의 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러는 자동적으로 아래와 같은 내용의 기본 생성자를 추가하여 컴파일 한다.
class Example {
Example() { ... }
}
생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스의 초기화 작업에 사용할 수 있다. 인스턴스마다 각각 다른 값으로 초기화되어야 하는 경우가 많기 때문이다.
class Example {
String name;
int age;
Example(String a, int b) {
name = a;
age = b;
}
}
this
는 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
class Example {
int x;
int y;
Example(int x, int y) {
this.x = x;
this.y = y;
}
}
생성자의 매개변수로 인스턴스변수들의 초기값을 제공받는 경우가 많기 때문에 매개변수와 인스턴스의 이름이 같은 경우가 있다.
변수이름을 달리 하는 것 보다 this를 사용해서 구별되도록 하는 것이 의미가 명확하다.
https://www.notion.so/Live-Study-5-75f857b63e524d33914a8b3ec6e1e894
https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html