Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

우리의 IT

JAVA - 클래스 본문

정보처리기사

JAVA - 클래스

우리의 IT 2025. 3. 27. 13:15

Java - 클래스 (Class)

클래스란?
Java에서 클래스(Class) 는 객체를 생성하는 설계도(템플릿) 역할을 합니다.
속성(필드)과 동작(메소드)을 정의
객체(Object) 생성의 기본 단위
코드를 모듈화하여 재사용성 향상


🔹 1. 클래스 기본 구조

📌 클래스 선언 및 객체 생성

class Car {  // 클래스 선언
    String brand;  // 필드 (속성)
    int speed;

    void drive() {  // 메소드 (기능)
        System.out.println(brand + "가 " + speed + "km/h로 달립니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car(); // 객체 생성
        myCar.brand = "Hyundai";
        myCar.speed = 100;
        
        myCar.drive(); // 메소드 호출
    }
}

출력

Hyundai가 100km/h로 달립니다.  

클래스 핵심 구성 요소

요소 설명

필드(Field) 객체의 속성을 나타내는 변수
메소드(Method) 객체의 동작(기능)을 정의
생성자(Constructor) 객체 초기화를 담당
객체(Object) 클래스를 기반으로 생성된 인스턴스

🔹 2. 생성자 (Constructor)

📌 생성자는 객체가 생성될 때 자동으로 호출됨

class Person {
    String name;
    int age;

    // 생성자
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    void introduce() {
        System.out.println("안녕하세요, 저는 " + name + "이고, " + age + "살입니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("홍길동", 25);
        p1.introduce();
    }
}

출력

안녕하세요, 저는 홍길동이고, 25살입니다.  

생성자의 특징

  • 클래스와 동일한 이름을 가짐
  • 리턴 타입이 없음
  • new 키워드를 사용하여 객체 생성 시 호출됨
  • 여러 개의 생성자 오버로딩 가능

📌 기본 생성자 (매개변수가 없는 생성자)

class Person {
    String name;
    
    Person() {
        this.name = "Unknown"; // 기본 값 설정
    }
}

🔹 3. 메소드 오버로딩 (Method Overloading)

📌 같은 이름의 메소드를 여러 개 정의할 수 있음

class MathUtils {
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) { // 메소드 오버로딩
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        MathUtils math = new MathUtils();
        System.out.println(math.add(3, 5));        // 8
        System.out.println(math.add(2.5, 3.2));    // 5.7
    }
}

메소드 오버로딩의 조건

  • 매개변수의 타입, 개수, 순서가 달라야 함
  • 반환 타입만 다르면 안 됨

🔹 4. 접근 제어자 (Access Modifiers)

📌 클래스의 필드와 메소드 접근을 제한하는 키워드

접근 제어자 같은 클래스 같은 패키지 자식 클래스 전체 접근

private
default
protected
public

📌 예제

class BankAccount {
    private int balance = 1000; // private: 클래스 내부에서만 접근 가능

    public int getBalance() { // public: 외부에서도 접근 가능
        return balance;
    }
}

public class Main {
    public static void main(String[] args) {
        BankAccount account = new BankAccount();
        // System.out.println(account.balance); // 오류 발생 (private 변수 접근 불가)
        System.out.println(account.getBalance());  // 1000
    }
}

출력

1000  

🔹 5. 상속 (Inheritance)

📌 기존 클래스의 기능을 물려받아 확장 가능 (extends 사용)

class Animal {
    String name;
    
    void eat() {
        System.out.println(name + "가 먹고 있습니다.");
    }
}

// `extends` 키워드를 사용하여 Animal 클래스를 상속
class Dog extends Animal {
    void bark() {
        System.out.println(name + "가 짖고 있습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.name = "바둑이";
        myDog.eat();  // 부모 클래스 메소드
        myDog.bark(); // 자식 클래스 메소드
    }
}

출력

바둑이가 먹고 있습니다.  
바둑이가 짖고 있습니다.  

🔹 6. 추상 클래스 (Abstract Class)

📌 추상 클래스는 객체를 생성할 수 없고, 반드시 상속하여 사용해야 함

abstract class Animal {
    abstract void makeSound(); // 추상 메소드 (구현 필요)
    
    void eat() {
        System.out.println("먹이를 먹습니다.");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound(); // 멍멍!
        dog.eat();       // 먹이를 먹습니다.
    }
}

출력

멍멍!  
먹이를 먹습니다.  

🔹 7. 인터페이스 (Interface)

📌 클래스가 반드시 구현해야 하는 메소드 목록을 정의

interface Animal {
    void makeSound(); // 인터페이스는 메소드의 선언만 가능 (구현 X)
}

class Cat implements Animal {
    public void makeSound() { // 반드시 구현해야 함
        System.out.println("야옹!");
    }
}

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.makeSound();
    }
}

출력

야옹!  

인터페이스 특징

  • 다중 상속 가능 (implements 여러 개 사용 가능)
  • 추상 클래스보다 추상화 수준이 높음

🚀 정리

개념 설명

클래스 객체를 생성하는 설계도
필드 클래스의 속성 (변수)
메소드 클래스의 동작 (함수)
생성자 객체 초기화 메소드
상속 extends 키워드로 부모 클래스를 상속
추상 클래스 abstract 키워드 사용, 구현 강제
인터페이스 implements 키워드 사용, 다중 구현 가능

클래스를 활용하면 객체 지향 프로그래밍(OOP)을 쉽게 구현할 수 있음! 🚀

'정보처리기사' 카테고리의 다른 글

파이썬 - 컬렉션 자료형  (0) 2025.03.27
파이썬 - 기본 자료형  (0) 2025.03.27
JAVA - 배열  (0) 2025.03.27
C언어 - 포인터  (0) 2025.03.27
C언어 - 유틸리티 함수  (0) 2025.03.27