이 글은 ‘Java의 정석(남궁성) 3rd edition’ 책의 내용을 요약한 것입니다.
모든 내용을 요약한 것이 아니라, 저 개인의 자바 언어 문법 공부용, 기록용으로 작성한 글입니다.
자바 언어를 리마인드하려는 사람들이 읽을 수도 있으나, 글이 친절하지 않을 수 있습니다.
프로그래밍 언어를 접해보지 않은 사람들은 읽지 않는 것이 좋을 것입니다.


Chapter 1 자바를 시작하기 전에


// Hello.java
class Hello {
  public static void main(String[] args) {
    System.out.println(Hello, world.);
  }
}
  • 모든 자바 어플리케이션은 적어도 하나의 main method를 가져야 함
  • 소스파일의 이름은 그 파일의 public class name과 대소문자까지 일치해야 함
  • 하나의 소스 파일에 둘 이상의 public class가 들어갈 수 없음

Chapter 2 변수


변수 선언

int x=0, y=0;

변수의 타입이 같은 경우는 컴마로 구분해 여러 변수를 한 줄에 선언 가능


자바 코딩 컨벤션

클래스 이름의 첫 글자는 대문자, 변수와 메서드의 첫 글자는 소문자

snake case가 아닌 camel case 또는 Paskal case 사용

상수의 이름은 대문자 MAX_NUMBER


변수 종류

  • 기본형 변수: boolean, char, byte, short, int, long, float, double
  • 참조형 변수: 나머지
  • 상수
    // 선언과 동시에 초기화해야 **함**
    final int MAX_SPEED = 130;
    
  • 리터럴

리터럴의 접미사

결론: long(L)과 float(F)만 신경 써주자

접두사와 접미사는 대소문자를 구분하지 않음

  • 정수형(Long type)

    // 숫자 1과 소문자 l이 헷갈리므로 대문자 L로 적어주는 것이 좋음
    long a = 123L;
    long b = 0b0101L;
    long c = 077L;
    long d = 0xFFL;
    // 정수형 리터럴의 중간에 구분자(\_)를 넣어 숫자를 편하게 읽을 수 있음
    long a = 100_000_000L;
    long hex = 0xFFFF_FFFF_FFFF_FFFFL;
    
  • 실수형(float)

    float a = 3.14f;
    double b = 3.0e8D;
    // 접미사 d는 생략 가능 (실수형에서는 double이 기본 자료형)
    double c = 3.1415926535;
    
  • 문자, 문자열

    String str1 = new String("abc"); // immutable.
    // 참고: mutable한 문자열을 다루려면 StringBuffer 클래스를 사용
    String str2 = "xyz";
    String str3 = "";
    char ch1 = 'a';
    char ch2 = ''; // compile error: char는 비어 있는 문자 ‘’를 허용하지 않음
    
    // 덧셈 연산자로 다른 타입의 피연산자와 concatenate 가능
    true + “” + null == truenull
    7 + 7 + “” == 14
    “” + 7 + 7 == 77
    

Chapter 3 연산자


  • 덧셈 연산자

    byte a = 10;
    byte b = 20;
    // + 연산자는 두 개의 피연산자의 자료형을 int형으로 변환 후 연산을 수행함.
    byte c = a + b; // compile error: 명시적으로 형 변환 필요
    byte c = (byte)(a + b);
    
  • 등가비교 연산자

    String str1 = "abc";
    String str2 = new String("abc");
    
    // == 연산자는 객체 안의 값을 검사하는 것이 아니라, 서로 같은 객체인지 검사. (참조변수의 값)
    System.out.println(str1 == "abc") // true
    System.out.println(str2 == "abc") // false
    System.out.println(str1.equals("abc")) // true
    System.out.println(str2.equals("abc")) // true
    

Chapter 4 조건문과 반복문


java에는 조건문(if, switch), 반복문(for, while, do while;)이 존재.


switch statement

switch의 조건식은 결과값이 반드시 정수여야 함.

switch (condition) {
  case 1:
  // code block
  break;

  // code blocks

  default:
  // code block
}

for statement, enhanced for statement

enhanced for statement는 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다.

int[] arr = {1, 3, 5, 7, 9};

for (int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}

for (int elem: arr) {
System.out.println(elem);
}

labeled loop

Loop1: for (int i=0; i<5; i++) {
  for (int j=0; j<5; j++) {
    if (arr[i] * arr[j] == 49) {
      break Loop1;
    }
  }
}

Chapter 5 배열


배열의 선언과 생성

int[] scores;
int scores[];

scores = new int[10];
int scores = new int[0]; // 길이가 0인 배열도 가능

배열의 초기화

for문 또는 new type[] {} 표현을 통해 가능

int[] scores = new int[5];
for (int i=0; i<scores.length; i++)
  scores[i] = 2*i + 1;

int[] scores = new int[] {1, 3, 5, 7, 9};

배열의 초기화 시 new type[]을 생략 가능한 경우

아래와 같이 생략 가능하다.
참고: 매개변수로 배열을 받을 때에도 new type[]을 생략 가능하다.

int[] scores = new int[] {1, 3, 5, 7, 9};
int[] scores = {1, 3, 5, 7, 9};

int sum(int[] arr) {...}
int result = sum(new int[] {1, 3, 5, 7, 9});
int result = sum({1, 3, 5, 7, 9});

위의 경우와 달리, 배열의 선언과 생성을 따로 할 때는 new type[]을 생략 불가능하다.

int[] scores;
scores = {1, 3, 5, 7, 9}; // compile error

배열의 길이

int len = scores.length; // arr.length는 read-only

배열의 복사

for문으로 가능하지만, System.arraycopy 메서드 사용하면 편리

System.arraycopy(srcArr, srcIndex, destArr, destIndex, length)
char[] abc = {'a', 'b', 'c', 'd'};
char[] num = {1, 2, 3, 4, 5, 6, 7};
System.arraycopy(abc, 0, num, 0, abc.length); // abcd567
System.arraycopy(abc, 0, num, 2, 3); // ababc67

다차원 배열

int[][] table;
int table[][];
int[] table[];

int[][] table = new int[7][10]; // row-major order

가변 배열

int[][] table = new int[3][];
table[0] = new int[3];
table[1] = new int[55];
table[2] = new int[999];