BackEnd/Java

[Java] 클래스, 객체, 인스턴스 정리

kangminhyuk1111 2023. 11. 30. 10:23
package class1;

public class ClassStart1 {

    public static void main(String[] args) {
        // 데이터 변경시에 정확한 인덱스를 찾아서 제거하는 것이 너무 위험하다.
        // 실수하기 좋은 코드, 컴퓨터는 상관없지만, 사람이 컨트롤하기 힘든 코드
        // 하나로 묶어서 관리하는게 좋을 것 같다. -> 클래스

        String[] studentName = {"학생1","학생2","학생3"};
        int[] studentAge = {15,16,17};
        int[] studentGrade = {90,80,70};

        for(int i = 0; i < 3; i++){
            System.out.println(studentName[i] + " " + studentAge[i] + " " + studentGrade[i]);
        }

        // 무지성 반복
        String student1Name = "학생1";
        int student1Age = 15;
        int student1Grade = 90;

        String student2Name = "학생2";
        int student2Age = 16;
        int student2Grade = 80;

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

        System.out.println(student1Name + " " + student1Age + " " + student1Grade);
        System.out.println(student2Name + " " + student2Age + " " + student2Grade);
        System.out.println(student3Name + " " + student3Age + " " + student3Grade);
    }

}
package class1;

public class Student {
    // 클래스에 정의한 변수들은 멤버 변수, 혹은 필드 라고한다.
    // 필드 : 데이터 항목을 가르키는 전통적인 용어이다. DB,EXCEL 등에서 데이터 각각의 항목을 필드라 한다.
    // 자바에서 멤버 변수, 필드는 같은 뜻이다. 클래스에 소속된 변수.
    // 클래스는 관례상 대문자로 시작한다.
    String name;
    int age;
    int grade;
}
package class1;

public class ClassStart3 {

    public static void main(String[] args) {
        Student student1;
        // 학생을 실제 메모리에 생성
        student1 = new Student();
        // class 는 .을 통해 접근
        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.name + " 나이:" + student1.name + " 성적:" + student1.grade);
        System.out.println("이름:" + student2.name + " 나이:" + student2.name + " 성적:" + student2.grade);

        // 타입은 데이터의 종류나 형태를 나타낸다.
        // int는 정수타입, String이면 문자 타입.
        // 학생 타입을 만들면 되지 않을까?
        // 클래스를 사용하면 int, String과 같은 타입을 직접 만들 수 있다.
        // 사용자가 직접 정의하는 사용자 정의 타입을 만들려면 설계도가 필요하고 이것이 클래스 입니다.
        // 설계도인 클래스를 사용해서 실제 메모리에 할당된 것이 객체 또는 인스턴스 라고 한다.
        // 클래스는 설계도, 이것을 통해 만들어진 것이 객체 or 인스턴스
        // 위 코드는 설계도 Student를 통해 만들어진 student1, student2 인스턴스를 가지고 있다.
        // new Student(): new는 새로 생성한다는 뜻이다.
        // Student student1 = new Student(); 이 코드로 하나의 인스턴스가 생성되어 메모리를 할당 받는다.
        // 메모리의 어딘가에 할당된 인스턴스 student1 객체를 어디있는지 찾기위해 참조값을 보관한다. student1 = 참조값의 위치
        // student1 변수를 통해 객체를 접근(참고) 할 수 있다.
        // 똑같이 student2 = 참조값 위치, new로 만들기 때문에 새로운 참조값을 가질 것.

        System.out.println(student1);
        System.out.println(student2);

        // println 했을때 student가 저장된 참조값
        // class1.Student@66a29884
        // class1.Student@4769b07b


        // 객체에 값 대입
        // 객체가 가진 멤버 변수에 접근하려면 . 키워드를 사용하여 접근한다. 메모리에 존재하는 실제 객체에 접근하는 법.

        // 객체는 클래스에서 정의한 속성과 기능을 가진 실체이다. 객체는 서로 독립적인 상태를 가진다.
        // student1 student2 는 같은 클래스에서 만들어 졌지만 다른 객체이다.

        // 인스턴스는 특정 클래스로부터 생성된 객체를 의미.
        // student1 student2 는 Student 클래스에서 생성된 객체이다. 라는 뜻이다.

        // 결론, 둘 다 거의 똑같다고 보시면 된다.
        // 둘 다 클래스에서 나온 실체라는 것이 핵심 의미이다. 보통 구분하지 않고 사용하는 것 같다.
    }

}
반응형