직전의 포스트에서 잠깐 언급했던 클래스에 대해서 더 자세하게 생각을 해보았습니다. (링크는 더보기 클릭)

class Player {
//Properties
String name;
String job;
int level;


//Function
attack(){}
deffence(){}
}

위 포스트에서 우리는 다수의 속성과 기능을 가지고 있는 한 클래스 Player 에 대해서 정의해보았습니다.

 

이 부분을 보고 누군가는 그냥 main 메서드에 위 내용을 쓰면 되는데,

왜 굳이 Player 라는 클래스에 이와 같은 내용을 써야 하나요?

라는 의문을 가질 수도 있을 것이라 생각합니다.

 

그 이유는 바로 코드를 훨씬 적게 사용하고 수많은 객체들을 생성할 수 있기 때문입니다.

게임에서 Player 캐릭터를 생성할 때, 모든 플레이어가 가지고 있는 공통된 요소들을 Player 라는 클래스에 미리 정의해두는 것입니다.

 

자세한 설명을 위해 위 클래스를 테스트해볼 자바파일인 [testCLass.java]를 생성해보았습니다.

pbulic class testClass {
	public static void main(String[] args){
    }
}

class Player {
  //Properties
  String name;
  String job;
  int level;

  //Method
  attack(){}
  deffence(){}
}

 

자 이 코드를 실행하면 어떤 결과가 프린트 될까요?

더보기

정답은 아무 결과도 나오지 않는다 입니다.

그 이유는, Player 라는 클래스는 그 자체로 어떠한 기능도 하지 않는 것에 불과하기 때문입니다.

그렇다면 우리가 Player 라는 클래스를 이용하여 실제 객체를 만들어보도록 하겠습니다.

클래스가 일종의 분류를 위한 종류(약속)에 가깝다면 객체는 그 분류 안에 포함되어 있는 실재하는 무언가입니다.

pbulic class testClass {
	public static void main(String[] args){
    	Player unchaptered=new Player;
    }
}

class Player {
  //Properties
  String name;
  String job;
  int level;

  //Function
  attack(){}
  deffence(){}
}

 

우리는 unchaptered 라는 이름을 가지고 Player 라는 클래스를 가지고 있는 객체 하나를 생성하고 할당했습니다.

 

그렇다면 unchaptered 가 가지고 있는 속성과 기능들을 사용하기 전, 호출하려면 어떻게 해야 할까요?

우리는 객체의 [이름.호출요소의이름]의 방식으로 해당 요소를 호출할 수 있습니다.

System.out.print(unchaptered.name);
System.out.print(unchaptered.job);
System.out.print(unchaptered.level);
unchaptered.attack();
unchaptered.deffence();

그런데 이 코드를 main 메서드 안에 넣어서 실행하면 오류가 나는 것을 확인할 수 있습니다.

그 이유는 Player 클래스인 unchaptered 를 생성하기는 했지만, 그 안에 들어있는 변수(name,job,level)에 값을 할당하지 않았기 때문입니다. 이러한 오류는 코딩을 하면서 가장 쉽게 자주 접할 수 있는 문제입니다. 이러한 문제는 변수 선언 당시에 기본값(default value) 할당해줌으로써 방지할 수 있겠네요.

pbulic class testClass {
	public static void main(String[] args){
    	Player unchaptered=new Player;
        
        System.out.print(unchaptered.name);
        System.out.print(unchaptered.job);
        System.out.print(unchaptered.level);
        unchaptered.attack();
        unchaptered.deffence();
    }
}

class Player {
  //Properties
  String name="undefined";
  String job="undefined";
  int level=1;

  //Function
  attack(){}
  deffence(){}
}

자 이제 위 코드를 실행해보면 에러가 발생하지 않는 것을 확인할 수 있습니다.

 

정리해보겠습니다.

 

  • 우리는 여러 가지의 값과 기능을 가지고 있는 클래스를 미리 정의해둘 수 있다.
  • 이러한 값과 기능을 필요로 하는 객체를 생성하기 위해서 해당 클래스 타입을 사용할 수 있다.
  • 이렇게 생성된 객체는 해당 클래스의 기본 밗, 기능을 모두 가지고 있다.

당신은 이제 다음과 같은 것을 알며 할 수 있을 것입니다.

  • 새로운 클래스를 정의한다.
  • 해당 클래스를 참조하여 새로운 객체를 생성한다.

이 개념은 Java를 이용하여 어떠한 코드를 작성할 때 당신이 마주하는 거의 모든 부분에 대한 부분을 다루고 있다고 해도 과언이 아닐 것입니다.

 

가장 빠르고 쉽게 접하는 메서드인 

 

Math.random()*max_number; 이나

obj_Integer.parseInt(number); 등등

 

이 있을 것입니다.

 

이러한 클래스에 대한 이해를 돕기 위해서 다음의 내용의 포스틀 추천하겠습니다.

구분 링크
변수에 대하여 작성예정
메서드에 대하여 작성예정
생성자에 대하여 작성예정
오버라이드에 대하여 작성예정

 

+ Recent posts