Java Category/Java

[JAVA] 클래스(Class)

ReBugs 2022. 12. 30.

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다.


클래스는 두 가지 용도가 있다.

하나는 라이브러리(API)용이고, 다른 하나는 실행용이다.

라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다.

프로그램 전체에서 사용되는 클래스가 100개라면 99개는 라이브러리 클래스이고, 단 하나가 실행용 클래스이다.

실행용 클래스는 프로그램의 실행 진입점인 main()메소드를 제공하는 역할을 한다.

 

클래스 구성 멤버

클래스의 구성 멤버로는 필드(field), 생성자(constructor), 메소드(method)가 있다.

필드

선언 형태는 변수와 비슷하지만, 필드를 변수라고 부르지는 않는다.

변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸된다.

하지만 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재.

 

생성자

생성자는 new 연산자로 호출되는 특별한 중괄호 블록이다.

생성자의 역할은 객체 생성시 해야 할 동작을 한다

보통 객체 생성시 초기화를 담당한다.

필드를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 한다.

생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴 타입이 없다.

 

메소드

메소드를 호출하게 되면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행한다.

 

클래스 선언

클래스 이름을 정했다면 '클래스 이름.java'로 소스 파일을 생성해야 한다. 소스 파일 이름 역시 대소문자를 구분하므로 반드시 클래스 이름과 대소문자가 같도록 해야 한다.

package TestPakage;

public class Example {

}

일반적으로 소스 파일당 하나의 클래스를 선언하지만 2개 이상의 클래스 선언도 가능하다.

package TestPakage;

public class Example {

}

class Example2 {

}

2개 이상의 클래스가 선언된 소스 파일을 컴파일하면 바이트 코드 파일은 클래스를 선언한 개수만큼 생긴다.

소스 파일은 클래스 선언을 담고 있는 저장 단위일 뿐, 클래스 자체가 아니다.

public 접근 제한자
public 접근 제한자는 파일 이름과 동일한 이름의 클래스 선언에만 붙일 수 있다.
만약 파일 이름과 일치하지 않는 클래스 선언에 public 접근 제한자를 붙이면 컴파일 에러가 발생한다.

 

객체 생성과 클래스 변수

new는 클래스로부터 객체를 생성시키는 연산자이다.

new 연산자 뒤에 생성자이름(클래스이름)을 입력하면 클래스로부터 객체를 생성시키고 객체는 메모리 힙영역에 생성된다.

현실에서도 물건의 위치를 모르면 물건을 사용할 수 없듯이, 객체 지향 프로그램에서도 메모리에서 생성된 객체의 위치를 모르면 객체를 사용할 수 없기 때문에 new 연산자는 힙 영역에 객체를 생성시킨 후 객체의 주소를 리턴하도록 되어있다.

이 주소를 참조 타입인 클래스 변수에 저장해두면 변수를 통해 객체를 사용할 수 있다.

 

클래스 정의(Example.java)

package TestPakage;

public class Example {

}

클래스로부터 객체 생성(Test.java)

package TestPakage;
public class Test {
	public static void main(String[] args) {
		Example a = new Example();

		Example b = new Example();
	}
}

Example 타입의 클래스 변수 a, b에 Example 객체를 생성하는 것이다

Example 클래스는 하나지만 new 연산자를 사용한 만큼 객체가 메모리에 생성된다.

이러한 객체들은 Example 클래스의 인스턴스이다.

a와 b가 참조하는 Example 객체는 완전히 독립된 다른 객체이다.

'Java Category > Java' 카테고리의 다른 글

[JAVA] 생성자(Constructor)  (0) 2023.01.01
[JAVA] 필드(Field)  (0) 2022.12.31
[JAVA] 객체 지향 프로그래밍(OOP)  (0) 2022.12.29
[JAVA] 열거 타입(enum)  (0) 2022.12.28
[JAVA] 배열(Array)  (0) 2022.12.27

댓글