객체지향언어인 자바의 메인! 클래스와 인스턴스의 용어를 정리해보자.
클래스
- 멤버 변수: 클래스에서 선언된 변수
- 메서드: 클래스 내 함수
클래스 내에 선언된 변수를 멤버변수, 함수를 메서드라고 칭한다.
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 |
댓글