회원가입

클래스가 필요한 이유

Beany 2024-09-03

클래스가 왜 필요한지 이해하기 위해 아래 문제를 풀어보자.

 

문제: 학생 정보 출력 프로그램 만들기


당신은 두 명의 학생 정보를 출력하는 프로그램을 작성해야 한다.
각 학생은 '이름' '나이', '성적'을 가지고 있다.

 

요구사항:

  1. 첫 번째 학생의 '이름'은 "학생1", '나이'는 15, '성적'은 90입니다.
  2. 두 번째 학생의 '이름'은 "학생2", '나이'는 16, '성적'은 80입니다.
  3. 각 학생의 정보를 다음과 같은 형식으로 출력해야 합니다.
    • "이름: [이름] 나이: [나이] 성적: [성적]"
  4. 변수를 사용해서 학생 정보를 저장하고 변수를 사용해서 학생 정보를 출력해야 합니다.

 

예시 출력:

이름: 학생1 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80

 

 

변수 사용


변수를 사용해서 이 문제를 풀어보면 다음과 같다.

package class1;

public class ClassStart1 {
    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 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80

학생 2명을 다뤄야 하기 때문에 각각 다른 변수를 이용했습니다.

이 코드의 문제는 학생이 늘어날 때 마다 변수를 추가로 선언해야 하고, 출력하는 코드도 추가해야 합니다.

String student3Name = "학생3";
int student3Age = 17;
int student3Grade = 75;

System.out.println("이름: " + student3Name + " 나이: " + student3Age + " 성적: " + student3Grade);

 

 

배열 사용


배열을 적용하여 코드 변경을 최소화 해보자

package class1;

public class ClassStart2 {
    public static void main(String[] args) {
        String[] studentNames = {"학생1", "학생2"};
        int[] studentAges = {15, 16};
        int[] studentGrades = {90, 80};

        for (int i = 0; i < studentNames.length; i++) {
            System.out.println("이름: " + studentNames[i] + " 나이: " + studentAges[i] + " 성적: " + studentGrades[i]);
        }
    }
}
이름: 학생1 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80

학생을 한명 더 추가해보자

String[] studentNames = {"학생1", "학생2", "학생3"};
int[] studentAges = {15, 16, 17};
int[] studentGrades = {90, 80, 75};

배열 안에 값만 넣으면 됩니다.

 

배열 사용의 한계

  • 데이터를 변경할 때 매우 조심해서 작업해야 한다.
    • 예를 들어 "학생2" 를 제거하려고 했는데, 16이 아니라 17을 지우면 큰일난다.

 

 

클래스 사용


클래스를 사용해서 "학생" 이라는 개념을 만들고, 각각의 "학생" 별로 본인의 '이름', '나이', '성적'을 관리할 것이다.

package class1;

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

class 키워드를 사용해서 학생 클래스(Student)를 정의했다.
학생 클래스는 내부에 이름(name) 나이(age) 성적(grade) 변수를 가진다.

이렇게 클래스에 정의한 변수들을 멤버 변수, 또는 필드라고 한다.

  • 맴버 변수(Member Variable): 이 변수들은 특정 클래스에 소속된 멤버이기 때문에 이렇게 부른다.
  • 필드(Field): 데이터 항목을 가르키는 전통적인 용어이다. 데이터베이스, 엑셀 등에서 데이터 각각의 항목을 필드라 한다.
  • 자바에서 멤버 변수, 필드는 같은 뜻이다. 클래스에 소속된 변수를 뜻한다.

 

클래스를 사용해서 코드를 만들어 봅시다.

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;
        Student student3 = new Student();
        student3.name = "학생3";
        student3.age = 17;
        student3.grade = 75;

        Student[] students = {student1, student2, student3};

        for (Student student : students) {
            System.out.println("이름: " + student.name + " 나이: " + student.age + " 성적: " + student.grade);
        }
    }
}
이름: 학생1 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80
이름: 학생3 나이: 17 성적: 75

 

new Student() 와 같이 객체를 생성하면 자바는 메모리 어딘가에 있는 이 객체에 접근할 수 있는 참조값(주소)(x001)을 반환합니다.

 

지금까지 설명한 내용을 간단히 풀어보면 다음과 같다.

Student student1 = new Student();  //1. Student 객체 생성
Student student1 = x001;  //2. new Student()의 결과로 x001 참조값 반환
student1 = x001;  //3. 최종 결과

 

0 0
JAVA
이 공간은 개인 공부를 통해 얻은 정보를 체계적으로 정리하고 공유하는 곳입니다. 학습한 내용, 발견한 지식, 그리고 문제 해결 방법 등을 기록하여 나만의 학습 자료를 구축하고, 필요할 때 쉽게 참고할 수 있는 유용한 자원으로 활용할 수 있도록 합니다.
Yesterday: 456
Today: 222