📍 주의 : 소스파일의 이름은 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 {} //대소문자 구분하므로 맞춰 적어야함
ex)
올바른 작성 예) 에 제시된 'Hello2.java'를 컴파일하면 'Hello2.class'와 'Hello3.class' 두 개의 클래스 파일이 생성클래스로부터 인스턴스를 생성하는 방법
클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t; //Tv 클래스 타입의 참조변수 t를 선언
t = new Tv(); // Tv인스턴스 생성 후, 생성된 Tv인스턴스의 주소를 t에 저장
▶ Tv클래스로부터 인스턴스를 생성하고 인스턴스의 속성(channel)과 메서드(channelDown())를 사용하는 방법을 보여주는 예제
▶ 예제 단계별로 살펴보기
Tv t;
: Tv 클래스 타입의 참조변수 t 선언. 메모리에 참조변수 t를 위한 공간이 마련. 아직 인스턴스가 생성되지 않았으므로 이 참조변수로 할 수 있는 것은 없음
t= new Tv();
: 연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성. 주소가 0x100인 곳에 생성되었다고 가정하면 멤버변수는 각 자료형에 해당하는 기본값으로 초기화.
color는 참조형이므로 null로, powoer는 boolean이므로 false로, channel은 int이므로 0으로 초기화
: 대입연산자(=) 에 의해 생성된 객체의 주소값이 참조변수 t에 저장. 이제 참조변수 t를 통해 Tv인스턴스에 접근 가능
t.channel = 7;
: 참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장. 인스턴스의 멤버변수(속성)를 사용하려면 '참조변수.멤버변수'
의 형식
t.channelDown();
: 참조변수 t가 참조하고 있는 Tv인스턴스의 channelDown메서드를 호출. channel Down메서드는 멤버변수 channel에 저장되어 있는 값을 1 감소시킴(channelDown()에 의해 channel의 값은 7에서 6이 됨)
System.out.println("channle is " + t.channel);
: 참조변수 t가 참조하고 있는 Tv인스턴스의 멤버변수 channel에 저장되어 있는 값을 출력. 현재 channel의 값은 6.
🍓 인스턴스는 참조변수를 통해서만 다룰 수 있으며,
참조변수의 타입은 인스턴스의 타입과 일치해야 함
▶ Tv클래스의 인스턴스 t1과 t2를 생성 후, 인스턴스 t1의 멤버변수인 channel의 값을 변경함