2025-08-22 객체지향 기초

Ckd gus·2026년 2월 2일

객체지향 개념 복습 – 메서드 오버로딩, 생성자, static 정리

오늘은 어제 배운 내용을 다시 복습하면서 객체지향 프로그래밍의 여러 핵심 개념들을 학습했다.
이론 위주이긴 했지만, 개념들이 점점 서로 연결되는 느낌이 들어서 의미 있는 시간이었다.


메서드 오버로딩 (Method Overloading)

메서드 오버로딩이란 같은 이름의 메서드를 여러 개 정의하는 것이다.

단, 다음 조건을 만족해야 한다.

  • 매개변수의 개수 또는 타입이 달라야 한다
  • 매개변수 이름만 다른 것은 오버로딩이 아님
  • 사용자 입장에서 사용 편의성을 높여준다
public class MethodOverloading {

    public void printf(int value) {
        System.out.println("정수 : " + value);
    }

    public void printf(double value) {
        System.out.println("실수 : " + value);
    }

    public void printf(String value) {
        System.out.println("문자열 : " + value);
    }

    public void printf(String... values) {
        System.out.println("여러 문자열:");
        for (String value : values) {
            System.out.print(value + " ");
        }
        System.out.println();
    }
}

이처럼 같은 이름의 메서드를 상황에 맞게 사용할 수 있다.


메서드 체이닝 (Method Chaining)

메서드 체이닝이란 메서드를 연속해서 호출하는 방식이다.
보통 메서드에서 this를 반환할 때 사용한다.

class Car {
    String name;
    int speed;

    Car setName(String name) {
        this.name = name;
        return this;
    }

    Car setSpeed(int speed) {
        this.speed = speed;
        return this;
    }

    void drive() {
        System.out.println(name + "이(가) " + speed + "km로 달립니다!");
    }
}

public class Main {
    public static void main(String[] args) {
        new Car()
            .setName("BMW")
            .setSpeed(100)
            .drive();
    }
}

아직은 익숙하지 않지만, 많이 사용해보면서 익혀야 할 것 같다.


생성자 (Constructor)

모든 클래스는 생성자를 가지고 있다.
생성자를 정의하지 않으면 컴파일러가 기본 생성자(Default Constructor)를 자동으로 만들어준다.

생성자의 특징

  • 객체 생성 시 단 한 번만 호출
  • 반환 타입이 없음
  • 생성자 이름은 클래스 이름과 동일
  • 객체 초기화 목적
public class Book {
    String title;
    String author;
    int price;

    public Book() {
        title = "Java";
        author = "구창현";
        price = 30000;
    }
}

생성자를 사용하지 않는 경우

Car c1 = new Car();
c1.name = "현대";
c1.number = 1234;

생성자를 사용하는 경우

class Car {
    String name;
    int number;

    Car(String n, int num) {
        name = n;
        number = num;
    }
}

Car c1 = new Car("현대", 1234);

생성자를 사용하면 초기화 과정의 번거로움과 실수를 줄일 수 있다.


this 키워드

  • this : 현재 객체(인스턴스)를 가리키는 참조 변수
  • this() : 같은 클래스의 다른 생성자 호출
this.name = name;

상속 (Inheritance)

상속은 부모 클래스의 기능을 물려받아 사용하는 것이다.
final 키워드가 붙은 클래스는 상속할 수 없다.

이 개념은 다음 수업에서 더 깊이 다룰 예정이다.


패키지 (Package)

패키지는 관련된 클래스들을 그룹화하는 구조이다.
클래스 이름 충돌을 방지하고 관리가 용이해진다.

윈도우의 폴더 구조와 유사하다.

패키지 작성 규칙

  • 도메인 주소를 역순으로 작성
  • 예: com.company.project
package com.mycompany.model;

import

import다른 패키지에 있는 클래스를 가져오는 것이다.

import java.util.Scanner;
import java.util.Random;

static import

import static java.lang.Math.PI;
import static java.lang.Math.sqrt;
double area = PI * 5 * 5;
double root = sqrt(16);

Math.를 생략할 수 있어 편리하지만,
과도하게 사용하면 가독성이 떨어질 수 있다.


static 키워드

  • 클래스 로딩 시 한 번만 메모리에 올라감
  • 객체 생성 없이 사용 가능
  • 모든 객체가 공유

주의할 점

  • static 메서드에서는 static 필드만 접근 가능
  • 인스턴스 필드에는 접근 불가

초보자가 알아야 할 메모리 개념

  • new를 사용할 때마다 인스턴스 생성
  • 참조되지 않는 인스턴스는 가비지 컬렉션 대상
  • static 필드는 클래스 로딩 시 딱 한 번 메모리에 적재
  • 인스턴스 메서드는 객체 생성 후 사용
  • 클래스 메서드는 클래스명.메서드()로 호출
  • 메서드 내부 변수는 메서드 종료 시 메모리에서 제거

느낀 점

오늘은 어제 잠깐 배운 내용들을 다시 복습하면서
메서드 오버로딩, 메서드 체이닝 등 여러 개념을 배웠다.

역시 백엔드 쪽은 공부해야 할 개념이 정말 많다는 생각이 들었다.
그래도 로또, 주사위, 책 같은 예제를 객체로 추상화해보는 과정이 재미있었다.

주말 동안 강사님이 내주신 과제를 풀면서
복습도 하고, 잠깐 쉬는 시간을 가져야겠다.

profile
백엔드 공부중입니다.

0개의 댓글