(1) JVM의 메모리 구조
메서드 영역
힙
호출스택
public static void main(String[] args){
System.out.println();
}
(1)~(2) : JVM에 의해서 main메서드가 호출됨으로서 프로그램이 시작된다. 이때, 호출스택에는 main메서드를 위한 메모리공간이 할당되고 main메서드의 코드가 수행되기 시작한다.(2) 클래스(class)
객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다.
객체의 상태를 나타내는 필드와 객체의 행동을 나타내는 메소드로 구성이 된다.
필드 : 클래스에 포함된 변수
메소드 : 어떠한 특정 작업을 수행하기 위한 명령문의 집합
int radius; // 필드
String color;
double calcArea(){ // 메소드
return 3.14*radius*radius;
}
(3) 인스턴스(instance)
자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야함
객체를 선언하는 과정을 인스턴스 화라고 하고 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스라고 한다. 즉, 인스턴스 = 객체
class Circle{
int radius;
String color;
double calcArea(){
return 3.14*radius*radius;
}
}
public class CircleTest {
public static void main(String[] args) {
Circle obj; // 클래스의 객체를 참조하기 위한 참조변수를 선언
obj = new Circle(); // 객체를 생성후, 객체의 참조변수에 저장
Circle obj2 = new Circle(); // 같은 클래스를 호출
obj.radius = 100; // 객체 필드 접근
obj.color = "blue";
obj2.radius = 200;
obj2.color = "green";
double area = obj.calcArea(); // 객체 메소드 접근
System.out.println("원의 면적 =" +area);
}
}
코드분석
- Circle obj;
- Circle클래스 타입의 참조변수 obj를 선언한다. 메모리에 참조변수 obj르 위한 공간이 마련된다. 아직 인스턴스가 생성되지 않았으므로 참조변수로 아무것도 할 수 없다.
- obj = new Circle();
- 연산자 new에 의해 Circle클래스의 인스턴스가 메모리의 빈 공간에 생성된다.
- 이처럼 메모리가 생기고 객체를 생성하여 객체 메소드에 값을 입력하게 되면 메모리공간에 값이 들어가게 된다.
- Circle ojb2 = new Circle();
- 같은 클래스로부터 생성되었을지라도 각 인스턴스의 속성은 서로 다른 값을 유지할 수 있다.
- obj2 = obj;
- obj는 참조변수이므로, 인스턴스의 주소를 저장하고 있다 즉, obj2가 가지고 있던 값은 잃어버리게 되고 obj에 저장되어 있던 값이 obj2에 저장된다. 그렇게 되면 obj2역시 obj가 참조하고 있던 인스턴스를 같이 참조하게 되고, obj2가 원래 참조하고 있던 인스턴스는 더 이상 사용할 수 없게 된다.
(4) 객체 배열
TV tv1, tv2, tv3; => TV[] tvArr = new TV[3];