- 실전자바 강의를 기반으로 복습한 내용입니다.
- 실전자바는 기초문법 복습과는 달리 적은 내용으로 심도있게 공부하려고 합니다.
1. 클래스가 필요한 이유
- 자바는 클래스와 객체로 구성되어 있음.
- 클래스가 왜 필요한지 코드를 살펴보자.
package class1;
public class ClassStart1 {
public static void main(String[] args) {
String name1 = "학생1";
int age1 = 15;
int grade1 = 90;
String name2 = "학생2";
int age2 = 16;
int grade2 = 80;
System.out.println("이름: " + name1 + " 나이: " + age1 + " 성적: " + grade1);
System.out.println("이름: " + name2 + " 나이: " + age2 + " 성적: " + grade2);
}
}
- 위 코드의 문제점은 학생수가 늘어날때마다 수작업을 해야 하기 때문에 코드 유지보수하기에 번거로움이 있다.
- 따라서, 학생 수가 늘어날 때 우리는 배열을 사용함으로써 학생정보를 빠르게 받아볼 수 있다.
package class1;
public class ClassStart2 {
public static void main(String[] args) {
String[] studentNames = {"학생1","학생3","학생4","학생5"};
int[] age = {15,17,10,16};
int[] grade = {90, 100, 80, 50};
for(int i=0; i< studentNames.length; i++) {
System.out.println("이름: " + studentNames[i] + " 나이: " + age[i] + " 성적: " + grade[i]);
}
}
}
- 하지만, 이것도 문제점이 있다. 예를 들면, 학생2의 데이터를 삭제하려고 하면 이름, 나이, 성적 각각의 요소에 맞는 데이터를 삭제해주어야 한다.
- 이러한 문제점들을 해결하기 위해서 이름, 나이, 성적이 들어있는 클래스를 만들어야 한다.
2. 클래스 도입
- 학생정보 클래스는 다음과 같다.
- 아직 접근 제어자를 배우지 않았기에 적용하지 않았다.
package class1;
public class Student {
String name;
int age;
int grade;
}
- 클래스에 정의된 변수들을 멤버 변수 또는 필드라고 한다.
- 멤버 변수: 특정 클래스에 소속된 멤버
- 필드: 데이터 항목을 가리키는 용어
package class1;
public class ClassStart3 {
public static void main(String[] args) {
Student 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);
System.out.println(student2);
System.out.println("이름: " + student1.name + " 나이: " + student1.age + " 성적: " + student1.grade);
System.out.println("이름: " + student2.name + " 나이: " + student2.age + " 성적: " + student2.grade);
}
}
- 기본 자료형의 클래스는 직접 int, String 등으로 선언이 가능하다.
- 하지만, 사용자가 정의한 타입을 만드려고 하면 클래스가 필요하다.
- 클래스를 사용해서 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라고 한다.
(1) 코드 분석
Student student1 = new Student();
- 사용자가 정의한 Student클래스에 student라는 변수를 선언하였다.
- new Student( )는 student 클래스를 생성하면서 클래스의 참조값이 부여된다. 그 참조값이 student1 변수에 보관한다.
- student2도 student1과 유사하다.
(2) 참조값을 변수에 보관하는 이유
- 생성한 객체를 접근하려고 할 때 참조값을 변수에 보관해주어야 실제 메모리에 존재하는 객체에 접근할 수 있다.