201228 이것이 자바다 1-2장

송은석·2020년 12월 28일
0
post-thumbnail

책을 보면서 새롭게 눈에 들어온 부분만 담았다. 이전에 배운 부분이기도 하고, 비교적 간단한 내용을 다루고 있기 때문이다,


1장 자바 시작하기

  • 클래스 블록 안에는 필드와 메소드가 있으며, 메소드 블록 안에는 실행문이 담겨져 있다.

  • 클래스 명은 소스파일명과 일치해야 한다.

  • main 메소드는 JVM 실행시 가장 먼저 찾는 메소드이며, 따라서 다른 이름으로 바꿀 수가 없다. 그래서 main메소드를 프로그램 실행 진입점(entry point)이라고도 한다.

2장 변수와 타입

2.1 변수

변수란, 하나의 값을 저장할 수 있는 메모리 공간이며, 데이터 타입 + 변수 이름 (ex. int x)으로 이루어진다.
이 때 데이터 타입으로 메모리 공간을 정하고, 변수 이름으로 메모리 주소에 이름을 붙인다. (참조 변수는 아님. 자세한 내용은 아래 데이터 타입을 참고)
그러므로 초기화되지 않은 변수는 값을 읽거나 사용할 수가 없다.

  • 프로그램 실행 시 변수 이름으로 메모리 주소에 접근하여 값을 저장하거나, 읽게 된다.

  • 리터럴 값이란, 소스코드 내에서 직접 입력한 값을 말한다.

  • 중괄호 블록 안에서 선언된 변수를 지역 변수(local variable)라고 하며, 이는 블록 내에서만 사용이 가능하다.
    이와 반대되는 개념은 전역 변수(global variable)로, 어떤 변수 영역 내에서도 사용될 수 있는 변수이다.

2.2 데이터 타입

  • 기본(원시, primitive) 타입은 값을 메모리에 직접 저장하는 타입이다.
  • String 타입은 클래스 타입이며, String 변수는 참조변수로 값을 직접 저장하지 않는다. 객체 class를 생성하여 그곳에 값을 저장하고, 이후 변수 이름으로 객체의 번지를 참조한다.
  • 여기서는 기본 타입을 다루도록 한다.

2.2.1 byte 타입

  • 1byte의 크기로, -128~127의 수를 표현할 수 있다. 최상위 비트는 부호를 표현하며, 0을 표현할 때 양수 부호를 사용하므로 양수는 127까지의 크기를 가지게 된다.

  • 색상 정보 및 파일과 이미지 등의 이진 데이터를 처리할 때 사용한다.

2.2.2 char 타입

  • 2byte의 크기로, unicode를 저장하기 위한 타입이라고 할 수 있다.

  • 따라서 양수만을 저장하며, 0~ 약 6.5만의 크기를 가지고 있다. 알파벳과 특수기호는 0~127에, 한글은 4.5만~5.5만에 저장되어 있다.

  • char 타입 변수를 int 타입으로 저장하여 출력하면, 해당 유니코드의 숫자를 알 수 있다.

    char x = 'A';  
    int y = x;
    //y를 출력하면 65가 나오게 된다.

2.2.3 short 타입

  • 2byte의 크기로, c언어와의 호환을 위해 사용되며, 자바에서는 잘 쓰이지 않는다.

2.2.4 int 타입

  • 4byte의 크기로, 자바 정수 연산의 기본 타입이다. 따라서 byte나 short 타입은 변수 연산시 int로 변환되어 연산된다. 결과도 int로 출력된다.

2.2.5 long 타입

  • 8byte의 크기로, 수치가 큰 데이터들을 다룰 때 사용한다. ex) 은행, 우주 관련..

  • 변수를 초기화할 때 숫자 뒤에 'l'이나 'L'을 붙여주어야 컴파일러가 인식할 수 있다.

2.2.6 실수 타입(float, double)

  • 실수 타입에는 float(4byte)와 double(8byte)이 있으며, 부동소수점 방식을 사용하여 값을 저장한다.
    (부동소수점 방식- 부호(1byte), 가수(23, 52byte), 지수(8, 11byte)를 사용한 저장방식)
  • 높은 정밀도를 요구하려면 double 타입을 사용하는 것이 좋다.

  • float 타입을 사용하려면 뒤에 'f', 'F'를 사용해야 한다.

  • 정수 리터럴에 지수를 나타내는 'E'나 'e'가 붙어 있으면 실수 타입 정수로 저장해야 한다.

2.2.7 논리 타입(Boolean)

  • 1byte의 크기로, 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는 데 주로 이용한다.

2.3 타입 변환

2.3.1 자동 타입변환(Promotion)

  • 작은 크기의 타입이 큰 크기의 타입으로 변환되는 것을 의미한다.

  • 작은 그릇의 물이 큰 그릇으로 갈 수 있듯이 작은 크기 타입도 큰 크기 타입으로 갈 수 있다.

  • 크기의 차이는 메모리 크기의 차이를 의미한다.

  • 다만 float는 표현범위가 크므로 int, long보다 크다. 또한 byte와 short는 부호로 인하여 char로 변환이 불가하다.

2.3.2 강제 타입변환(Casting)

  • 큰 크기의 타입을 강제로 작은 타입으로 변환시키는 것을 의미한다.

  • 바이트를 쪼개어 뒤쪽에 있는 것들을 가져간다고 생각하면 된다. 그러므로 쪼갠 바이트로 표현이 되면 문제 없다.

  • 실수에서 정수로 변환시 소수점 아래는 없어진다.

  • 강제 타입변환 시 타입변환 검사를 할 수 있다.

    if(i<Byte.MIN_VALUE||i>Byte.MAX_VALUE)
    //다른 타입도 비슷하게 가능하다 ex) Int.MAX_VALUE, Int.MIN_VALUE
  • 정밀도 손실을 피하기 위해서 정수에서 실수로 변환시에는 double을 써야 한다.

2.3.3 연산식 자동 타입변환

  • 다른 타입 간 연산 시에는 큰 타입으로 자동 변환된다.

  • 정수는 연산 시 int로 변환된다. 그러므로 타입을 유지하기 원한다면 강제변환을 사용해야 한다.

profile
Done is better than perfect🔥

0개의 댓글