[자바/기초] 클래스와 객체

객체 (Object)

- 클래스의 정의된 내용에 맞춰 메모리에 생성된 형태를 의미한다.

- 정의한 클래스에 내용에 따라 속성과 기능이 다른 용도를 갖는다.

인스턴스 (Instance)

- 클래스와 객체의 관계를 나타낸다.

- 클래스로부터 객체를 선언한다를 인스턴스 화 한다라고도 표현한다.

- 어떤 객체는 어떤 클래스의 인스턴스이다.

클래스 (Class)

- 객체의 설계도이다.

- 데이터와 기능의 결합한 모듈이다.

- 사용자가 직접 설계하는 사용자 정의 타입이다.

- 객체를 생성하는 용도로 사용된다.

클래스 사용

- 클래스는 객체를 만들기 위한 설계도이며, 객체 변수, 메소드들로 이뤄져있다.

public class Days {
    // 객체 변수
    int day;
    
    // 메소드
    // 리턴타입 메소드명(파라미터) { 기능; }
    public void setDay(int day_) {
        day = day_;
    }
}

// 클래스명 객체명 = new 클래스명();
Days days = new Days();

생성자 (Constructor)

- "new" 키워드로 인스턴스를 생성할 때, 제일 먼저 실행되는 메소드이다.

- 생성자 명명 규칙

    - 클래스 이름과 동일한 이름이어야 한다.

    - 반환 값은 없지만 void 형으로 적어주면 안된다.

    - 기본 생성자 외에 여러 개의 생성자를 가질 수 있다.

public class 클래스명 {
    클래스명() {}
}

기본 생성자

- 매개변수가 없고, 어떤 실행문도 없는 생성자를 말한다.

- 모든 클래스에는 반드시 하나 이상의 생성자가 정의된다.

- Java Complier가 어떤 생성자도 없을 경우, 기본적으로 추가해준다.

- 어떤 생성자가 있는 경우, Complier가 기본 생성자를 별도로 추가하지 않는다.

매개변수가 있는 생성자

- 매서드처럼 매개변수를 인자로 받아 인스턴스 초기화에 값을 사용할 수 있는 생성자를 말한다.

- 객체 생성 후 set 메소드를 호출하는 것보다 간결하게 작성할 수 있다.

this 키워드와 this()

this

- 인스턴스 자기 자신을 가르키는 참조변수이다.

- 인스턴스의 주소가 저장되어 있으며, 숨겨진 채로 존재한다.

- static 메서드에서는 사용이 불가능하다.

this()

- 같은 클내스 내부의 다른 생성자를 호출할 때 사용된다.

- 생성자 첫 문장에서만 사용이 가능하다.

예제

package zerobase.chapter07;

// Car 클래스 → 객체 변수, 메소드
class Car {
    String name;    // 이름
    String type;    // 종류

    Car() {    System.out.println("기본 생성자 출력!");    }
    
    Car(String name, String type) {
        this.name = name;
        this.type = type;
        System.out.println("매개변수가 있는 생성자 출력!");
    }

    public void printCarInfo() {
        System.out.println("== Car Info ==");
        System.out.println("name = " + name);
        System.out.println("type = " + type);
    }

    public void move()    {    System.out.println("이동!");    }
    public void breake()  {    System.out.println("정지!");    }
    public void load()    {    System.out.println("짐을 주세요!");    }
    public void horn()    {    System.out.println("빵빵!");    }
}

public class Main {
    public static void main(String[] args) {
        Car car1= new Car();
        car1.name = "Seltos";
        car1.type = "SUV";
        car1.printCarInfo();
        car1.move();
        car1.breake();

        Car car2 = new Car("Kona", "SUV");
        car2.printCarInfo();
        car2.load();
        car2.horn();
    }
}

오버로딩 (Overloading)

- 한 클래스 내에서 같은 이름의 메소드를 여러 개 정의

- 오버로딩 조건

    - 메소드의 이름이 같아야 한다.

    - 메소드의 매개변수의 수 또는 타입이 달라야 한다.

    - 리턴 타입의 차이로는 오버로딩이 성립되지 않는다.

public class Days {
    public Days() {}
    public Days(String day) {
        // 실행문
    }
}

접근제어자

- 클래스의 변수나 메소드의 접근에 제한을 두는 키워드이다.

- 접근제어자의 종류

키워드 설명
private   해당 클래스에서만 접근이 가능하다.
public   어디서든 접근이 가능하다.
default   해당 패키지 내에서만 접근이 가능하다.
protected   해당 패키지 및 상속받은 클래스에서만 접근이 가능하다.

Static 키워드

- 변수나 메소드의 특성을 바꾸는 키워드이다.

- Static 키워드의 특징

    - 메모리에 한번만 할당된다.

    - Static 변수나 메소드는 공유되는 특성을 가지고 있다.

- Static 클래스 변수는 해당 클래스의 각 객체들이 값을 공유한다.

- Static 클래스 메소드는 객체를 생성하지 않아도 호출이 가능하다.


⊙ 참고 문헌

  1. 마종현, 「제로베이스 백엔드 취업 파트타임 스쿨 5기:Part 01. Java 기초-Chapter 01. Java 프로그래밍-07.클래스와 객체」, 제로베이스, 2024, https://zero-base.co.kr/
  2. 정영진, 「제로베이스 백엔드 취업 파트타임 스쿨 5기:Part 01-2. 쉽게 배우는 자바-Chapter 06. 클래스와 객체」, 제로베이스, 2024, https://zero-base.co.kr/