Computer Language/Java

[파헤치기] java 객체 생성문의 개념

짠백이 2018. 11. 11. 23:49
반응형


오늘은 java 객체 생성문에 대해서 알아보겠습니다. 사실 객체 생성문은 java이외의 객체 지향언어에 자주 


사용되는 개념이기 때문에 잘 이해하면 다른 객체 지향언어를 학습하실때도 도움이 될것이라고 생각합니다.


객체 생성의 개념과 더불어 예제소스를 통해서 메모리의 구성까지 확인해보도록 하겠습니다.





1. 클래스(class)와 객체(object)의 개념



class는 직역하면 '학급' , '등급' 의 의미인데 조금 추상화를 시키면 '그룹'의 의미를 내포하고 있습니다.


그렇다면 어떤것으로 구성된 그룹일까요?


바로 '변수(variable)' 와 '메소드(method)' 입니다. 


그리고 클래스는 실체가 아닌 '허상'이기 때문에 사용 할 수 없습니다. 프로그램이 클래스를 사용하기 위해서는 


메모리에 할당해야하는데 이를 객체(object)라고 합니다. 


즉, 객체는 클래스라는 허상의 설계도로 구현된 '실체'입니다.



(* 객체를 생성하는것 이외에도 static이라는 접근제어자를 통하여 '특정 변수 또는 메소드'를 메모리에 할당하여 사용 할 수 도 있습니다아래 URL을 참고하시면 static의 간략한 설명을 확인 하실 수 있습니다.)

    [파헤치기] public static void main(String[] args) 의 이해 : http://solt.tistory.com/21?category=794001








2. 객체 생성문의 구성


객체 생성문은 다음과 같은 형식으로 이루어져있습니다. 


컴파일러에 의하여 해석되는 순서대로 설명하겠습니다.






2.1 객체 생성자


객체 생성자 (=method)가 클래스(Print)라는 설계도로 객체를 생성하고 메모리에 할당합니다. 


그리고 사용자로부터 인자를 전달받거나 객체 생성자에 미리 정의된 로직으로 객체를 초기화 시킵니다. 




2.2 new 연산자   


객체 생성자에 의해 생성된 객체의 주소값을 hash code 형식으로 반환하는 연산자입니다.




2.3 참조형 변수 (reference type variable)


객체의 주소값인 hash code를 저장하는 참조형 변수입니다. 해당 참조형 변수는 객체에 접근하기 위한 


용도로 사용합니다.





3. 예제 소스와 메모리 구성


[예제 소스]





[ console 출력 결과 ]





예제소스로 저의 tistory 블로그와 github URL을 출력하는 Print클래스를 정의하였고 해당 예제소스를 실행시키면


자바 가상머신 (JVM)에 의해서 main() method가 가장 먼저 실행이되고 객체 생성문이 실행됩니다. (17번 줄)


위에서 말씀 드린것처럼 객체 생성문은 객체 생성자가 가장 먼저 실행되기 때문에 객체를 메모리에 할당 


및 초기화를 합니다. 예제 소스에는 전달인자는 없고 객체 생성자인 Print()에 정의된 초기화 로직(6-8번 줄)으로 


인해 gitbub라는 참조형 변수에 "github : https://github.com/kwangho-park" 라는 문자열이 저장됩니다. (4번 줄)



(*사실 String 또한 클래스이기 때문에 문자열이 저장되는 것이 아니라 주소값(=hashcode)가 저장되는것 입니다만 이번 포스팅에서는 객체생성문에 집중하기 위해 문자열이 저장된다고 이해해도 무리가 없을 것 이라고 생각합니다.)



그리고 new연산자가 생성된 객체의 주소값 (=hashcode)을 반환하고 참조형 변수 'a' 에 할당합니다.






이제 블로그와 github의 URL을 출력하기 위해 생성된 객체에 접근해보겠습니다.



19번째 줄에서 참조형 변수 a를 호출하고 반환되는 주소값으로 메모리에 할당된 Print 객체에 접근합니다. 

그리고 그 객체에 정의된 blog() 메소드를 호출하여 내부에 정의된 블로그 URL을 출력하는 로직을 실행 후 

메소드를 종료합니다. (9-11번째 줄)



다음은 20번째 줄에서는 19번째 줄과 같은 방법으로 Print객체에 접근합니다. 그리고 그 객체에 정의된 

참조형 변수를 호출하여 github URL을 반환하고 System의 println()메소드로 출력합니다.



마지막으로 21번째 줄은 생성된 Print객체의 주소값을 확인하기 위하여 참조형 변수를 호출하였으며 

JVM에 의해서 정의된 'Print@7852e922' 이라는 hashcode를 출력합니다.



* 향후 시간을 더 투자하여 메모리의 구성에 관하여 추가로 작성 할 예정입니다.






최대한 정확한 정보를 공유하고자 항상 신중하게 포스팅을 하고 있지만, 

내용에 개선이 필요한 부분이 있을 수 도 있습니다.

혹시나 추가적인 보완이 필요하다고 판단되는 부분이 있다면 댓글로 조언해주세요. 

참고하여 수정해놓겠습니다.



* 해당 포스팅이 도움이되셨다면 공감과 댓글 부탁드릴께요 ㅎㅎ




반응형