[Java] 07. 클래스, 객체, 인스턴스
1
2
3
4
5
public class Main
public static void main(String[] args) {
// 코드 작성
}
}
만약 ‘Main’ 클래스를 생성할 경우 위처럼 사용하게 될 것입니다
그러면 클래스를 알아보고, 뒤이어 ‘객체’와 ‘인스턴스’도 간단하게 이해해보도록 합시다
1. 클래스 (Class) / 객체 (Object) / 인스턴스 (Instance)
- 클래스 : 붕어빵 틀
- 객체 : 붕어빵
- 인스턴스 : 슈크림 붕어빵, 팥 붕어빵 등
가장 자주 사용되는 비유는 붕어빵입니다
일단 대충은 무슨 느낌인지 알기 쉬우니 이렇게만 보고 본론으로 들어갑시다
1-1. 클래스 (Class)
저희가 위 예시에서 ‘Main’으로 만든 클래스같은거로 이해하면 쉬울 것 같습니다
‘붕어빵 틀’처럼, 변수와 메서드 등 코드를 작성해서 만들면 됩니다
1-2. 객체 (Object)
슈크림 붕어빵이든 팥 붕어빵이든 어쨌든 큰 틀로 바라보면 ‘붕어빵’이라고 할 수 있습니다
‘사람’으로 예를 들면 마치 철수와 영희 등 누군가를 지목해도 사람이라는 범주에 드는 것 처럼요
1-3. 인스턴스 (Instance)
그러면 큰 범주에 들어가는 붕어빵 또는 사람 중에서 딱 무언가를 지목하면 ‘인스턴스’라고 할 수 있겠습니다
팥을 넣은 붕어빵, 이름이 철수인 사람같이 말이죠
2. Java에서 이해하기
이렇게 예시로 느낌을 이해하기 쉬우니 이번에는 코드를 보도록 합시다
1
2
3
4
5
6
7
8
9
10
// Person.class
public class Person { /* Person이라는 '클래스' */
public String name;
public int age;
public String email;
public void print() {
System.out.println("안녕하세요, 저는 "+name+"이고 나이는 "+age+"살 입니다.");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Main.class
public class Main {
public static void main(String[] args) {
Person p1, p2; /* p1, p2 : '객체', 변수처럼 선언 */
p1 = new Person(); /* p1에 새로운 사람의 '인스턴스' 주입 */
p1.name = "철수";
p1.age = 21;
p1.email = "ss@java.class";
p1.print();
p2 = new Person(); /* p2에 새로운 사람의 '인스턴스' 주입 */
p2.name = "영희";
p2.age = 21;
p2.email = "hh@java.class";
p2.print();
}
}
위 예시의 ‘Person’ 객체의 변수는 ‘public’으로 작성이 되어있지만, 원래 캡슐화 그리고 정보 은닉 등을 위해서는 ‘private’로 지정한 뒤, Getter과 Setter라는 것을 사용해야 합니다
이 내용은 다음 시간의 ‘접근 제한자’에서 알아보도록 합시다
- Person이라는 클래스를 만들어줍니다
- p1, p2라는 Person 객체를 선언합니다
- p1, p2에 각각
new Person()으로 새로운 인스턴스를 주입합니다
2, 3을 합쳐 ‘Person p = new Person();’으로 작성할 수 있습니다
3. 객체가 메모리에서 동작하는 구조
- metaspace : 클래스의 정보가 들어가는 공간
- Person의 변수 또는 메서드 정보 등, JVM이 알아야 할 class의 모든 정보를 포함
- stack : 메서드가 실행되는 공간
- 메서드가 호출될 때마다 새로운 ‘스택’ 프레임이 위로 쌓이는 구조
- 스레드별로 별도 관리
- heap : 객체가 저장되는 공간
- 크기가 바뀔 수 있는 참조형 변수(객체)들 저장하는 공간
- 가비지 컬렉터로 정리됨
- 상수도 heap에 저장
스택은 자료구조의 ‘stack’을 알아두면 이해하기 쉽습니다
처음 JVM 글을 봤던 것 처럼 이해가 어려울 수 있지만 Java를 배우고 다시 내용을 복습하면서 이해하면 좋을 것 같습니다
참고하면 좋은 글 : https://h-yeon00.tistory.com/16