[Java의 정석]Chapter6.객체지향 프로그래밍(05~07)

Chapter 6. 객체지향 프로그래밍

05. 한 파일에 여러 클래스 작성하기

  • 하나의 소스파일에 하나의 클래스만을 정의하는 것이 보통이지만, 하나의 소스파일둘 이상의 클래스를 정의하는 것도 가능

📍 주의 : 소스파일의 이름은 public class의 이름과 일치
-만약 소스파일 내에 public class가 없다면, 소스파일의 이름은 소스파일 내의 어떤 클래스의 이름으로 해도 상관없음

올바른 작성 예)
<Hello2.java>
public class Hello2 {}	//Public class가 있는 경우,
	   class Hello3 {}  //소스파일의 이름은 반드시 public class의 이름과 일치
 
<Hello2.java>
class Hello2 {}	 //public class가 없는 경우,
class Hello3 {}	 //소스파일의 이름은 'Hello2.java.''Hello3.java' 둘 다 가능

잘못된 작성 예)
<Hello2.java>
Public class Hello2 {}  //하나의 소스파일에 둘 이상의 public class가 존재하면 안됨
Public class Hello3 {}  //각 클래스를 별도의 소스파일로 나눠서 저장하거나 
						둘 중의 한 클래스에 'public'을 삭제

<Hello3.java>
public class Hello2 {}  //소스파일의 이름이 public class의 이름과 불일치
	   class Hello3 {}  //소스파일의 이름을 'Hello2.java'로 변경해야함

<hello2.java>
public class Hello2 {}  //소스파일의 이름과 public class의 이름이 불일치
	   class Hello3 {} //대소문자 구분하므로 맞춰 적어야함
  • 소스파일(.java)과 달리 클래스파일(.class)은 클래스마다 하나씩 만들어짐
    ex) 올바른 작성 예) 에 제시된 'Hello2.java'를 컴파일하면 'Hello2.class'와 'Hello3.class' 두 개의 클래스 파일이 생성

06. 객체의 생성과 사용

  • 클래스로부터 인스턴스를 생성하는 방법

    	클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수를 선언
    	변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
    
    	Tv t; //Tv 클래스 타입의 참조변수 t를 선언
    	t = new Tv(); // Tv인스턴스 생성 후, 생성된 Tv인스턴스의 주소를 t에 저장

▶ Tv클래스로부터 인스턴스를 생성하고 인스턴스의 속성(channel)과 메서드(channelDown())를 사용하는 방법을 보여주는 예제

▶ 예제 단계별로 살펴보기

  1. Tv t;
    : Tv 클래스 타입의 참조변수 t 선언. 메모리에 참조변수 t를 위한 공간이 마련. 아직 인스턴스가 생성되지 않았으므로 이 참조변수로 할 수 있는 것은 없음

  2. t= new Tv();
    : 연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성. 주소가 0x100인 곳에 생성되었다고 가정하면 멤버변수는 각 자료형에 해당하는 기본값으로 초기화.
    color는 참조형이므로 null로, powoer는 boolean이므로 false로, channel은 int이므로 0으로 초기화
    : 대입연산자(=) 에 의해 생성된 객체의 주소값이 참조변수 t에 저장. 이제 참조변수 t를 통해 Tv인스턴스에 접근 가능

  3. t.channel = 7;
    : 참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel7을 저장. 인스턴스의 멤버변수(속성)를 사용하려면 '참조변수.멤버변수'의 형식

  4. t.channelDown();
    : 참조변수 t가 참조하고 있는 Tv인스턴스의 channelDown메서드를 호출. channel Down메서드는 멤버변수 channel에 저장되어 있는 값을 1 감소시킴(channelDown()에 의해 channel의 값은 7에서 6이 됨)

  5. System.out.println("channle is " + t.channel);
    : 참조변수 t가 참조하고 있는 Tv인스턴스의 멤버변수 channel에 저장되어 있는 값을 출력. 현재 channel의 값은 6.

🍓 인스턴스는 참조변수를 통해서만 다룰 수 있으며,
     참조변수의 타입은 인스턴스의 타입과 일치해야 함

07. 객체의 생성과 사용 예제

  • 같은 클래스로부터 생성되었을지라도 각 인스턴스의 속성(멤버변수)은 서로 다른 값을 유지할 수 있으며, 메서드의 내용은 모든 인스턴스에 대해 동일

    ▶ Tv클래스의 인스턴스 t1과 t2를 생성 후, 인스턴스 t1의 멤버변수인 channel의 값을 변경함

좋은 웹페이지 즐겨찾기