이번에는 학생을 추상화 시켜보자 즉, 설계도를 만들어보자 즉, 클래스를 만들어보자.
1) Student 클래스 만들고 맴버변수 및 맴버메소드 만들기
2) 다른 java 파일에서 실행시켜보자
▲Student형의 인스턴스변수 student1을 선언과 동시에 객체화(메모리 할당)시켰다.
이후 student1이 참조하고 있는 주소값을 출력해보자.
▲ 인스턴스 변수 선언과 객체화 모두 잘 된 것을 볼 수 있다.
▼이제 여기서 student1이 상속받은 Student클래스의 맴버메소드를 사용해보자.
출력하게 되면 아래와 같은 결과값이 출력된다.
▲ NullPointerException 이라는 Run-time error가 발생하는데 왜그럴까??
바로 .printStudent를 호출하면 우리가 정한 맴버메소드를 보다시피 person.printPerson이 실행되는 것을 볼 수 있다.
이 말은 'person이라는 Person형 변수에서 참조하고 있는 메모리의 데이터값을가지고 printPerson을 호출하라' 라는 의미인데 우리가 변수 person은 Person형으로 선언은 하였지만 객체화 즉, 메모리 할당을 하지 않았기 때문에 참조하고 있는 주소값없이 자동초기화된 null이 저장되어 있다. 때문에 참조할 메모리가 없기 때문에 할 수 없다고 error가 생기는 것이다.
그렇다면 참조하고 있는 주소값이 없는 상태를 해결하기 위해서는 어떻게 해야할까??
해결방법 1)
▲ student1에 Person형의 메모리를 생성해서 주소를 넣어주는 방법
▲ student1에 Person형의 메모리를 생성해서 주소를 넣어주면 위와 같은 형태가 될 것이다.
이제 초기화를 하고 결과를 출력해보자
▲ student1이 참조하고 있는 Student형 메모리의 person변수가 참조하고 있는 Person형 메모리의 name,age,weight를 초기화 한다.
▲ printPerson이 초기화한 값으로 잘 출력되며 학번은 초기화 하지않았으므로 여전히 Stirng형 자동초기화 값인null이다
해결방법2)
▲ 이미 Person형으로 객체화(메모리 할당)되어있던 another의 주소값을 똑같이 대입하여 공유해주는 방법이다.
▲ 같은 주소값을 가지고 있기때문에 똑같은 주소값이 출력된다. 이말인즉슨, 저 주소의 메모리에 있는 데이터값을 변경하면 person과 another가 참조하는 데이터 값이 똑같이 바뀐다는 것이다. 하나의 메모리를 둘이 공유중이다.
▲ 초기화하고 printPerson을 호출해보면 NullPointerException error없이 잘 출력되는 것을 볼 수 있다.
'Java' 카테고리의 다른 글
[Java]접근지정자(Access Modifier) (0) | 2022.03.07 |
---|---|
[Java]Class - part.3 (0) | 2022.03.05 |
[Java]Class - part.1 (0) | 2022.03.04 |
[Java]method없이 가위바위보게임 만들기 (0) | 2022.03.04 |
[Java]Call By Value & Call By Reference (0) | 2022.03.03 |