[자바 4대 중첩클래스_1] 개념과 일반 중첩클래스
▣ 자바 4대 중첩클래스 개념과 일반중첩클래스 |
● 자바에는 프로그램을 효율적으로 관리하기 위한 방법으로 메서드, 클래스 등등 여러가지를 사용하는데요. 중첩 클래스도 이럿듯 프로그램의 효율적인 관리를 위한 형식입니다. 먼저 개념부터 짚고 넘어가도록 하겠습니다.
● 예를 들어 어떤 회사에서 사원들을 관리하기 위해서 프로그램을 만든다고 가정했을때 어떤 사람에 대해서 신체정보, 주소, 부서 등등 여러개의 class가 필요한데 신체정보에는 그사람의 이름과 주민번호, 시력, 키, 몸무게...등의 정보가 필요할 것이며, 주소에도 그사람의 이름과 주민번호, 주소, 전화번호등.. 정보가 필요하고, 부서 에도 이름과 주민번호 직급, 근무년수...등등 정보가 필요할것입니다.
● 이것들을 모두 따로 작성한다면 많이 힘들것입니다. 이렇게 여러개의 클래스를 작성해야 할 상황에서 하나의 대표 클래스를 만들고, 그 안에 다른 클래스를 넣어버릴 수 있는데요. 이때 대표에는 그들의 공통적인 속성(이름, 주민번호)만 가지고 나머지는 각자의 class에서 관리하도록 하는것입니다.
● 다음과 같은 프로그램이 가능한 것입니다.
예제 처럼 Person이라는 class가 있고, 공통으로 쓰여질 변수인 "이름"과 "주민번호"를 대표 클래스에서 선언하고, 이 안에 "Address"가 들어가 있는 형태의 프로그램 작성이 가능한것이 중첩 클래스의 개념입니다. 주소 외에도 신체정보나, 부서에 등 여러개가 들어갈 수도 있습니다.
● 이렇듯 class 안에 또다른 클래스가 있는 경우에 서로의 내부에 있는 멤버들에게 접근하기 위해서는 객체를 생성해야 하는데요. 객체 생성 방법이 조금 특이합니다.
Person 객체1 = new Person(); [Person 의 객체 생성은 특이한점이 없습니다.] Person.Address 객체2 = 객체1.new Address(); [이것이 Address 객체 생성방법입니다.] |
Address 객체 생성이 조금 특이하긴 하지만 이것은 외울수밖에 없습니다.^^;
● 각각의 class의 객체를 만들어서 접근하는 방법을 예를 들어 살펴보겠습니다.
예제에는 현재 3개의 클래스가 있고, 각각의 객체를 만들어서 접근하고 있는걸 확인할 수 있습니다. 이 프로젝트를 컴파일 하면 bin 폴더에 세개의 class 파일이 생성되게 됩니다.
자바에스는 class만 붙어 있으면 모두 클래스 파일로 생성을 합니다. 이중에서 중첩 클래스에만 "$" 기호가 표시된걸 확인할 수 있는데요. 이것이 중첩클래스의 형식입니다.
● 중첩클래스에서 안에 있는 class에서는 바깥쪽 class의 멤버를 아무 절차 없이 가져다 쓸 수 있습니다.
● 그러나 바깥쪽에 있는 클래스에서는 안쪽에 있는 클래스의 멤버를 사용하지 못합니다.
안쪽의 멤버(y)를 사용하려고 하니까 에러가 뜹니다. 이런 경우에 정상적으로 실행되기 위해서는 다음과 같이 변경을 해야 합니다.
● 여기서 중요한것은 AAA에서 BBB의 멤버를 사용하기 위해서 객체를 생서할때 현재 클래스의 객체를 대변하는 "this"가 쓰였다는 점입니다. 이것은 static 메서드 내부에서는 일반 중첩 클래스의 객체를 생성할 수 없다는 뜻이기도 합니다. AAA의 disp() 메서드가 public static disp() 형식으로 되어있다면 에러가 발생합니다. 또 BBB 클래스에서 static 과 관련된 멤버를 선언해도 에러가 발생하니다.