Java - Class

CYSSSSSSSSS·2024년 3월 8일
0

자바

목록 보기
11/26

Class

Class

클래스가 필요한 이유

  • 자바는 클래스와 객체로 이루어져 있다.

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

  • 첫 번째 학생은 "학생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);

    }
}
  • 학생 두 명의 정보를 받기 위해 각각 다른 변수를 사용했다
  • 코드의 문제점으로 학생이 늘어날 때 마다 변수를 추가로 선언해야 하고 코드가 계속해서 추가되어야 한다는 단점이 있다.

이전 문제를 배열을 이용해서 해결

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]);
        }
    }
}
  • 배열을 사용해서 해결할 때는 또 다른 문제점이 있다
  • 만약 데이터를 삭제한다고 가정할 때 이름,나이,성적은 각각 다른 배열에 존재하기 때문에 한 행의 정보를 삭제한다고 할 때 모든 배열에서 정확한 위치의 정보를 삭제 시켜줘야 한다.
  • 결국 관리하기 어려운 프로그램이다.

Class 사용

  • 위에 문제가 되는 방법을 클래스를 도입하여 해결
  • 클래스를 사용하여 학생이라는 개념을 만들고 이름,나이,성적을 관리하는 프로그램을 작성해 보자

Student Class

package class1

public class Student {
	String name;
    int age;
    int grade; 
}
  • 클래스에 정의된 변수들은 멤버 변수 또는 필드라고 부른다.
  • 멤버 변수는 특정 소속에 속한 변수들이라고 한다.
  • 필드는 데이터 가르키는 전통적인 용어중 하나이다.
package class1;

public class ClassStart3 {
    public static void main(String[] args) {
        Student student1; // 학생을 담아둘수 있는 클래스 변수를 선언함
        student1 = new Student(); // 학생의 정보를 담을수 있는 메모리를 생성한다.
        student1.name = "학생1";
        student1.age = 15;
        student1.grade = 90;

        Student student2; // 학생을 담아둘수 있는 클래스 변수를 선언함
        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의 참조값: " + student1);
        System.out.println("student2의 참조값: " + student2);

객체 사용

  • 객체를 사용하기 위해서는 먼저 메모리에 존재하는 객체에 접근해야한다.
  • 객체에 접근할 때는 .(점,dot)을 사용하면 된다.

객체 접근 원리

  • 참조값을 통해 객체에 접근한다
  • 메모리 안에 있는 변수 이름으로 접근한다.
  • 이름안에 접근하면 수정하고 싶은 내용을 수정한다.

클래스/객체/인스턴스

Class

  • 객체를 생성하기 위한 틀 또는 설계도
  • 객체가 가져야할 속성(변수)와 기능(메서드)를 정의한다.

Object

  • 객체는 클래스에서 정의한 속성과 기능을 가진 실체이다.
  • 객체는 서로 독립적인 상태를 나타낸다.
  • student1과 student2는 독립적인 객체이다.

Instance

  • 특정 클래스로부터 생성된 객체를 말한다.
  • student1은 Student 클래스의 인스턴스이다.

배열 도입

  • 위의 코드를 사용하면서 학생의 정보를 출력할때 객체 하나를 생성할 때 마다 print문이 추가되는 코드가 길어지는 아쉬움이 있다.
  • 따라서 이를 해결하기 위해 배열을 사용하면 된다.
  • 배열로 클래스를 선언한다는 것은 참조값을 저장하는 객체를 배열로 만들었다고 생각하면 된다.
package class1;

public class ClassStart4 {
    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 = 14;
        student2.grade = 80;

        // 클래스 배열을 사용하여 위에 객체들의 정보를 저장해보자
        Student[] students = new Student[2];
        students[0] = student1;
        students[1] = student2;

        System.out.println("이름: " + students[0].name + " 나이: " + students[0].age + " 성적: " + students[0].grade);
        System.out.println("이름: " + students[1].name + " 나이: " + students[1].age + " 성적: " + students[1].grade);
    }
}
  • 가장 중요한 부분은 자바에서는 항상 변수에 들어있는 값을 복사하는 구조이다.
  • 기존에 있는 student1,student2는 그대로 유지가 된다.
  • students 배열은 객체의 참조값을 복사해서 저장하는 구조이다.

배열 - 리펙토링

  • 배열을 사용하기 때문에 위에 코드에 반복문을 사용하여 바꾸자
package class1;

public class ClassStart5 {
    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 = 14;
        student2.grade = 80;

        // 클래스 배열을 사용하여 위에 객체들의 정보를 저장해보자
        Student[] students = {student1 , student2};

        for(int i =0; i<students.length; i++){
            System.out.println("이름: " + students[i].name + " 나이: " + students[i].age + " 성적: " + students[i].grade);
        }
        // 임의의 객체를 만들어 배열으로 선언하는 이름을 줄이는 방법
        for(int i = 0; i<students.length; i++){
            Student s = students[i];
            System.out.println("이름: " + s.name + " 나이: " + s.age + " 성적: " + s.grade);
        }
        // for each로 최적화
        for(Student s : students){
            System.out.println("이름: " + s.name + " 나이: " + s.age + " 성적: " + s.grade);
        }

    }
}
profile
개발자 되고 싶어요

0개의 댓글

관련 채용 정보