Java/강의

[📙 Java 문법 종합반] 2-1. 클래스와 객체

가지코딩 2025. 4. 15. 15:52

📙 목차

  1. 클래스(class)란?
  2. 객체(object)란?
  3. 클래스 구조(속성, 생성자, 기능)
  4. 게터(getter)와 세터(setter)
  5. 실습 과제

🧡 학습 목표

  • 클래스와 객체가 무엇인지 학습한다.
  • 클래스를 직접 만들어보고 객체화하는 방법을 학습한다.

1. 클래스(class)란?

  • Java에서 클래스는 객체를 만들 때 필요한 청사진(설계도)이다.
  • 클래스의 첫 글자는 대문자


2. 객체(object)란?

  • 실제로 존재하는 것
    • 우리가 주변에서 볼 수 있는 컴퓨터, 계산기, 자동차 같은 사물들이 객체이다.
    • 어떤 개념이나 논리 같은 것들도 객체가 될 수 있다.
    • 덧셈, 뺄셈 등 눈에 보이지 않은 것들도 무형의 객체가 될 수 있다.
  • 클래스가 준비되어 있다면 클래스를 기준으로 여러 객체들을 만들어 낼수 있다.

 

 

 

Person.class -  사람이라는 객체를 만들어 보자

 

  • Person 클래스는 사람 객체를 만들기 위한 설계도이다.
public class Person() { 
		...
}

 

  • 객체를 만들때 new 라는 키워드를 사용한다.
  • 객체를 만드는 과정을 인스턴스화라고 표현한다.
  • 인스턴스화가 되면 Java 메모리 상에 객체가 만들어진다.
  •  
public class Main {
    public static void main(String[] args) {
        Person personA = new Person(); // ✅ 첫번째 객체 생성 
        Person personB = new Person(); // ✅ 두번째 객체 생성
    }
}

3. 클래스 구조(속성, 생성자, 기능)

클래스 구조는 속성, 생성자, 기능 부분으로 나누어진다.

class Person {
    // 1. 속성
    String name;
    int age;
    String address;

    // 2. 생성자
    Person() {}

    // 3. 기능
    void introduce() {
        System.out.println("안녕하세요.");
        System.out.println("나의 이름은 " + this.name + "입니다.");
        System.out.println("나이는 " + this.age + "입니다.");
    }
}

 

 

속성 (property, field)

  • 클래스가 가지는 데이터(상태)를 저장하는 변수이다
  • 클래스 내부에 선언된 변수로, 객체의 고유한 정보를 담는다.
  • 특징
    • 객체가 생성될 때 각 객체별로 따로 저장된다.
    • 접근 제어자(private, public, 등)를 붙여 정보 은닉을 하기도 한다.
    • 객체를 통해 접근 가능하다. (객체명.속성())
class Person {
    String name;
    int age;
    String address;
}
public class Main {
    public static void main(String[] args) {

        // 1. 객체 생성
        Person personA = new Person();
        Person personB = new Person();

        // 2. ✅ 객체를 통해 접근 personA 의 name
        System.out.println(personA.name);

        // 3. ✅ 객체를 통해 접근 personB 의 name
        System.out.println(personB.name);
    }
}

 

 

생성자 (Constructor)

  • 객체가 생성될 때 자동으로 호출되는 메서드
  • 객체의 초기 상태를 설정할 때 사용한다.
  • 클래스 이름과 동일하며, 리턴 타입이 없다
  • 특징
    • 생성자를 명시하지 않으면 기본 생성자가 자동으로 제공된다.
    • 여러 개의 생성자를 만들 수 있으며, 이를 생성자 오버로딩이라고 한다.
class Person {
    String name;
    int age;
    String address;

    // ❌ 기본생성자 제거됨
    Person() {}
    
    // 새로운 생성자
    Person(String name, int age) {
        this.name = name;  // this는 현재 객체를 참조
        this.age = age;
    }
}
public class Main {
    public static void main(String[] args) {
        Person personB = new Person("Steve", 5);
    }
}

 

 

기능(메서드, Method)

  • 객체가 수행할 수 있는 동작 또는 행위
  • 함수와 유사하지만 클래스 내부에 존재한다.
  • 특징
    • 객체를 통해 호출 가능하다. (객체명.메서드())
    • 메서드는 리턴 타입이 있으며, void는 리턴값이 없음을 의미한다.
public class Person {
    String name;
    int age;

    public void sayHello() {
        System.out.println("안녕하세요, 저는 " + name + "입니다.");
    }

    public int getAgeInMonths() {
        return age * 12;
    }
}
public class Main {
    public static void main(String[] args) {
        Person personA = new Person("gygim", 10);
        personA.sayHello(); // ✅ personA 객체 introduce() 호출
    }
}

4. 게터(getter)와 세터(setter)

게터(getter)

클래스의 속성을 가져올 때 사용되는 기능이다.

String getName() {
    return this.name;
}

int getAge() {
    return this.age;
}

String getAddress() {
    return this.address;
}
String name = person.getName();
int age = person.getAge();
String address = person.getAddress();

 

 

세터(Settter)

객체의 속성을 외부에서 설정할 수 있게 해주는 기능이다.

void getName(String name) {
    this.name = name;
}

void getAge(int age) {
    this.age = age;
}

void setAddress(String address) {
    this.address = address;
}
public class Main {
    public static void main(String[] args) {
        Person personA = new Person("gygim", 20);
        Person personB = new Person("Steve", 15);

        personA.setAddress("서울"); // ✅ personA 의 주소 설정
        personB.setAddress("미국"); // ✅ personA 의 주소 설정
    }
}

5. 실습 과제

자동차 클래스를 상상해서 만들어 보고 활용해 보세요.

  • Car 클래스를 만든다.
  • 속성 - 자동차의 속성을 저장할 변수를 만든다.
  • 생성자 - 조립할 속성을 골라 객체화를 시켜주세요.
  • 기능 - 다양한 기능을 만들어보고 활용해보세요.
    • drive() 주행 기능
    • accelerate() 가속 기능
public class Car {
    String name;
    String color;
    int speed = 100;

    Car(String name, String color){
        this.name = name;
        this.color = color;
    }

    void drive() {
        System.out.printf("%s %s 주행 시작\n", this.color, this.name);
    }
    void accelerate() {
        this.speed += 10;
        System.out.println("현재 속도: " + this.speed);
    }
}
public class Main {
    public static void main(String[] args) {
        Car myCar = new Car("BMW", "검은색");

        myCar.drive();
        myCar.accelerate();
        myCar.accelerate();
        myCar.accelerate();
    }
}