[JAVA] 클래스와 객체
[JAVA] 클래스와 객체
클래스는 개념을 만드는 것.
변수를 사용해 학생의 이름, 나이, 성적을 출력해 보자
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
String student1Name = "학생1";
int student1Age = 15;
int student1Grade = 90;
String student2Name = "학생2";
int student2Age = 16;
int student2Grade = 80;
System.out.println("이름: " + student1Name + "나이: " + student1Age + "성적: " + student1Grade);
System.out.println("이름: " + student2Name + "나이: " + student2Age + "성적: " + student2Grade);
}
변수를 사용하면 학생이 늘어날 때 마다 변수를 추가로 선언해야 하고 추가해줘야 하는 번거로움이 있다.
배열을 사용해 보자
1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
String[] studentNames = {"학생1", "학생2", "학생3", "학생4"};
int[] studentAge = {15,16,17,18};
int[] studentGrade = {90,80,70,60};
for(int i = 0; i < studentNames.length; i++) {
System.out.println("이름: " + studentNames[i] + "나이 : " + studentAge[i] + "성적: " + studentGrade[i]);
}
}
배열을 사용하면 학생이 늘어나도 변수를 추가하지 않고 배열에 학생 데이터만 추가해주면 된다! 하지만 배열을 사용하면 학생이 1000명이라 생각했을때 학생567의 데이터를 정확하게 찾아야 한다. 이렇게 생각하면 실수할 가능성이 매우 높기 때문에 클래스를 사용해야 한다!
사람이 관리하기 좋은 방식은 학생이라는 개념을 하나로 묶는 것이다.
클래스 사용
1
2
3
4
5
public class Student {
String name;
int age;
int grade;
}
학생이라는 클래스는 이름, 나이, 성적 변수를 가진다. 이렇게 클래스에 정의한 변수들을 맴버 변수, 필드 라 한다.
학생 클래스를 사용하는 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) {
Student student1;
student1 = new Student(); //객체 또는 인스턴스 student1의 메모리를 확보
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);
System.out.println(student1);
System.out.println(student2);
}
1. 변수 선언
Student student1; //Student 타입을 받을 수 있는 변수 선언 하고 Student 타입의 객체(인스턴스)를 받을 수 있다. int는 정수,String은 문자를 담을 수 있는 것과 같다.
2. 객체 생성
- 객체를 사용하려면 클래스(붕어빵틀)을 기반으로 객체(인스턴스)를 생성해야 한다.
- new Student() ← new는 새로 생성한다는 뜻 즉 Student 클래스 정보를 기반으로 새로운 객체를 생성하라는 뜻. 이렇게 하면 메모리에 Student 객체(인스턴스)가 생성됨.
- Student 클래스는 name, age, grade 라는 맴버변수를 가지고 있다. 이 변수를 사용하는데 필요한 메모리 공간도 함께 확보된다.
3. 참조값 보관
- 자바는 객체를 생성하면 메모리 어딘가 이 객체에 접근할 수 있는 참조값(주소)(x001) 를 반환
- new 키워드를 통해 객체가 생성되고 참조값을 반환함. 앞서 선언한 변수인 Student student1에 생성된 객체의 참조값(x001)을 보관
- Student student1 변수는 메모리에 존재하는 실제 Student 객체(인스턴스)의 참조값을 가지고 있다.
- student1 변수는 방금 만든 객체의 참조값을 가지고 있음. student1 변수를 통해 메모리에 있는 실제 객체를 접근/사용 할 수 있음
1
2
3
Student student1 = new Student(); //1. Student 객체 생성
Student student1 = x001; //2. new Student()의 결과로 x001 참조값 반환
student1 = x001; //3. 최종 결과
student2 까지 생성하면 Student 객체(인스턴스) 가 메모리에 2개 생성되어 구분하여 사용할 수 있음!
- . 키워드를 사용하여 student 변수가 가지고 있는 참조값을 통해 실제 객체에 접근
- x001 객체가 있는 곳의 name 맴버 변수에 학생1 데이터 저장
배열에 참조값 대입
변수에는 인스턴스 자체가 들어 있는게 아니라 인스턴스의 위치값을 가르키는 참조값이 들어있어 “=” 할 때 인스턴스가 복사되는게 아니라 참조값만 복사된다!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
Student student1 = new Student(); //객체 또는 인스턴스 student1의 메모리를 확보
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
Student[] students = {student1, student2}; //배열에 참조값 대입
//향상된 for문 사용
for(Student s : students) {
System.out.println("이름: " + s.name + "나이: " + s.age + "성적: " + s.grade);
}
}
📝 기억해야 할 것
- 클래스: 붕어빵 틀
- 객체(인스턴스): 붕어빵 틀에서 찍어낸 붕어빵
- 자바의 대입: 변수에 들어있는 값을 복사
- 참조값: 변수에는 참조값을 가지고 있음. 이 참조값으로 메모리에 있는 객체에 접근해 사용하는 것!
- 기본형은 직접 사용하는 값을 변수에 담음, 참조형은 객체의 위치(참조,주소) 저장
출처: 김영한의 실전 자바 - 기본편
This post is licensed under
CC BY 4.0
by the author.