본문 바로가기
프로그래밍 언어/java

[java] 클래스와 인스턴스

by m2162003 2021. 2. 22.

객체지향언어인 자바의 메인! 클래스와 인스턴스의 용어를 정리해보자.

 

클래스

- 멤버 변수: 클래스에서 선언된 변수

- 메서드: 클래스 내 함수

클래스 내에 선언된 변수를 멤버변수, 함수를 메서드라고 칭한다.

 

package chapter2;

public class Student {
	//멤버 변수
	public int number;
	public String name;
	public String address;
	
    //메서드
	public void showInfo() {
		System.out.println(number + " : " + name + " , " + address);
	}
}

 

++ 지역변수와의 차이점

함수 내에서 선언된 변수는 지역변수이다. 지역변수와 멤버변수는 저장되는 위치에 있어서 차이가 있다.

지역변수의 경우 스택에 저장된다.

반면에 멤버변수는 힙에 저장된다.

멤버 변수: 클래스 변수/인스턴스 변수

멤버 변수는 다시 두 가지로 나뉜다. 클래스에서 공통적으로 사용되는 클래스 변수와 각각의 인스턴스에서만 사용되는 인스턴스 변수이다.

클래스 변수는 아예 고정된 값이고 인스턴스 변수는 인스턴스마다 유동적으로 사용가능하다.

이 두 가지를 구분하는 방법은 static이다.

 

public class Student {
	//멤버 변수
	static int number = 2; // 클래스 변수
 	String name; // 인스턴스 변수
}

static을 붙이면 모든 인스턴스에서 값을 변경시킬 수 없다.

 

메인에서 클래스를 생성해보자.

package chapter2;

public class StudentTest {
	
	public static void main(String[] args) {
		Student student1 = new Student(); //인스턴스 생성
        //student1은 참조 변수
		student1.name = "jennie";
		student1.number = 1;
		student1.address = "Seoul";
		
		Student student2 = new Student();
		student2.name = "lisa";
		student2.number = 2;
		student2.address = "Busan";
		
		student1.showInfo();
		student2.showInfo();
		
		System.out.println(student1); //클래스 fullname@참조값
		System.out.println(student2);
	}
}

 

 

 

 

- 인스턴수: 클래스가 메모리에 생성된 상태

- 참조 변수: 메모리에 생성된 인스턴스를 가리키는 변수

- 참고값: 생성된 인스턴스의 메모리 주소 값

 

다른 함수에서 new를 통해 클래스를 선언하면 인스턴스가 생성된다.

인스턴스는 클래스가 메모리에 생성된 상태이다. 이 인스턴스는 클래스의 멤버변수들로 구성된다.

이 인스턴스는 메모리 어디에 위치할까?? 바로 힙이다. (앞에서 멤버변수는 힙에 저장된다고 했다.)

 

그러면 이 클래스를 가리키는 참조 변수 역할이 바로 student1 변수이다.

c/c++에선 &연산자와 포인터를 사용하여 복잡하게 표현하지만 자바는 알아서 해준다. 

 

그래서 참조 변수 student1, student2를 출력하면 클래스 fullname과 함께 주솟값이 나온다.

클래스 풀네임은 패키지 네임이 포함되어 있고 뒤에 @주솟값이 붙는다.

 

저 주소값위치에 인스턴스가 저장되어 있는 것이다!

그림으로 표현하면 아래와 같다.

 

'프로그래밍 언어 > java' 카테고리의 다른 글

[java] 접근 제어자, 정보 은닉  (0) 2021.02.24
[java] 클래스 생성자  (0) 2021.02.24
[java] Optional과 orElse 시리즈  (0) 2020.10.08
[java] extends vs implements  (0) 2020.10.02
[java] 자바 기본 문법 @override  (0) 2020.10.02

댓글