공부 기록/Java with ChatGPT

[Java/ChatGPT] Day 2: 클래스와 객체, 메서드

dev.jelee 2025. 6. 9. 17:57

[ 학습 목표 ]

  1. 클래스와 객체란?
  2. 필드(멤버 변수)와 메서드
  3. 생성자(Constructor)
  4. 객체 생성 및 사용법
  5. 메서드 매개변수와 반환값

 

[ 이론 ]

1. 클래스(class)란?

  • 객체를 만들기 위한 설계도
  • 예: 사람이라는 클래스를 만들면, 홍길동, 김영희는 객체(instance)
  • name, age는 필드(field)라고 한다.
    => 객체의 속성을 저장하는 변수
  • introduce()는 메서드(method)라고 한다.
    => void를 붙이면 이 메서드는 아무 것도 반환하지 않는다는 의미다.
public class Person {
    String name;
    int age;

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

 

2. 객체 생성

  • Person() 클래스가 있고, 이를 토대로 p1이라는 인스턴스. 즉 객체를 만드는 것이다.
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "홍길동";
        p1.age = 25;

        p1.introduce();
    }
}

 

 

3. 생성자(Constructor)

  • 생성자는 class와 동일한 이름이어야 한다.
  • 파라미터(매개변수)에 아무것도 없으면 기본 생성자이다.
  • 파라미터에 1개만, 2개 다 넣을 수도 있다.
  • new 키워드를 통해 객체를 만들 때 실행된다.
  • 객체의 초기 상태를 설정하는데 사용된다.
  • 메서드 처럼  생겼지만 반환 타입이 없다.
  • 객체 생성 시에만 호출된다.
  • 오버로딩 가능하다.
public class Person {
    String name;
    int age;

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

    void introduce() {
        System.out.println("이름: " + name + ", 나이: " + age);
    }
}
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("김코딩", 24);
        p1.introduce();
    }
}

 

[ 실습 ]

실습 1. Car 클래스를 만들고 객체를 사용해보기

public class Car {
    String brand;
    int year;

    Car(String brand, int year) {
        this.brand = brand;
        this.year = year;
    }

    void info() {
        System.out.println(year + "년식 " + brand + " 자동차입니다.");
    }
}
public class Main {
    public static void main(String[] args) {
        Car myCar = new Car("현대", 2020);
        myCar.info();
    }
}

 

실습 2. 사용자 정의 클래스 Student 만들기

요구사항

  • 필드: 이름, 나이, 학번
  • 메서드: 자기소개 (introduce()), 학번 출력 (printStudentId())

내가 작성한 코드 ▼

public class Student {
  String name;
  int age;
  int studentId;

  Student (String name, int age, int studentId) {
    this.name = name;
    this.age = age;
    this.studentId = studentId;
  }

  void introduce() {
    System.out.println("안녕하세요. 제 이름은 " + name + "입니다. 나이는 " + age + "살 입니다.");
  }
  void printStudentId() {
    System.out.println("제 학번은 " + studentId + "입니다.");
  }
}

 

[ 자가 테스트 문제 ]

1. Book 클래스 만들어보기

  • 필드: 제목(String), 저자(String)
  • 생성자에서 초기화
  • printInfo() 메서드로 정보 출력
public class Book {
  String title;
  String author;

  Book(String title, String author) {
    this.title = title;
    this.author = author;
  }

  void printInfo() {
    System.out.println("제목: " + title + ", 저자: " + author);
  }
}
public class Main {
  public static void main(String[] args) {
    Book book = new Book("개미", "베르나르 베르베르");

    book.printInfo();
  }
}

 

2. Calculator 클래스를 만들어보세요.

  • 메서드: add(int a, int b), subtract, multiply, divide
  • 결과를 출력하는 메서드
public class Calculator {

  // Stateless 설계
  
  int add(int a, int b) {
    return a + b;
  }

  int subtract(int a, int b) {
    return a - b;
  }

  int multiply(int a, int b) {
    return a * b;
  }
  
  double divide(int a, int b) {
    if (b == 0) {
      throw new ArithmeticException("0으로 나눌 수 없습니다.");
    }
    return (double) a / b;
  }
}
public class Main {
  public static void main(String[] args) {
    Calculator cal = new Calculator();
    System.out.println(cal.add(1, 4));
    System.out.println(cal.subtract(1, 4));
    System.out.println(cal.multiply(1, 4));
    System.out.println(cal.divide(1, 4));
  }
}

 

 

 


[ 메모 ]

  • 클래스와 객체 관계 요약
클래스 객체
설계도 실체
정의만 존재 실제 동작 가능
추상적 구체적
메모리에 저장되지 않음 메모리에 생성 됨