변수

이전 섹션에서 배운 것처럼 객체는 필드에 상태를 저장합니다.

int cadence = 0;
int speed = 0;
int gear = 1;

|객체란 무엇인가요? 토론에서 필드에 대해 소개했지만 다음과 같은 몇 가지 궁금한 점이 있을 것입니다: 필드 이름을 짓는 규칙은 무엇인가요? int 외에 다른 데이터 타입에는 어떤 것이 있나요? 필드를 선언할 때 필드를 초기화해야 하나요? 명시적으로 초기화하지 않으면 필드에 기본값이 할당되나요? 이 섹션에서는 이러한 질문에 대한 답을 살펴보겠지만, 그 전에 먼저 알아야 할 몇 가지 기술적 차이점이 있습니다. Java 프로그래밍 언어에서는 ‘필드’와 ‘변수’라는 용어가 모두 사용되는데, 이 두 용어가 같은 것을 가리키는 것처럼 보이기 때문에 초보 개발자들이 흔히 혼동하는 경우가 많습니다.

Java 프로그래밍 언어에서는 다음과 같은 종류의 변수를 정의합니다:

  • 인스턴스 변수(Instance Variables, Non-Static Fields) 기술적으로 말하자면, 객체는 개별 상태를 “non-static fields”, 즉 static 키워드 없이 선언된 필드에 저장합니다. Non-static fields는 클래스의 각 인스턴스마다(즉, 각 객체마다) 고유한 값을 가지므로 인스턴스 변수로도 알려져 있으며, 한 자전거의 currentSpeed는 다른 자전거의 currentSpeed와 독립적입니다.
  • 클래스 변수(Class Variables, Static Fields) 클래스 변수는 static 수정자로 선언된 모든 필드로, 클래스가 인스턴스화된 횟수와 관계없이 컴파일러에 이 변수의 복사본이 정확히 하나만 존재한다는 것을 알려줍니다. 특정 종류의 자전거의 기어 수를 정의하는 필드는 개념적으로 모든 인스턴스에 동일한 기어 수가 적용되므로 static으로 표시할 수 있습니다. static int numGears = 6; 코드는 이러한 static 필드를 생성합니다. 또한 final 키워드를 추가하여 기어 수가 절대 변경되지 않음을 나타낼 수도 있습니다.
  • 로컬 변수(Local Variables) 객체가 필드에 상태를 저장하는 것과 유사하게 메서드는 종종 임시 상태를 로컬 변수에 저장합니다. 지역 변수를 선언하는 구문은 필드 선언과 유사합니다(예: int count = 0;). 변수를 지역 변수로 지정하는 특별한 키워드는 없으며, 그 결정은 전적으로 변수가 선언된 위치(메서드의 여는 중괄호와 닫는 중괄호 사이)에서 이루어집니다. 따라서 지역 변수는 선언된 메서드에서만 볼 수 있으며 나머지 클래스에서는 액세스할 수 없습니다.
  • 매개 변수(Parameters) 이미 Bicycle 클래스와 “Hello World!” 애플리케이션의 메인 메서드에서 매개 변수의 예를 보았습니다. 메인 메서드의 시그니처는 public static void main(String[] args)라는 것을 기억하세요. 여기서 args 변수는 이 메서드의 매개 변수입니다. 기억해야 할 중요한 점은 매개 변수는 항상 ‘필드’가 아닌 ‘변수’로 분류된다는 것입니다. 이는 튜토리얼의 뒷부분에서 배우게 될 다른 매개 변수 허용 구조체(예: 생성자 및 예외 처리기)에도 적용됩니다.

그렇지만 이 튜토리얼의 나머지 부분에서는 필드와 변수에 대해 논의할 때 다음과 같은 일반적인 지침을 사용합니다. 로컬 변수와 매개 변수를 제외한 “일반적인 필드”에 대해 이야기하는 경우 간단히 “필드”라고 말할 수 있습니다. ‘위의 모든 것’에 대해 논의하는 경우에는 단순히 ‘변수’라고 말할 수 있습니다. 문맥상 구분이 필요한 경우 특정 용어(정적 필드, 로컬 변수 등)를 적절히 사용합니다. “멤버”라는 용어도 간혹 볼 수 있습니다. 타입의 필드, 메서드 및 중첩된 타입을 통칭하여 멤버라고 합니다.

변수 이름

모든 프로그래밍 언어에는 사용할 수 있는 이름에 대한 고유한 규칙과 규칙이 있으며, Java 프로그래밍 언어도 다르지 않습니다. 변수 이름 지정에 대한 규칙과 규칙은 다음과 같이 요약할 수 있습니다:

  • 변수 이름은 대소문자를 구분합니다. 변수 이름은 문자, 달러 기호 $ 또는 밑줄 문자 _로 시작하는 유니코드 문자와 숫자의 길이 제한 없는 시퀀스 등 모든 형식의 고유 식별자가 될 수 있습니다. 그러나 변수 이름은 항상 $_가 아닌 문자로 시작하는 것이 규칙입니다. 또한 달러 기호 문자는 관례에 따라 전혀 사용하지 않습니다. 자동 생성된 이름에 달러 기호가 포함되는 경우가 있을 수 있지만 변수 이름에는 항상 달러 기호를 사용하지 않아야 합니다. 밑줄 문자도 비슷한 규칙이 있으며, 기술적으로는 변수 이름을 _로 시작하는 것이 허용되지만 이 방법은 권장하지 않습니다. 공백은 허용되지 않습니다.
  • 후속 문자는 문자, 숫자, 달러 기호 또는 밑줄 문자일 수 있습니다. 이 규칙에도 관례(및 통용되는 상식)가 적용됩니다. 변수 이름을 선택할 때는 어려운 약어 대신 완전한 단어를 사용하세요. 이렇게 하면 코드를 더 쉽게 읽고 이해할 수 있습니다. 예를 들어 케이던스, 속도, 기어와 같은 이름의 필드는 s, c, g와 같은 약어보다 훨씬 더 직관적입니다. 또한 선택한 이름이 키워드나 예약어가 아니어야 한다는 점도 명심하세요.
  • 선택한 이름이 한 단어로만 구성된 경우 해당 단어의 철자를 모두 소문자로 입력합니다. 두 개 이상의 단어로 구성된 경우 각 후속 단어의 첫 글자를 대문자로 표기하세요. gearRatiocurrentGear라는 이름이 이 규칙의 대표적인 예입니다. 변수에 정적 최종 int NUM_GEARS = 6과 같은 상수 값을 저장하는 경우 규칙이 약간 변경되어 모든 문자가 대문자로 표시되고 밑줄 문자로 후속 단어를 구분합니다. 규칙에 따라 밑줄 문자는 다른 곳에서는 절대 사용되지 않습니다.