클래스가 필요한 이유
클래스가 왜 필요할까?
다음 예제를 보면서 클래스가 필요한 이유에 대해서 학습해보자.
학생1,2의 정보를 입력한 후 print 해보자.
public class ClassStart1 {
public static void main(String[] args) {
String student1Name = "학생1";
int student1Age = 15;
int stdent1Grade = 90;
String student2Name = "학생2";
int student2Age = 16;
int stdent2Grade = 80;
System.out.println("이름:" + student1Name + " 나이: " + student1Age + " 성적: " + stdent1Grade);
System.out.println("이름:" + student2Name + " 나이: " + student2Age + " 성적: " + stdent2Grade);
}
}
=> 학생이 2명 밖에 없으므로 각각 변수를 선언해서 사용했다. 이 코드의 문제점은 학생이 늘어날 때마다 추가로 변수를 선언해야 한다는 것이다.
이 문제를 어떻게 해결하면 좋을까?
배열을 활용한 문제해결
1. 배열로 학생, 나이, 성적을 선언해보자.
public class ClassStart2 {
public static void main(String[] args) {
String[] studentNames={"학생1","학생2"};
int[] studentAges={15, 16};
int[] studentGrade = {90, 80};
for(int i=0; i<studentNames.length; i++) {
System.out.println("이름:" + studentNames[i] + " 나이: " + studentAges[i] + " 성적: " + studentGrade[i] );
}
}
}
=> 코드변경을 최소화하는데는 성공했지만, 한 학생의 데이터가 세개의 배열에 나누어져 있다. 이 경우 변경에 유연하지 않다.
예를 들어 학생2를 삭제한다고 했을 때 모든 배열에서 같은 인덱스에 데이터를 삭제해야 한다.
이름, 나이, 성적을 각각 관리하는 것은 관리하기 좋은 방식이 아니다. 사람이 관리하기 좋은 방식은 학생이라는 개념을 하나로 묶는 것이다.
클래스 도입
이번엔 클래스를 도입해서 문제를 해결해 보자.
1. 클래스를 사용해서 학생이라는 개념을 만든 후 이름, 나이, 성적을 변수로 선언하자.
public class Student {
String name;
int age;
int grade;
}
이렇게 클래스에 정의한 변수를 멤버 변수 또는 필드라 한다.
2. 클래스를 사용해보자.
public static void main(String[] args) {
Student student1;
student1 = new Student(); // 학생을 실제 메모리에 만든다.
student1.name = "학생1";
student1.age = 14;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 15;
student2.grade = 80;
System.out.println("이름:" + student1.name + " 나이: " + student1.age + " 성적: " + student1.grade);
System.out.println("이름:" + student2.name + " 나이: " + student2.age + " 성적: " + student2.grade);
}
클래스와 사용자 정의 타입
타입은 데이터의 종류나 형태를 나타낸다. int는 숫자형, string은 정수형이다. 그러면, 학생이라는 개념은 하나의 타입으로 만들면 좋지 않을까?
사용자가 직접 정의하는 사용자 정의 타입을 만들려면 설계도가 필요하다. 이 설계도가 바로 클래스이다.
설계도인 클래스를 사용해서 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라 한다. 붕어빵을 만든다고 가정해보자. 붕어빵 틀만 있다고해서 붕어빵이 나오는 것은 아니다. 틀에서 붕어빵을 만들어내야 한다. 객체도 마찬가지이다. Student 클래스에서 new Student() 를 통해 객체를 생성해야 실제 메모리에 올라가게 된다.
정리해보면, 클래스는 설계도이다. 이 설계도를 기반으로 실제 메모리에 만들어진 실체를 객체 또는 인스턴스라 한다.
객체 생성
stuendent1 = new Student() 코드를 분석해보자.
- 객체를 사용하기 위해서는 설계도인 클래스를 기반으로 객체를 생성해야 된다.
- new 키워드는 Student 클래스 정보를 기반으로 새로운 객체를 생성하라는 뜻이다.
- Student 클래스는 String name, int age, int grade 멤버 변수를 가지고 있다. 이 변수를 사용하는데 필요한 메모리 공간도 함께 확보한다.=> 메모리 상에 Student 인스턴스가 생성된다.
참조값 보관
- 객체를 생성하면 자바는 메모리 어딘가에 있는 이 객체에 접근할 수 있는 참조값(주소)를 반환한다.
- Student student1 = new Student(); 코드에서 student1 변수는 메모리에 존재하는 실제 객체의 참조값을 가지게 되는 것이다. ex) student1 = x001
- student1 변수는 객체의 참조값을 가지고 있으므로, 이 변수를 통해서 객체에 접근할 수 있다.
참조값을 출력해보면 참조값이 출력되는 것을 확인할 수 있다.
System.out.println(student1);
* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 기본] 기본형과 참조형 - 활용 (0) | 2024.07.02 |
---|---|
[Java 기본] 기본형과 참조형 - 메서드 호출 (0) | 2024.07.02 |
[Java 기본] 기본형과 참조형 (0) | 2024.07.01 |
[Java 기본] 배열 (0) | 2024.07.01 |
[Java 기본] 클래스, 객체, 인스턴스 (0) | 2024.07.01 |