본문 바로가기

Language/Java

Java api 일기 7 변수란?

 

 이전의 학습에서 배웠듯이 객체는 아래와 같이, 해당 상태필드에 저장한다.

class Bicycle {

타입 속성; = 필드 , (= 값)은 초기화라 한다.
int cadence = 0; // 자전거 객체의 cadence 속성이 0인 상태를 필드에 저장.
int speed = 0;
int gear = 1;

}

Java는 다음과 같은 유형의 변수들을 정의한다.

  • 인스턴스 변수 (비정적 필드)

     엄밀히 말해, 객체는 정적 키워드(static) 없이 선언된 "비정적 필드"에 개별 상태를 저장한다.
    비정적 필드는 클래스의 각 인스턴스(즉, 객체)에 고유하기 때문에 객체 변수라고도 부른다.
    인스턴스 변수는 객체화 할 때 마다 새로운 저장공간을 할당하기 때문에 객체화 하고 나서야 생성되며,
    생성된 각 저장공간은 공유되지 않는다.
    또, 인스턴스 변수는 객체에 종속되기 때문에 인스턴스 객체에서 호출 해주어야 한다.
    ex.
    class Cat {

      String name;   // 인스턴스 변수

    }

    public class practice {

    Cat cat1 = new Cat();     // Cat class를 객체화 (인스턴스화)
    Cat cat2 = new Cat();     // Cat class를 객체화 (인스턴스화)

    cat1.name = "고양이";      // cat1 객체의 name 변수 초기화
    cat2.name = "고양고양";   // cat2 객체의 name 변수 초기화

    }

  • 클래스 변수 (정적 필드)

     클래스 변수는 정적 한정자(static)를 사용하여 선언된 필드이다.
    static은 클래스가 객체화(인스턴스화) 된 횟수에 관계없이 이 변수의 복사본이 딱 하나만 있음을 컴파일러에 알려준다.
    클래스 변수는 클래스가 로딩 될 때 생성되고, 저장공간이 딱 하나 생긴다.

    사용 예시로, 자전거에는 보통 동일한 수의 기어가 적용되므로 자전거에 대한 기어의 수를 정의하는 필드를 정적으로 선언할 수 있다.
    ex. static int numGears = 6;

    또한, 키워드 final을 추가하여 기어의 수가 절대 변하지 않음을 나타낼 수도 있다.
    ex. static final int numGears = 6;

  • 로컬 변수

     객체가 필드에 상태를 저장하는 방법과 유사하게 메소드는 종종 일시적인 상태를 로컬 변수에 저장한다.
    로컬 변수를 선언하는 구문은 필드를 선언하는 것과 유사하다.
    (방법이 유사한 것이지 로컬변수가 필드인 것은 아니다.)
    변수를 로컬 키워드로 지정하는 특별한 키워드는 없고, 변수가 선언된 위치가 로컬 변수를 결정한다.
    즉, 로컬 변수는 메소드의 여는 중괄호와 닫는 중괄호(블록) 사이에 선언되는 위치로부터 결정된다.

    public class practice {

    int num;             //  클래스 영역 내에 static 없이 선언되면, 인스턴스 변수.
    static int num2;   //  클래스 영역 내에 static 과 함께 선언되면, 클래스 변수.

     public void method() {

      int value = 10;   // 변수 선언 및 초기값 저장.  // 메소드 블록 내 선언, 로컬 변수.

      }
    }

    로컬 변수는 선언된 메소드 내(메소드 블록 내)에서만 볼 수 있으며 클래스의 나머지 부분에서는 접근할 수 없다.


  • 파라미터

     우리는 Bicycle 클래스에서 파라미터의 예를 이미 살펴보았다.
    예를 들어, main 메서드의 표기는 public static void main(String[] args)이다.
    여기서 args 변수는 이 메소드의 매개 변수(parameter)이다.
    중요한 점은 매개변수가 항상 "필드"가 아닌 "변수"로 분류된다는 것이다.
    이는 나중에 배울 다른 매개 변수 허용 구조(예: 생성자 및 예외 처리기)에도 적용된다.


변수 이름 짓는 법 naming

            모든 프로그래밍 언어에는 사용할 수 있는 변수 이름에 규칙과 관례가 있으며, Java도 다르지 않다.


변수 이름을 지정하기 위한 규칙과 관례는 다음과 같이 요약할 수 있다.

  • 변수 이름은 대소문자를 구분한다.

    변수의 이름은 임의의 법적 식별자가 될 수 있다.
    즉, 문자, 달러 기호 "$" 또는 밑줄 문자 "_"로 시작하는 유니코드 문자와 숫자의 길이가 무제한이다.
    그러나 규칙은 항상 변수 이름을 "$"나 "_"가 아닌 문자로 시작하는 것이다.
    게다가, 관례상 달러 기호 문자는 전혀 사용되지 않는다.
    자동 생성된 이름에 달러 기호가 포함되어 있는 경우가 있을 수 있지만, 변수 이름에는 항상 달러 기호가 사용되지 않아야 한다.

  • 밑줄 문자에 대해서도 유사한 규칙이 있다.
    변수 이름을 "_"로 시작하는 것이 기술적으로는 합법적이지만, 이 방법은 권장되지 않는다.
    또 ,변수 내에 공백을 사용할 수 없다.

  • 첫자 이후의 문자는 문자, 숫자, "$" 또는 "_" 일 수 있다.

  • 변수 이름을 선택할 때는 암호, 약어(줄임말) 대신 전체 단어를 사용해야한다.
    이렇게 하면 코드를 더 쉽게 읽고 이해할 수 있다.
    예를 들어, c, s 및 g와 같은 단축된 버전보다 cadence, speed 및 gear라는 필드가 훨씬 직관적이다.


  • 선택한 이름이 키워드나 예약어가 아니어야 한다.


  • 선택한 이름이 한 단어로만 구성된 경우 해당 단어의 철자를 소문자로 모두 입력한다.


  • 두 개 이상의 단어로 구성된 경우 각 후속 단어의 첫 글자를 대문자로 바꾼다. ex. String helloWorld;


  • 변수가 static final int NUM_Gears = 6; 과 같이 상수 값을 저장하는 경우,
    규칙이 약간 변경되어 모든 문자를 대문자로 표시하고 후속 단어를 밑줄 문자로 구분한다.
    일반적으로 밑줄 문자는 다른 곳에서 사용되지 않는다.



    출처 : docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
 

Variables (The Java™ Tutorials > Learning the Java Language > Language Basics)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

'Language > Java' 카테고리의 다른 글

Java api 일기 6 연산자 요약  (0) 2021.01.18
Java api 일기 5 패키지란?  (0) 2021.01.18
Java api 일기 4 인터페이스란?  (0) 2021.01.18
Java api 일기 3 상속이란?  (0) 2021.01.17
Java api 일기 2 클래스란?  (0) 2021.01.17