클래스를 사용해서 학생이라는 개념을 만들고, 각각의 학생 별로 본인의 이름, 나이, 성적을 관리해보자.
package class1;
public class Student {
String name;
int age;
int grade;
}
class
키워드를 사용해서 학생 클래스(student
)를 정의한다. 학생 클래스는 내부에 이름(name
), 나이(age
), 성적(grade
) 변수를 가진다.
이렇게 클래스의 정의한 변수들을 멤버 변수, 또는 필드라 한다.
클래스는 관례상 대문자로 시작하고 낙타 표기법을 사용한다.
예) : Student
, User
, MemberService
package class1;
public class ClassStart3 {
public static void main(String[] args) {
Student student1;
student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
System.out.println("이름: " + student1.name + " 나이: " + student1.age + " 성적: " + student1.grade);
System.out.println("이름: " + student2.name + " 나이: " + student2.age + " 성적: " + student2.grade);
}
}
int
라고 하면 정수 타입, String
이라고 하면 문자 타입이다.int
, String
과 같은 타입을 직접 만들 수 있다.클래스는 설계도이고, 이 설계도를 기반으로 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라 한다. 둘 다 같은 의미로 사용된다.
여기서는 학생(Student
) 클래스를 기반으로 학생1(student1
), 학생2(student2
) 객체 또는 인스턴스를 만들었다.
Student student1
Student
타입을 받을 수 있는 변수를 선언한다.int
는 정수를, String
은 문자를 담을 수 있듯이 Student
는 Student
타입의 객체(인스턴스)를 받을 수 있다.student1 = new Student();
코드를 나누어 분석해보자.
new Student()
: new
는 새로 생성한다는 뜻이다. new Student()
는 Student
클래스 정보를 기반으로 새로운 객체를 생성하라는 뜻이다. 이렇게 하면 메모리에 실제 Student
객체(인스턴스)를 생성한다.new 클래스명()
을 사용하면 된다.Student
클래스는 String name
, int age
, int grade
멤버 변수를 가지고 있다. 이 변수를 사용하는데 필요한 메모리 공간도 함께 확보한다.x001
)을 반환한다.x001
이라고 표현한 것이 참조값이다. (실제로 x001
처럼 표현되는 것은 아니고 이해를 돕기 위한 예시임)new
키워드를 통해 객체가 생성되고 나면 참조값을 반환한다. 앞서 선언한 변수인 Student student1
에 생성된 객체의 참조값(x001
)을 보관한다.Student student1
변수는 이제 메모리에 존재하는 실제 Student
객체(인스턴스)의 참조값을 가지고 있다.student1
변수는 방금 만든 객체에 접근할 수 있는 참조값을 가지고 있다. 따라서 이 변수를 통해서 객체를 접근(참조)할 수 있다. 쉽게 이야기해서 student1
변수를 통해 메모리에 있는 실제 객체를 접근하고 사용할 수 있다.객체를 생성하는 new Student()
코드 자체에는 아무런 이름이 없다. 이 코드는 단순히 Student
클래스를 기반으로 메모리에 실제 객체를 만드는 것이다. 따라서 생성한 객체에 접근할 수 있는 방법이 필요하다. 이런 이유로 객체를 생성할 때 반환되는 참조값을 어딘가에 보관해두어야 한다.
앞서 Student student1
변수에 참조값(x001
)을 저장해두었으므로 저장한 참조값(x001
)을 통해서 실제 메모리에 존재하는 객체에 접근할 수 있다.
Student student1 = new Student(); // 1. Student 객체 생성
Student student1 = x001; // 2. new Student()의 결과로 x001 참조값 반환
student1 = x001; // 3. 최종 결과
이후에 학생2(student2
)까지 생성하면 다음과 같이 Student
객체(인스턴스)가 메모리에 2개 생성된다. 각각 참조값이 다르므로 서로 구분할 수 있다.
참조값을 확인하고 싶다면 다음과 같이 객체를 담고 있는 변수를 출력해보면 된다.
System.out.println(student1);
System.out.println(student2);
@앞은 패키지 + 클래스 정보를 뜻한다. @뒤에 16진수는 참조값을 뜻한다.