본문 바로가기
  • soobinhand의 기술 블로그
도서/자바 프로그래밍 언어 - James Gosling

[자바 프로그래밍 언어] 7장 토큰, 값, 변수

by soobinhand 2021. 12. 27.
728x90

7.1     어휘적 요소

  • 컴파일의 첫 번째 단계는 어휘적 요소를 토큰으로 스캐닝하는 것이다. 이 단계에서 화이트스페이스와 주석이 무시된다.
  • 주석은 프로그래머의 편의를 위한 것이다.
  • 토큰은 언어의 기본 단어이다. 파서는 소스 코드를 토큰으로 분리하고 문장, 식별자, 기타 등등을 판별한다.
  • 식별자는 변수, 상수, 라벨에 선언된 이름을 말하며 이 이름은 문자와 숫자로 구성할 수 있다. 다만 이름의 첫 글자는 문자여야 한다.
  • 키워드는 자바에서 특별한 의미를 갖기때문에  식별자로 사용할 수 없다.

7.2     타입과 리터럴

  • 타입은 기본 타입과 참조 타입으로 분류할 수 있다.
  • boolean, char, byte, short, int, long, float, double
  • 각각의 기본 데이터 타입과 대응하는 클래스 타입이 java.lang에 포함되어 있다. 이를 래퍼 클래스라 부른다.
  • 참조 타입에는 클래스 타입, 인터페이스 타입, 배열 타입이 있다. 이 타입의 변수들은 이와 대응하는 타입의 객체를 참조할 수 있다.
  • 모든 타입은 타입을 나타내는 클래스 인스턴스와 연관되어 있다. 이 인스턴스는 해당 타입의 클래스 객체를 참조한다. 클래스 객체는 타입 이름 끝에 .class 를 붙여 지정할 수 있다.
    • String.class
    • java.lang.String.class
    • java.util.Iterator.class
    • boolean.class
  • 처음의 두 클래스 리터럴은 동일한 클래스 인스턴스를 참조한다. 

7.3     변수

  • 변수는 값을 저장할 수 있는 저장 장소로 이 장소에 값을 대입할 수 있다. 변수는 필드, 코드 블록의 지역 변수, 매개변수를 말한다.
  • 필드와 지역 변수는 동일한 방법으로 선언할 수 있으며 세 부분, 즉 제한자, 타입, 식별자 리스트로 구분할 수 있다. 식별자는 초기 값을 대입하는 초기자를 가질 수 있다. 여러 변수를 한 번에 선언하는 것과 각각 따로 선언하는 것은 동일한 의미.
// 둘은 같다.
float x, y;
float x;
float y;

float x = 3.14f, y = 2.81f;
float x = 3.14f,
	  y = 2.81f;
float x = 3.14f;
float y = 2.81f;
  • 필드 변수는 클래스나 인터페이스의 멤버이며 클래스나 인터페이스의 몸체 내에 선언.
  • 필드는 초기자, 초기화 블록, 생성자로 초기화할 수 있지만 필수는 아님. 초기화 안하면 기본 값으로 자동 초기화.
  • 지역 변수는 사용하기 전에 반드시 값이 대입되어 있어야 한다. 지역 변수는 기본 초기값을 가지지 않는다.
  • 컴파일러는 지역 변수에 값이 명확하게 대입되어 있지 않으면 지역 변수의 사용을 허용하지 않는다.
  • 매개변수는 메소드, 생성자, catch 블록에 선언 가능.
  • final 제한자는 변수의 값을 정확히 한 번만 설정할 수 있게 하고 이 값이 프로그램 실행 중에는 변경되지 않도록 하고 싶을 때 선언하는 제한자. 이를 불변적이라고 한다. final로 선언한 변수는 사용 전 초기화 필수!

7.4     배열 변수

  • 배열은 요소들을 순차적으로 접근할 수 있게 해주는 집합이다.
  • 배열의 요소들은 기본 타입 또는 객체 참조가 될 수 있으며 다른 배열 참조가 될 수도 있음.
int[][] a = new int[4][4];
for(int i = 0; i < a.length; i++)
	for(int j = 0; j < a[i].length; j++)
    	System.out.print(a[i][j] + " ");
    System.out.println();
}
String[] dangers = { "Lions", "Tigers", "Bears" };

String[] dangers = new String[]{ "Lions", "Tigers", "Bears" };

method(new String[]{ "Lions", "Tigers", "Bears" });
int[][] pascalsTriangle = {
	{ 1 },
    { 1, 1 },
    { 1, 2, 1 },
    { 1, 3, 3, 1 },
};
  • 배열은 묵시적으로 Object를 확장한다. 

7.5     이름의 의미

  • 이름은 두 가지 매커니즘에 의해 관리된다.
    • 네임 스페이스, 이는 이름 종류에 다라 다른 네임 스페이스를 부여할 수 있도록 분할되어 있다.
    • 유효 범위, 이는 프로그램의 한 영역에 선언된 이름이 다른 영역에 보이는 정도인 가시성을 제어하는 용도로 사용된다.
728x90

댓글