Class_이게 뭔데

2024. 1. 10. 22:46JAVA

클래스. 왜 필요할까?

학생의 정보를 변수에 담에 해보자

String studentName = "김어항";
int studentAge = 15;

고민할 거리도 없이 이렇게 작성될 것이다.

 

두명의 학생 정보를 담으려면?

String student1Name = "김어향";
int student1Age = 15;
int student1Score = 90;

String student2Name = "김장육";
int student2Age = 20;
int student2Score = 33;

아직 무난하다.

그렇다면.. 50명 100명 1천명은 어떻게 해야 할까?

반복문으로 어떻게든 되지 않을까? ->안타깝게도 변수명이 다르기 때문에 그럴 수는 없다.

그렇다면 같은 정보들의 집합인 배열로 어떻게 되지 않을까?

String[] studentNames = {"김어향", "김장육"};
int[] studentAges = {15, 20};

for (int i = 0; i < studentNames.length; i++) {
    System.out.println("이름 : " + studentNames[i] + "나이: " + studentAges[i]);
}

어떻게든 되기는 된다. 그러나 뭔가.. 뭔가 이상하고 불편하다. 관리도 번거로워 보인다.

김어향에 대한 정보를 확인하기 위해서 String 배열도 봐야하고 int[] 배열도 봐야하다.

 

그렇다면 이건 어떨까?

Student[][] student = {{"김어향", 15, 90}, {"김장육", 20, 33}};	// 배열은 하나의 타입만 담을 수 있다. 내가 임의로 작성했던 이 코드는 숫자, 문자 등이 짬뽕되어 사용할 수 없다.

그럴듯 해보인다. 그런데.. 어떤 인자가 어떤 내용에 대한 값인지 알 수 없다.

 

 

90세 어향 어르신의 손자 수가 15살인지

15세 김어향 어린이의 용돈이 90만원인지 확인할 수 없다.

 

더욱이, 배열은 한번 생성하면 길이 조절이 안 된다.

내용을 추가하려면, 배열 생성, 복사 등이 이루어져야 하는데 너~~무 번거롭다.

 

.. 배열만으로는 관리가 어렵다.

이러한 문제점들을 해결하기 위한 것이 바로 클래스이다.

 

클래스란

사람이 관리하기 쉽도록 필요한 개념들을 하나로 묶은 것이다. 

public class Student {
    String name;
    int age;
    int score;
}

 

학생을 관리하는 데 필요한 정보를 기반으로 작성한 클래스이다.

 

여기서

String name;

int age;

int score;

을 일컬어 필드(field), 혹은 멤버 변수 라 칭한다. 

클래스를 작성 했으니 사용도 해보자.

Student student1 = new Student();
student1.name = "김어향";
student1.age = 15;
student1.score = 90;

Student student2 = new Student();
student2.name = "김장육";
student2.age = 20;
student2.score = 33;

만들고, 쓴다.

 

뭐가 느껴지지 않는가? 이 편리함. 안락함. 좋아진 점은 무엇인가?

 

장점 1. 모든 매개변수를 새롭게 작성하지 않아도 된다.

String stu1Name
int stu1Age
int stu1Score

String stu2Name
int stu2Age
int stu2Score

 

장점 2. 하나만 바라보면 많은 정보를 얻을 수 있다.

String[] studentName = {"김어향" , "김장육"};
int[] studentAge = {15, 20};

배열을 여러개 확인 해야 하던 배열 방식과 다르게 생성한 인스턴스 하나만 보면 많은 정보를 확인 할 수 있다.

Student student1 = new Student();
student1.name = "김어향";
student1.age = 15;
student1.score = 90;

Student student2 = new Student();
student2.name = "김장육";
student2.age = 20;
student2.score = 33;

 

장점3. 타입에 상관 없이 다양한 타입을 넣을 수 있다.

// 사용 불가
Student[][] student = {{"김어향", 15, 90}, {"김장육", 20, 33}};	// 배열은 하나의 타입만 담을 수 있다.

 

장점4. 어디에 어떤 값이 들어 있는지 정확하게 알 수 있다.

생성한 인스턴스.필드명 을 통해 어떤 학생의, 어떤 필드의 값인지 명확하게 확인 가능 해졌다.

System.out.println("이름: " + student1.name + " 나이 : " + student1.age + " 점수 : " + student1.score);
System.out.println("이름: " + student2.name + " 나이 : " + student2.age + " 점수 : " + student2.score);

 

너무 좋다..

 

이러한 이점들을 가져다 주는 클래스를 '설계도' 라고 부르기도 한다.

이 설계도를 통해 만든 객체를 '인스턴스' 라고 부른다.

우리는 이런 클래스(설계도)를 가지고 쉽게 관리할 수 있는 인스턴스를 수만, 수천 개 만들어 사용할 수 있게 됐다.

 

이거시 클라쓰인가?!

 

'JAVA' 카테고리의 다른 글

참조_기본형과 참조형  (0) 2024.01.11
Class_instance  (0) 2024.01.10
Method_오버 로딩  (0) 2024.01.10
Method_호출과 값 전달  (0) 2024.01.07
Method_리턴  (0) 2024.01.07