Page last modified: Feb 14 2021
목표
자바의 Class에 대해 학습하기
Class
- 변수, 메소드 등의 정의를 통해 어떻게 작동시킬지 명시한 것
- 자바 프로그램에서 핵심적인 요소로 클래스 없이 자바 코드를 작성할 수 없다
- 클래스는 레퍼런스 타입이다
클래스 정의
- 클래스명
- Naming Convention
- 클래스명은 첫 글자를 대문자로 하는 명사일 것
- 첫 글자를 따서 줄이거나 약어는 지양할 것
- Naming Convention
- 상속, 인터페이스
extends
키워드를 사용하여 superclass 지정implements
키워드를 사용하여 구현할 interface 지정
- 필드: 변수, 메소드
static
키워드를 사용하여 클래스 변수/클래스 메소드인지, 인스턴스 변수/인스턴스 메소드인지 지정
생성자
- 초기화 블록
클래스 멤버
- 변수 메소드 또는 생성자를
static
키워드를 사용하여 정의
💡static 키워드를 사용하면?
① 프로그램이 실행될 때 메모리에 올라간다
② 인스턴스를 생성하지 않아도 사용 가능하다
③ 모든 인스턴스가 공유한다 - access modifiers(접근 제어자) 키워드 사용 가능
Accessible to | public | protected | default | private |
---|---|---|---|---|
Defining class | Yes | Yes | Yes | Yes |
Class in same package | Yes | Yes | Yes | No |
Subclass in different package | Yes | Yes | No | No |
Nonsubclass different package | Yes | No | No | No |
public class Integer extends Number implements Serializable, Comparable {
// class members here
}
출처 Java in a Nutshell 7th edition
중첩 타입, 내부 클래스
- 외부에 노출하지 않고 사용하고자 할 때
- 외부 클래스와 밀접한 관계가 있을 때
- 코드에서 극소한 부분에만 쓰일 때
- 컴파일 시 클래스 단위로 .class파일이 생성됨 (A.class, B.class)
1) Static member types
static
키워드로 선언된 것
static 키워드를 사용하지 않더라도 중첩 interface, enum, annotation은 static
class A {
static class B {
}
}
// 외부에서 접근
int numFromB = B.num;
2) Nonstatic member classes
static
키워드로 선언되지 않은 것
class A {
class B {
}
}
3) Local classes
클래스의 메소드 내에 선언 (지역 변수와 같은 맥락)
interface, enum, annotation은 지역으로 정의될 수 없다
class A {
public void method() {
class B {
}
}
}
4) Anonymous classes
의미있는 이름이 붙여지지 않은 local class
interface B {
void method();
}
class A {
B b = new B() {
@Override
public void method() {
}
};
}
메소드 정의
Syntax
<접근 제어자> <static> <반환 타입> <메소드명> (<파라미터>) {
// define body
}
class Main {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
생성자 정의
클래스가 인스턴스화 될 때, 즉 new 키워드로 인스턴스가 생성될 때 초기화를 담당
- 꼭 정의하지 않아도 됨
- 여러 개의 생성자 정의 가능
public Person{
String name;
Person() {
this("Jen");
}
Person(String name) {
this.name = name;
}
}
Person jen = new Person();
Person kim = new Person("kim");
this 키워드
지역변수와 클래스의 멤버변수가 이름이 동일할 경우, 인스턴스 필드의 변수임을 명시
public Person{
String name; // Person 타입의 인스턴스가 생성될 때마다 값을 다르게 가질 수 있는 인스턴스 필드
Person(String name) {
this.name = name; // 클래스 멤버변수 name에 파라미터 name 값을 할당
}
}
Instance
클래스가 heap 메모리에 올라간 것
new
키워드는 클래스의 컨스트럭터를 작동시키기 때문에 인스턴스를 생성한다
Person jen = new Person();
Person kim = new Person("kim");