클래

클래스 에서 Java

12개의 연습 문제

클래스 소개

Java의 대표적인 객체 지향 구성 요소는 _클래스_예요. 클래스는 데이터(필드, 인스턴스 변수라고도 해요)와 동작(메서드)을 함께 묶은 것이에요. 클래스의 필드와 메서드를 _멤버_라고 불러요.

멤버에 대한 접근은 접근 제어자로 제어할 수 있는데, 가장 흔히 쓰이는 두 가지는 다음과 같아요:

  • public: 어떤 코드든 이 멤버에 접근할 수 있어요(제한 없음).
  • private: 같은 클래스 안의 코드만 이 멤버에 접근할 수 있어요.

Java에서 접근 제어자를 지정하지 않으면 기본값은 _패키지 가시성_이에요. 이 경우 멤버는 같은 패키지에 정의된 모든 클래스에서 볼 수 있어요.

이렇게 관련 있는 데이터와 동작을 묶고 멤버에 대한 접근을 제한하는 것을 캡슐화라고 해요. 캡슐화는 객체 지향의 핵심 개념 중 하나예요.

클래스는 그 클래스의 인스턴스를 만들기 위한 틀이라고 생각하면 돼요. 클래스의 인스턴스를 만드는 것(_객체_라고도 해요)에는 new 키워드를 사용해요:

class Car {
}

// Create two car instances
Car myCar = new Car();
Car yourCar = new Car();

필드에는 타입과 이름이 있고(camelCase 표기법을 써요), 클래스 안 어디에든 정의할 수 있어요(PascalCase 표기법을 써요).

class Car {
    // Accessible by anyone
    public int weight;

    // Only accessible by code in this class
    private String color;
}

필드에는 초깃값을 선택적으로 지정할 수 있어요. 필드에 초깃값을 지정하지 않으면 그 타입의 기본값으로 설정돼요. 인스턴스의 필드 값은 점 표기법으로 읽고 바꿀 수 있어요.

class Car {
    // Will be set to specified value
    public int weight = 2500;

    // Will be set to default value (0)
    public int year;
}

Car newCar = new Car();
newCar.weight; // => 2500
newCar.year;   // => 0

// Update value of the field
newCar.year = 2018;

private 필드는 보통 메서드를 호출하는 부수 효과로 갱신해요. 이런 메서드는 보통 아무 값도 반환하지 않는데, 이때 반환 타입은 void로 지정해야 해요:

class CarImporter {
    private int carsImported;

    public void importCars(int numberOfCars)
    {
        // Update private field
        carsImported = carsImported + numberOfCars;
    }
}

Java 클래스에서는 public 필드를 쓰는 것이 관례가 아니에요. 보통 private 필드를 쓰고, _게터_와 세터를 통해 접근해요.

클래스 안에서 this 키워드는 현재 클래스를 가리켜요. 매개변수가 필드와 이름이 같을 때 특히 유용해요:

class CarImporter {
    private int carsImported;

    public void setImportedCars(int carsImported)
    {
        // Update private field from public method
        this.carsImported = carsImported;
    }
}
GitHub에서 편집 링크가 새 창이나 탭에서 열려요

클래스 배우기