2025-08-27 Object클래스, 열거형

Ckd gus·2026년 2월 2일

Object 클래스부터 StringBuilder까지 핵심 정리

오늘은 Object 클래스, enum, final, String / Math 클래스,
그리고 내부 클래스와 StringBuilder까지 한 번에 정리했다.
전반적으로 이미 배웠던 개념들을 다시 묶어서 복습하는 느낌이었다.


Object 클래스

Object 클래스는 모든 클래스의 최상위 부모 클래스이다.
다른 클래스에서 extends를 명시하지 않으면 자동으로 Object를 상속한다.

모든 객체가 공통으로 가져야 할 기본 메서드를 제공한다.

대표적인 메서드

  • toString()
  • equals()
  • hashCode()

이 메서드들은 오버라이딩해서 자주 사용한다는 공통점이 있다.


toString()

toString()은 객체를 문자열로 표현하는 메서드이다.
기본 구현은 클래스이름@해시코드 형태를 반환한다.

객체를 출력할 때 변수만 출력해도
컴파일러가 자동으로 toString()을 호출한다.

public class ToStringExam {
    private String name;
    private int age;

    public ToStringExam(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "이름 : " + name + ", 나이 : " + age + "살";
    }

    public static void main(String[] args) {
        ToStringExam exam = new ToStringExam("홍길동", 20);

        System.out.println(exam);            // toString 자동 호출
        System.out.println(exam.toString()); // 명시적 호출
    }
}

IntelliJ에서는 Alt + Insert를 사용해
toString()을 자동 생성할 수 있다.


equals()와 hashCode()

두 객체의 내용이 같은지 비교하려면
equals()를 오버라이딩해야 한다.

그리고 equals를 오버라이딩하면 반드시 hashCode도 같이 오버라이딩해야 한다.

이유

equals()가 true면 hashCode()도 반드시 같아야 한다 (자바 규칙)

import java.util.Objects;

public class EqualsExam {
    private int x;
    private int y;

    public EqualsExam(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) return false;
        EqualsExam that = (EqualsExam) o;
        return x == that.x && y == that.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }

    public static void main(String[] args) {
        EqualsExam ex1 = new EqualsExam(3, 4);
        EqualsExam ex2 = new EqualsExam(3, 4);

        System.out.println(ex1.equals(ex2)); // true
        System.out.println(ex1 == ex2);      // false (주소 비교)
    }
}
  • == : 참조 주소 비교
  • equals() : 객체의 논리적 동등성 비교

enum (열거형)

enum클래스에 들어갈 수 있는 값의 종류를 제한하는 타입이다.

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class EnumTest {
    public static void main(String[] args) {
        Day today = Day.MONDAY;

        switch (today) {
            case MONDAY:
            case FRIDAY:
                System.out.println("평일");
                break;
            case SATURDAY:
            case SUNDAY:
                System.out.println("주말");
                break;
        }
    }
}

enum의 장점

  • 타입 안정성
  • 상수 그룹화
  • 싱글톤 보장
  • switch문 사용 가능

final 키워드

final변경 불가를 의미한다.

위치의미
변수값 변경 불가
메서드오버라이딩 불가
클래스상속 불가
public final class ImmutableClass {
}

public class FinalExample {
    private final int MAX = 100;

    public final void display() {
        System.out.println(MAX);
    }
}

String 클래스

String불변 객체이다.
한 번 생성된 문자열은 변경할 수 없다.

자주 사용하는 메서드 예제

String str = "  Hello Java World  ";

str.length();
str.charAt(5);
str.substring(8, 12);
str.contains("Java");
str.trim();
str.replace("Java", "Python");

Math 클래스

수학 연산을 위한 유틸리티 클래스이다.

Math.abs(-10);
Math.max(10, 20);
Math.sqrt(16);
Math.random();
Math.PI;

내부 클래스 (Inner Class)

클래스 내부에 선언된 클래스이다.

종류
1. 멤버 내부 클래스
2. 정적 내부 클래스
3. 지역 내부 클래스
4. 익명 내부 클래스

public class OuterClass {
    private int outerField = 10;

    public class InnerClass {
        void display() {
            System.out.println(outerField);
        }
    }
}

익명 클래스는 한 번만 쓰고 버리는 객체
이벤트 처리, 스레드 등에 자주 사용된다.


StringBuilder vs StringBuffer

구분StringBuilderStringBuffer
동기화XO
속도빠름느림
사용처단일 스레드멀티 스레드
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
sb.insert(6, "Beautiful ");
sb.delete(6, 16);
sb.reverse();

문자열 반복 연결 시 StringBuilder가 훨씬 효율적이다.


느낀 점

오늘 수업은 실습 위주로 진행되어
어제보다 부담 없이 들을 수 있었다.

이번 주에 배운 핵심 키워드들이 워낙 많아서
오늘은 전체 흐름을 다시 복습하는 데 집중해야 할 것 같다.

profile
백엔드 공부중입니다.

0개의 댓글