클래스(Class) & 객체(Object), 생성자, 오버로딩, OOP 기본

wsung·2025년 12월 3일

⭐ Step 1. 클래스(Class) & 객체(Object)

✔ 클래스란?

객체를 만들기 위한 설계도(blueprint).
예: 자동차 설계도 = 클래스
실제로 도로 위에 있는 자동차 한 대 = 객체

✔ 객체란?

클래스로부터 생성된 실체(instance).
객체는 속성(필드)기능(메서드)을 가짐

📌 예제 — 클래스 & 객체 생성

class Person {
    String name;  // 속성(필드)
    int age;

    void sayHello() { // 기능(메서드)
        System.out.println("Hello, my name is " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person(); // 객체 생성
        p.name = "Tom";
        p.age = 20;

        p.sayHello();
    }
}

✔ 출력

Hello, my name is Tom

⭐ Step 2. 생성자(Constructor)

✔ 생성자란?

객체가 생성될 때 자동으로 호출되는 메서드.

✔ 특징

클래스 이름과 동일해야 함
반환 타입 없음 (void도 X)
객체 초기화 목적
여러 개 만들 수 있음 (오버로딩 가능)

📌 예제 — 생성자 사용

class Car {
    String model;
    int year;

    // 생성자
    Car(String model, int year) {
        this.model = model;
        this.year = year;
    }
}

public class Main {
    public static void main(String[] args) {
        Car c = new Car("Avante", 2020);
        System.out.println(c.model + ", " + c.year);
    }
}

✔ this.model = 이 클래스의 model
✔ 생성자로 바로 초기화 가능


⭐ Step 3. 메서드 오버로딩(Method Overloading)

✔ 오버로딩이란?

같은 이름의 메서드를
매개변수 개수 or 타입이 다르게 여러 개 정의하는 것.

📌 예제 — 오버로딩

class MathUtil {

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

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

    double add(double a, double b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        MathUtil m = new MathUtil();

        System.out.println(m.add(3, 5));        // 8
        System.out.println(m.add(3, 5, 7));     // 15
        System.out.println(m.add(2.5, 3.2));    // 5.7
    }
}

⭐ Step 4. 기본적인 OOP 감 잡기

✔ OOP 4대 개념

🔹 1) 캡슐화(Encapsulation)

데이터를 보호하기 위해
필드(private) + getter/setter를 사용.

🔹 2) 추상화(Abstraction)

복잡한 것은 숨기고
필요한 것만 보여주기.

📌 간단 예제 — 캡슐화

class BankAccount {
    private int balance;  // 외부 접근 불가

    public void deposit(int money) {
        balance += money;
    }

    public int getBalance() {
        return balance;
    }
}

🎯 Day3 문제 (이해도 체크)

Q1. 다음 코드의 출력 결과는?

class Student {
    String name;
    int grade;

    void printInfo() {
        System.out.println(name + " / " + grade);
    }
}

public class Main {
    public static void main(String[] args) {
        Student s = new Student();
        s.name = "Jin";
        s.grade = 3;

        s.printInfo();
    }
}

=> Jin / 3

Q2. 생성자에 대한 설명으로 맞는 것은?

  1. 반환 타입을 반드시 가져야 한다 X
  2. 클래스 이름과 동일해야 한다 O
  3. 생성자는 하나만 존재해야 한다 X
  4. 생성자를 만들지 않으면 객체 생성이 불가능하다 X

Q3. 메서드 오버로딩의 조건으로 옳은 것은?

메서드 이름이 달라야 한다 X
매개변수 개수나 타입이 달라야 한다 O
반환 타입이 다르면 된다 X
static 메서드에서만 가능하다 X

Q4. 다음 코드의 출력 결과는?

class Box {
    int size;

    Box() {
        size = 10;
    }

    Box(int s) {
        size = s;
    }
}

public class Main {
    public static void main(String[] args) {
        Box b1 = new Box();
        Box b2 = new Box(20);

        System.out.println(b1.size + " / " + b2.size);
    }
}

=> 10 / 20

profile
0부터 시작하는 백엔드

0개의 댓글