클래스 선언하기
객체, 클래스, 인터페이스 섹션에서 객체 지향 개념을 소개할 때 레이싱 자전거, 산악 자전거 및 탠덤 자전거를 하위 클래스로 사용하는 Bicycle 클래스를 예로 들었습니다. 다음은 클래스 선언에 대한 개요를 제공하기 위해 Bicycle 클래스를 구현할 수 있는 샘플 코드입니다. 이후 섹션에서는 클래스 선언을 단계별로 백업하고 설명할 것입니다. 지금은 자세한 내용은 신경 쓰지 마세요.
public class Bicycle {
// the Bicycle class has
// three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has
// one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// the Bicycle class has
// four methods
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}Bicycle의 서브클래스인 MountainBike 클래스에 대한 클래스 선언은 다음과 같습니다:
public class MountainBike extends Bicycle {
// the MountainBike subclass has
// one field
public int seatHeight;
// the MountainBike subclass has
// one constructor
public MountainBike(int startHeight, int startCadence,
int startSpeed, int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}
// the MountainBike subclass has
// one method
public void setHeight(int newValue) {
seatHeight = newValue;
}
}MountainBike는 Bicycle의 모든 필드와 메서드를 상속하고 seatHeight 필드와 이를 설정하는 메서드를 추가합니다(산악 자전거에는 지형에 따라 위아래로 움직일 수 있는 좌석이 있습니다).
다음과 같은 방식으로 정의된 클래스를 보았습니다:
class MyClass {
// field, constructor, and
// method declarations
}이것은 클래스 선언입니다. 클래스 본문(중괄호 사이의 영역)에는 새 객체를 초기화하는 생성자, 클래스 및 객체의 상태를 제공하는 필드에 대한 선언, 클래스 및 객체의 동작을 구현하는 메서드 등 클래스에서 생성된 객체의 수명 주기를 제공하는 모든 코드가 포함되어 있습니다.
앞의 클래스 선언은 최소한의 선언입니다. 여기에는 클래스 선언의 필수 구성 요소만 포함됩니다. 클래스 선언의 시작 부분에 클래스의 수퍼클래스 이름, 인터페이스 구현 여부 등 클래스에 대한 자세한 정보를 제공할 수 있습니다. 예를 들어
class MyClass extends MySuperClass implements YourInterface {
// field, constructor, and
// method declarations
}MyClass가 MySuperClass의 서브클래스이며 YourInterface 인터페이스를 구현한다는 의미입니다.
클래스 선언의 첫 줄이 상당히 복잡해질 수 있다는 것을 알 수 있듯이 public 또는 private과 같은 수정자를 맨 처음에 추가할 수도 있습니다. 다른 클래스가 MyClass에 접근할 수 있는 클래스를 결정하는 수정자 public과 private은 이 섹션의 뒷부분에서 설명합니다. 인터페이스와 상속 섹션에서는 클래스 선언에서 extends와 implements 키워드를 사용하는 방법과 이유를 설명합니다. 지금은 이러한 추가 복잡성에 대해 걱정할 필요가 없습니다.
일반적으로 클래스 선언에는 이러한 구성 요소가 순서대로 포함될 수 있습니다:
public,private등의 수정자 및 나중에 만나게 될 다른 여러 가지 수정자. (단,private수정자는 중첩 클래스에만 적용될 수 있습니다).- 클래스 이름(관례에 따라 첫 글자는 대문자로 표기).
- 클래스의 부모(슈퍼클래스)의 이름(있는 경우), 앞에
extends키워드를 붙입니다. 클래스는 하나의 부모만 확장(서브클래스)할 수 있습니다. - 클래스가 구현한 인터페이스가 있는 경우 쉼표로 구분된 목록이며, 그 앞에
implements키워드가 붙습니다. 클래스는 하나 이상의 인터페이스를 구현할 수 있습니다. - 중괄호
{}로 둘러싸인 클래스 본문.
멤버 변수 선언하기
변수에는 여러 종류가 있습니다:
- 클래스의 멤버 변수 - 이를 필드라고 합니다.
- 메서드 또는 코드 블록에 있는 변수를 로컬 변수라고 합니다.
- 메서드 선언의 변수 - 이를 매개변수라고 합니다.
Bicycle클래스는 다음 코드 줄을 사용하여 필드를 정의합니다:
public int cadence;
public int gear;
public int speed;필드 선언은 순서대로 세 가지 구성 요소로 이루어져 있습니다:
public또는private과 같은 0개 이상의 수정자.- 필드의 타입.
- 필드의 이름입니다.
Bicycle의 필드 이름은 cadence, gear, speed이며 모두 데이터 타입이 정수(int)입니다. public 키워드는 이러한 필드를 공용 멤버로 식별하며, 클래스에 액세스할 수 있는 모든 객체가 액세스할 수 있습니다.
멤버에 액세스할 수 있는 대상 제어
첫 번째(가장 왼쪽) 수정자를 사용하면 멤버 필드에 액세스할 수 있는 다른 클래스를 제어할 수 있습니다. 지금은 public와 private만 고려하세요. 다른 액세스 수정자는 나중에 설명하겠습니다.
public수정자 - 모든 클래스에서 필드에 액세스할 수 있습니다.private수정자 - 해당 클래스 내에서만 필드에 액세스할 수 있습니다.
캡슐화의 정신에 따라 필드를 비공개로 설정하는 것이 일반적입니다. 즉, Bicycle 클래스에서만 직접 액세스할 수 있습니다. 하지만 여전히 이러한 값에 대한 액세스가 필요합니다. 필드 값을 가져오는 공용 메서드를 추가하여 간접적으로 접근할 수 있습니다:
public class Bicycle {
private int cadence;
private int gear;
private int speed;
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
public int getCadence() {
return cadence;
}
public void setCadence(int newValue) {
cadence = newValue;
}
public int getGear() {
return gear;
}
public void setGear(int newValue) {
gear = newValue;
}
public int getSpeed() {
return speed;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}
변수 타입 설정하기
모든 변수에는 타입이 있어야 합니다. int, float, boolean 등과 같은 기본 타입을 사용할 수 있습니다. 또는 문자열, 배열 또는 객체와 같은 참조 타입을 사용할 수 있습니다.
변수 이름 지정하기
필드, 지역 변수 또는 매개 변수 등 모든 변수는 언어 기초 섹션인 변수 이름 지정하기에서 다룬 것과 동일한 명명 규칙을 따릅니다.
이 섹션에서는 메서드와 클래스 이름에 동일한 명명 규칙을 사용하지만 다음과 같은 점을 유의하세요.
- 클래스 이름의 첫 글자는 대문자이어야 하고
- 메서드 이름의 첫 번째(또는 유일한) 단어는 동사이어야 합니다.