Programming

; develop a program

Back-End/Java

[Java] 클래스와 인스턴스

Clloud_ 2023. 1. 31. 19:28
반응형

이번 포스팅에서는 자바(Java)에서 클래스와 인스턴스에 대하여 공부를 해보고자 한다.

 


클래스 사용과 main( ) 함수

클래스를 사용하여 프로그램을 실행하려면 먼저 main( ) 함수를 알아야 한다.

main( ) 함수는 자바 가상 머신(Java Virtual Machine; JVM)이 프로그램을 시작하기 위해 호출하는 함수이다.

클래스 내부에 만들지만, 클래스의 메서드는 아니다.

 

main( ) 함수에서 클래스를 사용하는 방법

  1. 생성한 클래스 내부에 main( ) 함수를 만드는 것
  2. 외부에 테스트용 클래스를 만들어 사용하는 것

 

클래스 내부에 main( ) 함수를 만드는 경우

  • 클래스 내부에 main( ) 함수를 만들면 이 클래스가 프로그램의 시작 클래스가 된다.
  • 클래스가 제대로 수행되는지 알아보기 위해 클래스 내부에 main( ) 함수를 만들고 직접 실행할 수 있다.
  • 하지만 이렇게 클래스 테스트를 수행하면 모든 클래스가 main( ) 함수를 포함해야 한다.

 

main( ) 함수를 포함한 실행 클래스를 따로 만드는 경우

  • 클래스를 실행하려면 main( ) 함수가 있어야 한다.
  • 클래스와 같은 패키지에 java파일 생성 시 public static void main(String[ ] args) 항목을 체크해 준다.
  • [Finish]를 누르고 //TODO 주석을 지운 후 실행하려는 코드를 작성하면 된다.

 


new 예약어로 클래스 생성하기

클래스를 사용하려면 먼저 클래스를 생성해야 한다.

 

클래스를 생성하는 코드

클래스형 변수 이름 = new 생성자;
  • 자바에서 클래스 생성 시 new 예약어를 사용하고 이어서 생성자를 입력한다.
  • 클래스 자료형 변수를 선언하고 new 예약어로 생성자로 호출하여 대입하면 새로운 클래스가 생성된다.

 

클래스가 생성된다는 것은 클래스를 실제 사용할 수 있도록 메모리 공간(힙 메모리)을 할당받는다는 듯이다.

이렇게 실제로 사용할 수 있도록 생성된 클래스를 '인스턴스'라고 한다.

그리고 인스턴스를 가리키는 클래스형 변수를 '참조 변수'라고 한다.

 

Student studentHong = new Student();
위 코드는 Student 클래스 자료형으로 studentHong 변수를 선언하고 new Student( );로 Student 클래스를 생성하여 studentHong에 대입한다는 뜻이다.
이때 studentHong을 참조 변수라고 하고, 이 변수가 생성된 인스턴스를 가리킨다.

 


인스턴스와 참조변수

객체란 '의사나 행위가 미치는 대상'이며 이를 코드로 구현한 것이 클래스이다.

인스턴스란 클래스가 메모리 공간에 생성된 상태라고 할 수 있다.

또한 생성된 클래스의 인스턴스를 객체라고도 한다.

 

  • 클래스의 생성자를 호출하면 인스턴스가 만들어진다.
  • 인스턴스는 여러 개 생성할 수 있는데, 클래스는 하나지만, 이 클래스로부터 여러 개의 각각 다른 인스턴스를 생성할 수 있다.

 

참조 변수 사용하기

참조 변수를 사용하면 인스턴스의 멤버 변수와 메서드를 참조하여 사용할 수 있는데 이때 도트(.) 연산자를 사용한다.

 

 

예시

studentHong 참조 변수로 studentName 멤버 변수에 이름을 저장하고 getStudentName( ) 메서드를 사용하는 코드

studentHong.studentName = "홍길동";			//멤버 변수 사용
System.out.println(studentHong.getStudentName());	//메서드 사용

 


인스턴스와 힙 메모리

만약 new Student( )를 선언하면 Student 하나가 생성되는데 각 Student는 studentID, studentName 등의 멤버 변수를 가지고 있다.

이들 변수를 저장할 공간이 있어야 하는데, 이때 사용하는 메모리가 힙 메모리(heap memory)이다.

클래스 생성자를 하나 호출하면 인스턴스가 힙 메모리에 생성되는 것이다.

 

Student studentHong = new Student();

위와 같이 생성된 클래스를 studentHong 변수에 대입하면 인스턴스가 저장된 메모리를 studentHong 변수가 가리킨다.

그림으로 표현하면 다음과 같다.

 

 

Student student1 = new Student( );
Student student2 = new Student( );

위와 같이 두 개의 인스턴스를 생성한 경우이다.

클래스가 생성될 때마다 인스턴스는 다른 메모리 공간을 차지한다.

다시 말하면 멤버 변수를 저장하는 공간이 매번 따로 생긴다는 의미이다.

이런 이유 때문에 클래스에 선언한 함수를 다른 말로 '인스턴스 변수'라고도 부른다.

 

 

참조 변수와 참조 값

차조 변수는 힙 메모리에 생성된 인스턴스를 가리킨다.

힙 메모리에 생성된 인스턴스의 메모리 주소는 참조 변수에 저장된다.

 

참조 변수 값을 출력하게 되면 '클래스 이름@주소 값'이 출력된다.

여기에 나오는 주소 값은 다른 말로 '해시 코드(hash code) 값'이라고도 한다.

이 값은 자바 가상 머신에서 객체가 생성되었을 때 생성된 객체에 할당하는 가상 주소 값이다.

 


객체 지향 프로그램 관점에서 용어 정리

용어 설명
객체 객체 지향 프로그램의 대상, 생성된 인스턴스
클래스 객체를 프로그래밍하기 위해 코드로 만든 상태
인스턴스 클래스가 메모리에 생성된 상태
멤버 변수 클래스의 속성, 특성
메서드 멤버 변수를 이용하여 클래스의 기능을 구현
참조 변수 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 생성된 인스턴스의 메모리 주소 값

 


반응형

'Back-End > Java' 카테고리의 다른 글

[Java] 참조 자료형  (0) 2023.02.01
[Java] 생성자(Constructor)  (0) 2023.02.01
[Java] 메서드(Method)  (0) 2023.01.31
[Java] 객체 지향 프로그래밍과 클래스  (0) 2023.01.30
[Java] 반복문  (0) 2023.01.29