목적
자바의 Class에 대해 학습하세요.
학습할 것
- 클래스 정의하는 방법
- 객체 만드는 방법 (new 키워드 이해하기)
- 메소드 정의하는 방법
- 생성자 정의하는 방법
- this 키워드 이해하기
1. 클래스 정의하는 방법
클래스란, 객체를 정의해놓은 것, 또는 객체의 설계도 라고 정의할 수 있다. 그리고 클래스는 객체를 생성하는데 사용된다.
클래스를 구성하는 요소들은 필드들과 메소드, 생성자로 되어있다.
public class Account{
private Long id;
private String name;
private String email;
private String password;
/* 생성자는 default 하게 만들 수 있지만 생성자에서 파라미터로 값을 받아서 작성 시, 반드 시 작성해주어야 한다.
*/
public Account(String email, String password){
this.email = email;
this.password = password;
}
public String getEmail(){
return Email;
}
public void changePassword(String password){
this.password = password;
}
}
2. 객체 만드는 방법(new 키워드 이해하기)
클래스로부터 객체를 만드는 과정을 인스턴스화 라고 하며 만들어진 객체를 그 클래스의 인스턴스라고 한다. 그리고 객체는 속성과 기능 두 종류의 구성요소로 이루어져 있으며 이들은 그 객체의 멤버라고 한다. 속성과 기능 같은 경우, 속성은 멤버변수, 기능은 메소드 라고 말한다.
클래스명 변수명; // 선언
변수명 = new 클래스명(); // 생성
기본적으로 인스턴스 생성( 객체 만들기 )는 위 코드처럼 정의하며 위 클래스를 예시로 들었을 땐,
Account account;
account = new Account(); // 기본 생성자
account = new Account("dmstjd1024@naver.com", "password") // 파라미터 있는 생성자
이런 식으로 구성된다.
3. 메소드 정의하는 법
반환타입 메서드이름 (타입 변수명, 타입변수명, ... )
{
//메서드 호출 시 수행될 코드
}
ex)
int add (int a, int b)
{
int result = a + b;
return result;
}
4. 생성자 정의하는 방법
컴파일 시 소스파일에 생성자가 하나도 정의되지 않은 경우, 컴파일러는 자동적으로 아래와 같은 내용의 기본 생성자를 추가하여 컴파일 한다.
클래스이름() {}
조심해야 할 점은 클래스 내에 생성자가 하나도 없을 때 이므로 혹시나 뜬금없이 파라미터를 가진 생성자만 적어놓으면 에러가 난다.
클래스 클래스명{
변수
변수
생성자(파라미터 파라미터명){
// 에러 발생
}
}
5. this 키워드 이해하기
생성자 간에도 서로 호출이 가능한다. 허나 2가지 조건이 필요한다.
- 생성자의 이름으로 클래스이름 대신 this를 사용
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능
ex)
Car (String color){
door = 5;
Car(color, "auto", 4); // X 생성자에서 다른 생성자를 호출 => this(color ....) 생성 O
}
첫줄에서만 호출 가능한 이유는 생성자 내에서 ㅗ기화 작업 도중, 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화를 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질수 있기 떄문이다.
그리고 this같은 경우는
Car(){
this("white", "auto", 4); // 처럼 깔끔하게 적는 것이 보기 더 좋다.
}
또한 this를 이용해서 인스턴스변수에 접근할 수 있다. 허나 this는 인스턴스 변수에만 접근할 수 있다. static 메서드에서는 인스턴스를 사용할 수 없는 것처럼, this 역시 사용할 수 없다. static 메서드는 인스턴스를 생성하지 않고도 호출될 수 있기 때문이다.
정리하자면
this 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있따. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
this(), this(매개변수) 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
Reference
남궁성. Java의 정석