[Java] 클래스 객체 선언 및 객체 배열 사용법 정리

반응형
반응형

목차

#1 클래스 선언 및 명명 규칙

#2 인스턴스 객체 생성 및 접근 방법

#3 객체 배열

 

* 개인적인 공부 내용을 기록하는 용도로 작성한 글 이며, 지속적으로 내용을 수정해 갈 예정입니다.


#1 클래스 선언 및 명명 규칙

class 키워드를 사용해 선언한다. 클래스 내부에 선언된 변수들은 필드 혹은 멤버변수 라고 부른다.

다음은 필드 (name, level, atk) 를  가지는 Monster 클래스를 선언한 예제이다. 

class Monster {
    String name;
    int level;
    int atk;
}

 

Naming Convention

1. 클래스명은 대문자로 시작한다.

2. Camel Case 표기법을 따른다. 


#2 인스턴스 객체 생성 및 접근 방법

클래스는 단순히 객체[인스턴스]를 생성하는 설계도로, 객체를 직접 생성해 정의한 뒤 접근하여 사용해야 한다. new 키워드를 사용해 객체를 생성하며, Monster class 내부에 선언된 필드의 크기만큼 메모리 공간을 차지한다. 생성한 뒤에는 객체에 접근할 수 있는 참조값을 반환한다. 실제로 slime 변수를 직접 출력해 보면 참조값이 담겨 있는 것을 확인할 수 있다. 

public class Main {
    public static void main(String[] args) {
        Monster slime = new Monster();
        System.out.println("slime object 주소값 : " + slime);
    }
}
slime object 주소값 : ex.Monster@30f39991

 

. [dot] 접근 연산자를 사용하면 생성한 객체에 접근 할 수 있다. 

다음 코드는 Monster 클래스를 사용해 Slime 객체를 생성한 뒤, Slime 객체에 접근해 각 각의 필드 [name, level, atk] 를 초기화한 예제이다.

public class Main {
    public static void main(String[] args) {
        Monster slime = new Monster();
        slime.name = "NormalSlime";
        slime.level = 5;
        slime.atk = 10;
        System.out.println("slime object");
        System.out.println("name : " + slime.name + ", level : " + slime.level + ", atk : " + slime.atk);
    }
}
slime object
name : NormalSlime, level : 5, atk : 10

 


#3 객체 배열

객체 배열이란 말 그대로 생성한 객체에 접근할 수 있는 참조값을 보관하고 있는 배열이다. 여기서 중요한 점은 실제 객체가 저장되는 것이 아닌 객체에 접근할 수 있는 참조값이 복사되어 저장된다는 것이다. 

주의할 점은 객체 배열은 참조형 [reference type] 을 저장하고 있는 배열이기에, 값을 초기화해 주지 않으면 기본 적으로 Null 값으로 초기화 되게 된다. 따라서 NullPointerException 에러가 발생할 수 있기에 사용에 유의해야 한다. 

클래스명[] 객체배열명 = new 클래스명[길이];

 

다음은 normalSlime, epicSlime 객체에 접근할 수 있는 참조값을 담고 있는 slimes 객체 배열을 생성한 뒤 접근한 예제이다.

public class MonsterMain {
    public static void main(String[] args) {
        Monster[] slimes = new Monster[2];
        Monster normalSlime = new Monster();
        normalSlime.name = "NormalSlime";
        normalSlime.level = 5;
        normalSlime.atk = 10;
        slimes[0] = normalSlime;

        Monster epicSlime = new Monster();
        epicSlime.name = "EpicSlime";
        epicSlime.level = 8;
        epicSlime.atk = 13;
        slimes[1] = epicSlime;

        for(int i = 0; i < slimes.length; i++) {
            System.out.println("name : " + slimes[i].name + ", level : " + slimes[i].level + ", atk : " + slimes[i].atk);
        }
    }
}
name : NormalSlime, level : 5, atk : 10
name : EpicSlime, level : 8, atk : 13
반응형

댓글

Designed by JB FACTORY