Class
어떠한 물체를 코드로 구현해 추상화시킨 개념.
Object
추상화시킨 개념인 Class가 구체적인 실체로 만들어진 것.
제 블로그에서 Java에 대한 글이 포스팅 될 예정입니다. Java는 대학생 시절에 공부한 이후로 따로 공부하지 않았기에 역량이 부족하다고 생각했습니다. Java 공화국이라고도 불리는 대한민국에서 Java의 비중은 무시할 수 없습니다. 미래에 Java가 계속 높은 비중을 차지할지 아니면 다른 언어가 높은 비중을 차지할지 모르겠지만, Java에 대한 기초적인 역량은 필수라고 생각하기에 다시 공부하기로 결심했습니다. Java 공부의 베이스로 "Java의 정석"이라는 유명한 책과 pdf를 참고했다는 점 알아주시기 바랍니다.
클래스와 객체
가장 첫 포스팅 주제는 클래스입니다. 앞에 다른 주제에 대한 챕터들이 여러개 있지만 객체지향개념의 필수적인 요소인 클래스부터 진행하겠습니다. "클래스"란 어떠한 물체 및 사물을 추상화한 개념입니다. 이렇게 설명하면 처음에는 와닿지 않기 때문에 구체적인 예시를 들겠습니다. 우리는 "동물"이라는 것이 무엇인지 알고있지만 눈에 보이지 않는 머릿 속에 있는 추상적인 개념입니다. 하지만 동물원에 직접 가서 어떠한 동물을 본다면 눈으로 직접 실체를 확인할 수 있고 특징들을 알 수 있는데, 이것이 "객체(Object)"입니다.
그렇다면 이제 Animal이라는 클래스를 직접 Java 코드로 작성해보겠습니다. 클래스는 변수와 메소드로 구성됩니다. 변수 중에서도 해당 클래스가 고유하게 가지는 변수를 클래스변수, 클래스의 객체마다 다른 값을 가질 수 있는 변수를 인스턴스변수라고 합니다. 그리고 마지막으로 메소드에서 선언되는 변수를 지역변수라고 합니다.
// Animal.java
public class Animal {
// Class Variable
static String species = "animal";
// Instance Variable
private String name="";
private int height;
private int age;
void set_height(int height){
this.height = height;
}
void set_age(int age){
this.age = age;
}
void set_name(String name){
this.name = name;
}
int get_height(){
return height;
}
int get_age(){
return age;
}
String get_name(){
return name;
}
public void print_info(){
System.out.println("Animal object : " + this);
System.out.println("Name : " + this.get_name());
System.out.println("Age : " + this.get_age());
System.out.println("Height : " + this.get_height());
System.out.println("================================================");
}
}
다음으로는 위에서 만든 클래스의 객체를 생성하는 Java 코드입니다. 객체를 생성하기 위해서는 new를 이용합니다. 생성된 이후로 객체는 클래스의 메소드를 사용할 수 있습니다. 아래의 코드는 Animal 클래스의 객체 2개를 만들고 각각의 인스턴스 변수 값을 설정 및 출력하는 내용입니다.
// Main.java
public class Main {
public static void main(String[] args) {
Animal tiger1 = new Animal();
tiger1.set_name("tiger1");
tiger1.set_age(7);
tiger1.set_height(100);
tiger1.print_info();
Animal tiger2 = new Animal();
tiger2.set_name("tiger2");
tiger2.set_age(10);
tiger2.set_height(200);
tiger2.print_info();
}
}
변수들의 생성 시기
우리는 위의 코드에서 각각의 변수들이 생성되는 시기를 알 필요가 있습니다. 변수의 종류에 따라 생성시기가 달라지는데 정리하면 아래의 표와 같습니다.
그리고 이 표를 기반으로 위의 코드들이 실행될 때 실제로 JVM에 올라가는 과정은 아래와 같습니다. Animal 클래스의 메소드들은 아래 그림에서 생략했습니다.
- 가장먼저 main 메소드가 있는 Main class가 Method Area에 올라가고 main 메소드가 바로 실행됩니다.
- 객체 tiger1을 생성하는 명령어가 실행됩니다. 객체가 생성되기 전 Animal class가 Method Area에 올라가면서 클래스변수도 함께 올라가고, 이후에 tiger1 객체가 생성됩니다. 이 때 인스턴스 변수 및 객체는 Heap에 저장되고, main 메소드의 지역변수로 생성된 tiger1은 참조변수로써 Heap에 있는 객체를 가리킵니다.
- 또 다른 객체 tiger2가 생성되면서 tiger1과 같은 과정이 수행되고, 클래스 변수는 tiger1과 tiger2가 공유합니다.
지금까지 클래스와 객체에 대한 정의를 설명했고 변수의 종류에 대해 정리했습니다. 그리고 클래스 및 객체를 생성하는 코드 수행에 따른 변수들의 생성 시기를 알아봤습니다. 다음 글에서는 클래스 생성자에 대한 글을 포스팅하겠습니다.
Reference
- Java의 정석 pdf
'Computer Science > Java' 카테고리의 다른 글
[Java] Java Class 및 Object #2 - 생성자와 변수 초기화 (0) | 2021.07.31 |
---|