Home > Java > Live-Study > 자바의 Class

자바의 Class
java 백기선 Live Study

목적

자바의 Class에 대해 학습하세요.

학습할 것

  1. 클래스 정의하는 방법
  2. 객체 만드는 방법 (new 키워드 이해하기)
  3. 메소드 정의하는 방법
  4. 생성자 정의하는 방법
  5. 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의 정석