λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μžλ°” 클래슀(Class) μ‚¬μš©λ²•(μ„ μ–Έ, 생성, μ‚¬μš©) & 예제

by 5566 2023. 11. 23.

1. μžλ°” ν΄λž˜μŠ€λž€?

μžλ°”λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œμ¨, 클래슀(class)λΌλŠ” κ°œλ…μ„ 기반으둜 ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€. ν΄λž˜μŠ€λž€, κ°μ²΄λ“€μ˜ 집합이며, κ°μ²΄λŠ” 속성과 λ™μž‘μ„ κ°–λŠ” μ‹€μ²΄μž…λ‹ˆλ‹€. μžλ°”μ—μ„œ ν΄λž˜μŠ€λŠ” ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 청사진(blueprint)이라 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 클래슀λ₯Ό μ •μ˜ν•˜κ³  객체λ₯Ό μƒμ„±ν•¨μœΌλ‘œμ¨, ν”„λ‘œκ·Έλž¨μ—μ„œ ν•„μš”ν•œ 데이터와 λ©”μ„œλ“œλ₯Ό μΊ‘μŠν™”ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆκ²Œλ©λ‹ˆλ‹€. μžλ°”μ—μ„œλŠ” 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό κ΅¬μ‘°ν™”ν•˜κ³ , μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

클래슀λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„ μ–Έ, 생성, 그리고 μ‚¬μš©ν•˜λŠ” 과정을 거쳐야 ν•©λ‹ˆλ‹€. 이제 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

2. μžλ°” 클래슀의 μ„ μ–Έ 방법

μžλ°” 클래슀λ₯Ό μ„ μ–Έν•˜λ €λ©΄ λ‹€μŒκ³Ό 같은 ꡬ문을 μ‚¬μš©ν•©λ‹ˆλ‹€:

[μ ‘κ·Ό μ œμ–΄μž] class 클래슀λͺ… {
    // 멀버 λ³€μˆ˜ μ„ μ–Έ
    // μƒμ„±μž μ„ μ–Έ
    // λ©”μ„œλ“œ μ„ μ–Έ
}

μœ„μ˜ κ΅¬λ¬Έμ—μ„œ ν•„μˆ˜ ν•­λͺ©μ€ 클래슀λͺ…μž…λ‹ˆλ‹€. 클래슀λͺ…은 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λŠ” 카멜 μΌ€μ΄μŠ€(CamelCase) μ‚¬μš© κ·œμΉ™μ„ λ”°λ¦…λ‹ˆλ‹€. 클래슀 μ•ˆμ—λŠ” 멀버 λ³€μˆ˜, μƒμ„±μž, λ©”μ„œλ“œ 등을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, "Person"μ΄λΌλŠ” 클래슀λ₯Ό μ„ μ–Έν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€:

class Person {
    // 멀버 λ³€μˆ˜ μ„ μ–Έ
    String name;
    int age;

    // μƒμ„±μž μ„ μ–Έ
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // λ©”μ„œλ“œ μ„ μ–Έ
    public void printInfo() {
        System.out.println("이름: " + name);
        System.out.println("λ‚˜μ΄: " + age);
    }
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” "Person"μ΄λΌλŠ” 클래슀λ₯Ό μ„ μ–Έν•˜κ³ , 멀버 λ³€μˆ˜λ‘œ 이름과 λ‚˜μ΄λ₯Ό μ •μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μƒμ„±μžλ₯Ό 톡해 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³ , printInfo()λΌλŠ” λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜μ—¬ 객체의 정보λ₯Ό 좜λ ₯ν•  수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

클래슀λ₯Ό μ„ μ–Έν•œ ν›„μ—λŠ” ν•΄λ‹Ή 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό μƒμ„±ν•˜κ³ , λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ λ‹¨λ½μ—μ„œ μžλ°” 클래슀의 생성과 μ‚¬μš©μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

3. μžλ°” 클래슀의 생성과 μ‚¬μš©

μžλ°” 클래슀λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 클래슀λ₯Ό 객체둜 생성해야 ν•©λ‹ˆλ‹€. 클래슀의 객체λ₯Ό μƒμ„±ν•˜λ €λ©΄ new ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄ν›„μ—λŠ” μƒμ„±λœ 객체λ₯Ό 톡해 클래슀의 멀버 λ³€μˆ˜λ‚˜ λ©”μ„œλ“œμ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ•žμ„œ μ„ μ–Έν•œ "Person" 클래슀의 객체λ₯Ό μƒμ„±ν•˜κ³  μ‚¬μš©ν•˜λŠ” 방법을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€:

public class Main {
    public static void main(String[] args) {
        // Person 객체 생성
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Bob", 30);

        // 멀버 λ³€μˆ˜ μ‚¬μš©
        person1.name = "Carol";
        person2.age = 35;

        // λ©”μ„œλ“œ 호좜
        person1.printInfo();
        person2.printInfo();
    }
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” "Person" 클래슀의 객체 person1κ³Ό person2λ₯Ό μƒμ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ 이름과 λ‚˜μ΄λ₯Ό μ „λ‹¬ν•˜μ—¬ 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

객체 생성 ν›„μ—λŠ” 객체의 멀버 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” person1의 이름을 λ³€κ²½ν•˜κ³ , person2의 λ‚˜μ΄λ₯Ό λ³€κ²½ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ˜ν•œ, 객체의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” printInfo()λΌλŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ person1κ³Ό person2의 정보λ₯Ό 좜λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

ν΄λž˜μŠ€λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 κ°œλ…μ΄κΈ° λ•Œλ¬Έμ—, ν΄λž˜μŠ€μ™€ 객체 생성, 그리고 멀버 λ³€μˆ˜μ™€ λ©”μ„œλ“œμ˜ μ‚¬μš©μ— λŒ€ν•΄μ„œ λͺ…ν™•νžˆ 이해해야 ν•©λ‹ˆλ‹€. 클래슀λ₯Ό μ„ μ–Έν•˜κ³  객체λ₯Ό μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 방법을 μˆ™μ§€ν•˜λ©΄, μžλ°” μ–Έμ–΄λ₯Ό 잘 ν™œμš©ν•  수 있게 λ©λ‹ˆλ‹€.

4. μžλ°” 클래슀 예제 주제 1

μžλ°” 클래슀의 ν™œμš© 예제λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 이 μ˜ˆμ œλŠ” 학생 정보λ₯Ό κ΄€λ¦¬ν•˜λŠ” 클래슀λ₯Ό λ§Œλ“€κ³ , ν•΄λ‹Ή 클래슀λ₯Ό ν™œμš©ν•˜μ—¬ 학생 객체λ₯Ό μƒμ„±ν•˜κ³  정보λ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

μš°μ„ , "Student"λΌλŠ” 클래슀λ₯Ό μ„ μ–Έν•˜μ—¬ ν•™μƒμ˜ 이름과 ν•™λ²ˆ 정보λ₯Ό μ €μž₯ν•  수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€:

class Student {
    String name;
    int studentID;

    public Student(String name, int studentID) {
        this.name = name;
        this.studentID = studentID;
    }

    public void printInfo() {
        System.out.println("이름: " + name);
        System.out.println("ν•™λ²ˆ: " + studentID);
    }
}

λ‹€μŒμœΌλ‘œ, "Main" 클래슀λ₯Ό μƒμ„±ν•˜μ—¬ 학생 객체λ₯Ό μƒμ„±ν•˜κ³  정보λ₯Ό 좜λ ₯ν•˜λŠ” 예제λ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€:

public class Main {
    public static void main(String[] args) {
        // Student 객체 생성
        Student student1 = new Student("Alice", 20210001);
        Student student2 = new Student("Bob", 20210002);

        // 정보 좜λ ₯
        student1.printInfo();
        student2.printInfo();
    }
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” "Student" 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ student1κ³Ό student2λΌλŠ” 학생 객체λ₯Ό μƒμ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ 이름과 ν•™λ²ˆ 정보λ₯Ό μ „λ‹¬ν•˜μ—¬ 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

객체 생성 ν›„μ—λŠ” printInfo() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ 학생 정보λ₯Ό 좜λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

이 예제λ₯Ό 톡해 μžλ°” 클래슀λ₯Ό 효과적으둜 ν™œμš©ν•˜μ—¬ 객체λ₯Ό μƒμ„±ν•˜κ³  정보λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방법을 읡힐 수 μžˆμŠ΅λ‹ˆλ‹€. 객체λ₯Ό μƒμ„±ν•˜μ—¬ ν•„μš”ν•œ 정보λ₯Ό μ €μž₯ν•˜κ³ , μ •μ˜λœ λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” μžλ°” 클래슀의 ν™œμš©λ²•μ— λŒ€ν•΄ μ΄ν•΄ν•˜κ²Œ λ˜μ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€.

5. μžλ°” 클래슀 예제 주제 2

μžλ°” 클래슀의 또 λ‹€λ₯Έ 예제λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 이번 μ˜ˆμ œλŠ” 직원 정보λ₯Ό κ΄€λ¦¬ν•˜λŠ” 클래슀λ₯Ό λ§Œλ“€κ³ , ν•΄λ‹Ή 클래슀λ₯Ό ν™œμš©ν•˜μ—¬ 직원 객체λ₯Ό μƒμ„±ν•˜κ³  정보λ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

λ¨Όμ €, "Employee"λΌλŠ” 클래슀λ₯Ό μ„ μ–Έν•˜μ—¬ μ§μ›μ˜ 이름, 직급, 연봉 정보λ₯Ό μ €μž₯ν•  수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€:

class Employee {
    String name;
    String position;
    int salary;

    public Employee(String name, String position, int salary) {
        this.name = name;
        this.position = position;
        this.salary = salary;
    }

    public void printInfo() {
        System.out.println("이름: " + name);
        System.out.println("직급: " + position);
        System.out.println("연봉: " + salary);
    }
}

κ·Έ λ‹€μŒμœΌλ‘œ, "Main" 클래슀λ₯Ό μƒμ„±ν•˜μ—¬ 직원 객체λ₯Ό μƒμ„±ν•˜κ³  정보λ₯Ό 좜λ ₯ν•˜λŠ” 예제λ₯Ό μž‘μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€:

public class Main {
    public static void main(String[] args) {
        // Employee 객체 생성
        Employee employee1 = new Employee("Alice", "λ§€λ‹ˆμ €", 50000000);
        Employee employee2 = new Employee("Bob", "사원", 30000000);

        // 정보 좜λ ₯
        employee1.printInfo();
        employee2.printInfo();
    }
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” "Employee" 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ employee1κ³Ό employee2λΌλŠ” 직원 객체λ₯Ό μƒμ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ 이름, 직급, 연봉 정보λ₯Ό μ „λ‹¬ν•˜μ—¬ 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

객체 생성 ν›„μ—λŠ” printInfo() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ 직원 정보λ₯Ό 좜λ ₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

이 예제λ₯Ό ν†΅ν•΄μ„œλ„ μžλ°” 클래슀λ₯Ό 효과적으둜 ν™œμš©ν•˜μ—¬ 객체λ₯Ό μƒμ„±ν•˜κ³  정보λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방법을 읡힐 수 μžˆμŠ΅λ‹ˆλ‹€. 클래슀λ₯Ό μ„ μ–Έν•˜κ³  객체λ₯Ό μƒμ„±ν•˜λŠ” κ³Όμ •μ—μ„œ μƒμ„±μž λ§€κ°œλ³€μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³ , 정보λ₯Ό 좜λ ₯ν•˜λŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” μžλ°” 클래슀의 ν™œμš©λ²•μ— λŒ€ν•΄ μ΄ν•΄ν•˜κ²Œ λ˜μ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€.

λŒ“κΈ€