푸들푸들

[JAVA] 클래스, 객체 본문

SELF-STUDY/JAVA 김영한

[JAVA] 클래스, 객체

COCO_develop 2025. 3. 20. 18:43

 ex

각 학생의 정보를 출력할 때

-> 변수를 사용해 학생 정보를 저장하고, 출력

 public class Class1 {
     public static void main(String[] args) {
         String student1Name = "학생1";
         int student1Age = 15;
         int student1Grade = 90;
         
         System.out.println("이름:" + student1Name + " 나이:" + student1Age + " 성적:" + student1Grade);
    }
 }

    --> 학생이 늘어날 때마다 변수 새로 선언, 출력 코드도 추가

 

=> 배열 적용

 public class Class2 {
     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]);
        }
    }
 }

   --> 코드 변경 최소화 but 유지보수 어려움

 

=> 클래스 도입

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

 클래스에 정의한 변수들 = 멤버 변수 or 필드 (자바에서 같은 뜻)

  - Member Variable : 특정 클레스에 소속된 멤버

  - Field : 데이터 항목

 public class Class3 {
     public static void main(String[] args) {
        Student student1; // 변수 선언
        student1 = new Student(); // Student 인스턴스 생성
        // student1 = x001; -> Student 인스턴스 참조값 보관
        student1.name = "학생1"; // student1 객체의 name 멤버 변수에 값 대입
        // x001.name="학생1" -> 변수에 있는 참조값을 통해 실제 객체에 접근, 해당 객체의 name 멤버 변수에 값 대입
        student1.age = 15;
        student1.grade = 90;
                
         System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" + student1.grade);
    }
 }

 

클래스 = Student, 객체 = student1, student2

System.out.println(student1);

결과: practice.Student@b4c966a = 패키지.클래스@참조 

 

 

•  클래스 Class

   = 설계도(붕어빵 틀), 객체가 가져야 할 속성(변수)과 기능(메서드) 정의

  객체(인스턴스)

   = 클래스를 사용해서 실제 메모리에 만들어진 실체(붕어빵)

 

  객체 Object

   = 클래스에서 정의한 속성과 기능을 가진 실체, 서로 독립적인 상태

  인스턴스 Instance

   = 특정 클래스로부터 생성된 객체, 객체가 어떤 클래스에 속해 있는지 강조할 때 사용

- 둘다 클래스에서 나온 실체라는 의미에서 비슷하게 사용되지만, 용어상 인스턴스는 객체보다 좀 더 관계에 초점을 맞춘 단어

 

배열

위 내용에 배열 도입

Student[] students = new Student[2];
students[0] = student1;
students[1] = student2;
/* 자바에서 대입은 항상 변수에 들어 있는 값을 복사한다.
   students[0] = x001;
   students[1] = x002;
*/

 

자바에서 대입은 항상 변수에 들어 있는 값을 복사한다.

 - student1, student2에는 참조값이 보관되어 있다. 따라서 이 참조값이 배열에 저장된다. 또는 student1 , student2에 보관     된 참조값을 읽고 복사해서 배열에 대입한다고 표현한다.

** 주의

변수에는 인스턴스 자체가 들어있는 것이 아니다! 인스턴스의 위치를 가리키는 참조값이 들어있을 뿐이다! 따라서 대입 ( =)시에 인스턴스가 복사되는 것이 아니라 참조값만 복사된다

 

students[0].name -> 배열 접근 시작

x005[0].name ->  [0]를 사용해서 x005 배열의 0번 요소에 접근 (students = x005)

x001.name ->  .(dot)을 사용해서 참조값으로 객체에 접근 ( x005[0] = x001)

--> "학생1"

 

 

-> 리팩토링(반복문 도입)

/*
    Student[] students = new Student[2];
    students[0] = student1;
    students[1] = student2;
*/
Student[] students = new Student[]{student1, student2};

- 생성과 선언을 동시에

 Student[] students = {student1, student2};

 

- for문 최적화

/*
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 + ...);
 }

 : 반복 요소(student[i])를 변수에 담아서 처리

 

- 향상된 for문

for (Student s : students) {
	System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" + s.grade);
}

** 반복문 단축키: iter

 

 

예제

1. 영화 리뷰 관리하기

답: 

public class MovieReviewMain {
    public static void main(String[] args) {
        MovieReview[] reviews = new MovieReview[2];

        MovieReview movie1 = new MovieReview();
        movie1.title = "인셉션";
        movie1.review = "인생은 무한 루프";
        reviews[0] = movie1;

        MovieReview movie2 = new MovieReview();
        movie2.title = "어바웃 타임";
        movie2.review = "인생 시간 영화!";
        reviews[1] = movie2;

        for (MovieReview mr : reviews) {
            System.out.println("영화 제목: " + mr.title + ", 리뷰: " + mr.review);
        }
    }
}

 

 

2. 상품 주문 시스템 개발

답:

public class ProductOrderMain {
    public static void main(String[] args) {
        ProductOrder[] orders = new ProductOrder[3];

        ProductOrder order1 = new ProductOrder();
        order1.productName = "두부";
        order1.price = 2000;
        order1.quantity = 2;
        orders[0] = order1;

        ProductOrder order2 = new ProductOrder();
        order2.productName = "김치";
        order2.price = 5000;
        order2.quantity = 1;
        orders[1] = order2;

        ProductOrder order3 = new ProductOrder();
        order3.productName = "콜라";
        order3.price = 1500;
        order3.quantity = 2;
        orders[2] = order3;

        int totalAmount = 0;
        for (ProductOrder o : orders) {
            System.out.println("상품명: " + o.productName + ", 가격: " + o.price + ", 수량: " + o.quantity);
            totalAmount += o.price * o.quantity;
        }
        System.out.println("총 결제 금액: " + totalAmount);
    }
}

'SELF-STUDY > JAVA 김영한' 카테고리의 다른 글

[JAVA] 패키지  (0) 2025.04.04
[JAVA] 생성자  (0) 2025.04.03
[JAVA] 절차 지향, 객체 지향 프로그래밍  (2) 2025.03.26
[JAVA] 변수와 초기화  (1) 2025.03.25
[JAVA] 기본형, 참조형  (0) 2025.03.25