Java 클래스(Class)

습토리·2025년 2월 23일
0

Java

목록 보기
15/32

클래스와 객체: Java의 진짜 시작

Java를 처음 배웠을 때는 변수, 조건문, 반복문, 데이터 타입 같은 기초 개념을 익히고, 기본적인 프로그램을 만들 수 있으면 충분하다고 생각했다. 하지만 클래스를 본격적으로 공부하면서 ‘이게 진짜 Java구나’라는 느낌을 받았다. 마치 처음에는 Java를 겉핥기만 했던 것 같고, 이제야 진짜 핵심을 마주한 기분이다.


클래스(Class)란?

클래스는 객체를 만들기 위한 설계도(blueprint) 또는 템플릿(template)이다. Java에서는 모든 코드가 클래스 안에 포함되며, 클래스를 기반으로 여러 개의 객체를 만들 수 있다.

예제: 학생 관리 프로그램

만약 학생의 시험 점수를 관리하는 프로그램을 만든다고 가정하면, 학생(Student)성적(Grade) 같은 개념이 필요하다.

Student 클래스의 구성 요소

  • 필드(Fields, 상태): 학생의 ID, 수강 과목, 점수 등
  • 메서드(Methods, 행동): 학생 정보를 수정하거나 조회하는 기능

이렇게 클래스를 정의하면, 여러 명의 학생을 각각 객체로 만들어 관리할 수 있다.


객체(Object)란?

객체는 클래스를 기반으로 생성된 실체(Instance) 이다.
즉, 클래스가 설계도라면 객체는 그 설계도를 기반으로 만들어진 실제 제품이다.

객체지향 프로그래밍(OOP)

Java는 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 언어다. 즉, 프로그램을 객체 단위로 구성하며, 각 객체는 서로 데이터를 주고받으며 협력한다.


예제: 은행의 예금 계좌(SavingsAccount)

은행의 예금 계좌를 클래스로 표현해 보자.

SavingsAccount 클래스의 구성 요소
1. 필드(Fields, 상태)

  • 예금주 이름 (owner)
  • 계좌 번호 (accountNumber)
  • 잔액 (balance)
  1. 메서드(Methods, 행동)
    • 돈을 입금하는 기능 (deposit)
    • 돈을 출금하는 기능 (withdraw)

각 은행 계좌를 객체로 만들면, 실제 계좌처럼 입출금이 가능하다.


Java 코드 예제

class SavingsAccount {
    String owner;
    String accountNumber;
    double balance;

    // 생성자
    public SavingsAccount(String owner, String accountNumber, double balance) {
        this.owner = owner;
        this.accountNumber = accountNumber;
        this.balance = balance;
    }

    // 돈 입금
    void deposit(double amount) {
        balance += amount;
        System.out.println(amount + "원이 입금되었습니다. 현재 잔액: " + balance);
    }

    // 돈 출금
    void withdraw(double amount) {
        if (balance >= amount) {
            balance -= amount;
            System.out.println(amount + "원이 출금되었습니다. 현재 잔액: " + balance);
        } else {
            System.out.println("잔액이 부족합니다.");
        }
    }
}

객체 생성 및 사용

public class Main {
    public static void main(String[] args) {
        // 철수의 계좌 생성
        SavingsAccount 철수계좌 = new SavingsAccount("철수", "12345", 50000);
        
        // 입금 및 출금
        철수계좌.deposit(10000);
        철수계좌.withdraw(30000);
    }
}

실행 결과

10000원이 입금되었습니다. 현재 잔액: 60000
30000원이 출금되었습니다. 현재 잔액: 30000

이처럼 클래스를 활용하면 현실 세계의 개념을 코드로 표현할 수 있고, 객체를 통해 데이터를 조작할 수 있다.


지금까지 main 메서드를 기준으로만 공부했다가, 이제 본격적으로 클래스를 만들고 객체를 다루는 방식을 배우니 너무 헷갈렸다.

지금까지 공부한 방식

public class HelloWorld {
    public static void main(String[] args) {
        // 프로그램 실행
    }
}

여기서 main 메서드는 프로그램의 진입점(entry point)이었다.
✅ Java 프로그램을 실행하면, main() 메서드가 자동으로 실행되는 구조였다.


그런데 갑자기 main() 없이 클래스만 정의하는 코드가 나왔다?!

public class Store {
    public void buyItems() {
        // 물건을 사는 기능
    }
}

🤔 이건 뭐지?
이제 객체지향 방식으로 Java를 다루기 시작한 거다!

💡 차이점 정리

코드 유형역할
main()이 있는 코드프로그램 실행을 위한 "시작점"
main()이 없는 코드"설계도" 역할을 하는 클래스 정의

🚀 클래스는 설계도!

  • Store 클래스는 "가게(Store)"를 표현하는 설계도일 뿐이다.
  • 이 코드는 실행되는 게 아니라, "이런 기능을 가진 객체를 만들겠다" 라고 정의하는 단계다.
  • 객체를 만들고 사용해야만 의미가 있다!

🛠 그렇다면 Store 클래스를 어떻게 사용할까?

이제 객체를 생성하고 buyItems() 메서드를 호출해야 한다.
👇 이렇게 main()에서 Store 객체를 만들어야 실행할 수 있다.

public class Main {
    public static void main(String[] args) {
        // Store 객체 생성
        Store myStore = new Store();
        
        // buyItems() 메서드 호출
        myStore.buyItems();
    }
}

✅ 여기서 new Store();를 통해 객체를 만들어야 비로소 클래스가 동작하는 거다!
myStore.buyItems();를 호출하면 buyItems()의 코드가 실행된다.


🧐 결론: main()이 없던 이유

지금까지는 main()이 있는 코드만 봐서 당연하게 생각했지만,
Java에서는 클래스가 곧 설계도(blueprint) 라는 개념이다.

✔️ public class Store { ... }"가게"라는 개념을 정의
✔️ public void buyItems() { ... }"가게에서 물건을 사는 기능"을 정의
✔️ 하지만, 이건 실제 동작하는 프로그램이 아님!
✔️ 실제 프로그램을 만들려면 main()에서 객체를 만들어서 사용해야 한다.


📌 앞으로 클래스 작성할 때는 이렇게 생각하자!

  1. 설계도(클래스)를 만든다Store 같은 클래스 정의
  2. 객체를 만든다new Store();
  3. 객체의 기능을 사용한다myStore.buyItems();

정리

  • 클래스(Class): 객체를 만들기 위한 설계도
  • 객체(Object): 클래스를 기반으로 만들어진 실체
  • 필드(Fields): 객체의 상태(데이터)를 저장하는 변수들
  • 메서드(Methods): 객체의 행동(기능# 클래스와 객체: Java의 진짜 시작

Java를 처음 배웠을 때는 변수, 조건문, 반복문, 데이터 타입 같은 기초 개념을 익히고, 기본적인 프로그램을 만들 수 있으면 충분하다고 생각했다. 하지만 클래스를 본격적으로 공부하면서 ‘이게 진짜 Java구나’라는 느낌을 받았다. 마치 처음에는 Java를 겉핥기만 했던 것 같고, 이제야 진짜 핵심을 마주한 기분이다.


클래스(Class)란?

클래스는 객체를 만들기 위한 설계도(blueprint) 또는 템플릿(template)이다. Java에서는 모든 코드가 클래스 안에 포함되며, 클래스를 기반으로 여러 개의 객체를 만들 수 있다.

예제: 학생 관리 프로그램

만약 학생의 시험 점수를 관리하는 프로그램을 만든다고 가정하면, 학생(Student)성적(Grade) 같은 개념이 필요하다.

Student 클래스의 구성 요소

  • 필드(Fields, 상태): 학생의 ID, 수강 과목, 점수 등
  • 메서드(Methods, 행동): 학생 정보를 수정하거나 조회하는 기능

이렇게 클래스를 정의하면, 여러 명의 학생을 각각 객체로 만들어 관리할 수 있다.


객체(Object)란?

객체는 클래스를 기반으로 생성된 실체(Instance) 이다.
즉, 클래스가 설계도라면 객체는 그 설계도를 기반으로 만들어진 실제 제품이다.

객체지향 프로그래밍(OOP)

Java는 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 언어다. 즉, 프로그램을 객체 단위로 구성하며, 각 객체는 서로 데이터를 주고받으며 협력한다.


예제: 은행의 예금 계좌(SavingsAccount)

은행의 예금 계좌를 클래스로 표현해 보자.

SavingsAccount 클래스의 구성 요소
1. 필드(Fields, 상태)

  • 예금주 이름 (owner)
  • 계좌 번호 (accountNumber)
  • 잔액 (balance)
  1. 메서드(Methods, 행동)
    • 돈을 입금하는 기능 (deposit)
    • 돈을 출금하는 기능 (withdraw)

각 은행 계좌를 객체로 만들면, 실제 계좌처럼 입출금이 가능하다.


Java 코드 예제

class SavingsAccount {
    String owner;
    String accountNumber;
    double balance;

    // 생성자
    public SavingsAccount(String owner, String accountNumber, double balance) {
        this.owner = owner;
        this.accountNumber = accountNumber;
        this.balance = balance;
    }

    // 돈 입금
    void deposit(double amount) {
        balance += amount;
        System.out.println(amount + "원이 입금되었습니다. 현재 잔액: " + balance);
    }

    // 돈 출금
    void withdraw(double amount) {
        if (balance >= amount) {
            balance -= amount;
            System.out.println(amount + "원이 출금되었습니다. 현재 잔액: " + balance);
        } else {
            System.out.println("잔액이 부족합니다.");
        }
    }
}

객체 생성 및 사용

public class Main {
    public static void main(String[] args) {
        // 철수의 계좌 생성
        SavingsAccount 철수계좌 = new SavingsAccount("철수", "12345", 50000);
        
        // 입금 및 출금
        철수계좌.deposit(10000);
        철수계좌.withdraw(30000);
    }
}

실행 결과

10000원이 입금되었습니다. 현재 잔액: 60000
30000원이 출금되었습니다. 현재 잔액: 30000

이처럼 클래스를 활용하면 현실 세계의 개념을 코드로 표현할 수 있고, 객체를 통해 데이터를 조작할 수 있다.


main() 없이 클래스만 정의하는 코드?

지금까지 main 메서드를 기준으로만 공부했다가, 이제 본격적으로 클래스를 만들고 객체를 다루는 방식을 배우니 너무 헷갈렸다.

지금까지 공부한 방식

public class HelloWorld {
    public static void main(String[] args) {
        // 프로그램 실행
    }
}

여기서 main 메서드는 프로그램의 진입점(entry point)이었다.
✅ Java 프로그램을 실행하면, main() 메서드가 자동으로 실행되는 구조였다.


그런데 main() 없이 클래스만 정의하는 코드가 나왔다?!

public class Store {
    public void buyItems() {
        // 물건을 사는 기능
    }
}

이제 객체지향 방식으로 Java를 다루기 시작한 것이다!

코드 유형역할
main()이 있는 코드프로그램 실행을 위한 "시작점"
main()이 없는 코드"설계도" 역할을 하는 클래스 정의

Store 클래스 활용법

public class Main {
    public static void main(String[] args) {
        // Store 객체 생성
        Store myStore = new Store();
        
        // buyItems() 메서드 호출
        myStore.buyItems();
    }
}

new Store();를 통해 객체를 만들어야 비로소 클래스가 동작한다!
myStore.buyItems();를 호출하면 buyItems()의 코드가 실행된다.


📌 앞으로 클래스 작성할 때는 이렇게 생각하자!

  1. 설계도(클래스)를 만든다Store 같은 클래스 정의
  2. 객체를 만든다new Store();
  3. 객체의 기능을 사용한다myStore.buyItems();

정리

  • 클래스(Class): 객체를 만들기 위한 설계도
  • 객체(Object): 클래스를 기반으로 만들어진 실체
  • 필드(Fields): 객체의 상태(데이터)를 저장하는 변수들
  • 메서드(Methods): 객체의 행동(기능)을 정의하는 함수들
  • 객체지향 프로그래밍(OOP): 프로그램을 객체 단위로 설계하는 방식

Java를 처음 배울 때는 기본 문법만 이해하면 충분하다고 생각했지만, 객체와 클래스를 배우면서 Java의 진짜 모습을 알게 되었다. 아직 어렵지만, 객체지향 개념을 더 깊이 이해하면 코드의 재사용성과 유지보수성이 높아질 거라 기대된다.

앞으로 더 열심히 배워서 Java의 객체지향 프로그래밍을 완전히 내 것으로 만들어야겠다!

)을 정의하는 함수들

  • 객체지향 프로그래밍(OOP): 프로그램을 객체 단위로 설계하는 방식

Java를 처음 배울 때는 기본 문법만 이해하면 충분하다고 생각했지만, 객체와 클래스를 배우면서 Java의 진짜 모습을 알게 되었다. 아직 어렵지만, 객체지향 개념을 더 깊이 이해하면 코드의 재사용성과 유지보수성이 높아질 거라 기대된다.

앞으로 더 열심히 배워서 Java의 객체지향 프로그래밍을 완전히 내 것으로 만들어야겠다!

profile
재미난 삶을 살다

0개의 댓글