학교 수업으로 안드로이드 스튜디오 수업을 듣는데 자바언어 문법을 몰라서 코드짜는데 자꾸 헷갈린다. 그래서 자바 클래스를 한번 짚고 넘어갈려고 한다.
쉽게 학생을 예를 들어보자
객체, 클래스, 인스턴스를 설명하는 그림은 이게 제일 좋은거 같다.
학생을 정의하기 위해서는 클래스가 필요하다.
클래스는 속성,기능 총 2가지 특징을 지니는데 속성을 멤버변수, 기능을 멤버함수(메서드)라고 한다.
그리고 이런 클래스가 메모리 공간에 생성된 상태를 인스턴스라고 한다.
public class Student{ //클래스
int student ID; //멤버변수
String studentName;
public String getStudentName(){ //멤버함수(메서드)
return stdentName;
}
}
이렇게 클래스를 멤버변수와 멤버함수를 포함해서 만든다.
그런 다음 new 예약어를 통해 클래스생성(인스턴스)을 함.
클래스형 변수이름 = new 생성자; //로 클래스를 생성한다. (클래스가 생성되서 메모리 공간을 사용하므로 이렇게 생성된 클래스는 "인스턴스"이다.)
ex) Student studentAhn = new Student( );
이것을 직접 설명하면 new Student();로 Student 클래스를 생성하여 studentAhn에 대입한다는 말이다. 여기서 변수이름과 참조변수는 같은 말이 되고
stdentAhn.studentName = "공성진";
System.out.println(studentAhn.getStudentName()); 이런식으로
참조변수.멤버변수;
참조변수.멤버함수(메서드); 로 사용할 수 있다.
마지막으로 메모리는 다음과 같이 된다.
Student studentAhn = new Student( );
위와 같이 생성된 클래스를 studentAhn 변수에 대입하면, 인스턴스가 저장된 메모리를 studentAhn 변수가 가르킨다. studentAhn 변수는 지역변수이므로 스택 메모리에 저장되고 인스턴스인 Student 클래스의 멤버변수,멤버함수는 힙 메모리에 생성된다. 여기서 변수이름을 참조변수라고 햇던 의문이 풀린다. 변수 이름인 studentAhn이 힙 메모리에 생성된 인스턴스를 가르키므로 참조변수라고 한다. 실제로 참조변수에는 이를 인스턴스를 가르키는 메모리 주소값이 들어가고 이 주소값을 참조값이라고 한다.
추가적으로 힙 메모리는 동적 메모리 공간인데 c언어에서는 메모리를 할당하고 해제까지 직접해줘야 했지만 자바에서는 가비지 컬렉터가 자동으로 메모리를 해제해 준다. (자바 좋다)
또한, 클래스가 생성될 때마다 다른 메모리공간에 생기므로 멤버 변수가 저장하는 공간이 매번 바뀐다. 그래서 "인스턴스"라는 어울린다는 생각이 들었다.
클래스에 대해서 더 자세하게 공부할 예정이다. 적고보니 자바의 특징이 아니라 객체언어의 특징인거 같다;;
'STUDY > Java' 카테고리의 다른 글
이것이 자바다. CH 3 (0) | 2024.04.01 |
---|---|
이것이 자바다. CH 2 (0) | 2024.02.22 |
이것이 자바다. CH 1 (0) | 2024.01.04 |
자바의 기초 (0) | 2022.01.21 |
댓글