반응형

클래스와 객체란?

객체를 붕어빵, 클래스를 붕어빵 틀로 비유 (클래스를 사용해서 객체를 생성한다는 의미)

Circle c1 = new Circle();
  • 위의 코드에서 Circle은 클래스(데이터 타입), c1은 객체(변수명)
  • new는 객체 생성을 뜻하고, ()는 함수 생성자를 의미함
  • Circle, String, int[], char[], ...을 참조형 타입이라고 함
  • 이와 반대되는 개념으로 기본형 타입(Primitive Type)이 8개 있음
    • 논리형 : boolean
    • 문자형 : char
    • 숫자형(정수) : byte, short, int, long
    • 숫자형(실수) : float, double
  • 기본형 타입은 각각 크기가 다른데, 참조형 타입은 모두 4byte임 => 메모리 주소값을 담고 있기 때문

클래스, 객체 사용 예제

public class Main {

    public static void main(String[] args) {
        Student student1 = new Student("Tom", 17, 177.8);
        Student student2 = new Student("Harry", 18, 168.1);
        Student student3 = new Student("Alice", 16, 161.2);

        student1.PrintStudentInfo();
        student2.PrintStudentInfo();;
        student3.PrintStudentInfo();
    }
}

class Student {
    String name;
    int age;
    double height;

    Student(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    void PrintStudentInfo() {
        System.out.print("이름 : " + name + "  ");
        System.out.print("나이 : " + age + "  ");
        System.out.println("키 : " + height);
    }
}
  • 위의 코드에서 Student는 클래스, student1,2,3은 객체를 뜻함
  • Student(String name, ...)은 생성자를 뜻함
  • 기본적으로 생성자를 작성하지 않으면 JVM이 자동으로 파라미터가 없는 생성자(default 생성자)를 생성해줌
  • 단, 위와같이 직접 생성자를 작성하면 default 생성자를 따로 생성하지 않기 때문에, new Student()와 같이 사용할 수 없음
  • 오버로딩을 사용해서 생성자를 여러개 생성할 수도 있음
  • 생성자에서 this를 사용하는데 이는 파라미터로 넘어온 변수들과 클래스 변수들의 이름이 같기 때문에 구분을 위해 사용
  • PrintStudentInfo 메소드에서도 this를 사용해도 되지만, this를 사용하지 않아도 알아서 자기 클래스 변수로 인식해줌

결과

객체 배열 사용법

  • 만약 만들고자 하는 객체가 많아진다면 위의 예시처럼 하나씩 넣기 힘들 수 있고 관리도 불편할 수 있음
  • 그럴때 객체 배열을 사용해서 더 편하게 관리할 수 있음
  • main 메소드를 아래와 같이 수정해보자
public static void main(String[] args) {
    Student[] students = new Student[3];    // 객체 배열

    String[] namelist = {"Tom", "Harry", "Alice"};
    int[] agelist = {17, 18, 16};
    double[] heightlist = {177.7, 168.1, 161.2};

    for(int i = 0 ; i < 3 ; i ++) {
        students[i] = new Student(namelist[i], agelist[i], heightlist[i]);
    }

    for(Student student : students) {
        student.PrintStudentInfo();
    }
}
  • 실행 결과는 위의 결과와 일치
반응형

↓ 클릭시 이동

복사했습니다!