[CS] 자바의 정석 독서 #1 - 2장 - 변수

2025. 9. 18. 01:19·언어공부/Java | Kotlin

 

헤드퍼스트 자바와 비슷한 부분은 솎아내고 읽을 예정이고.. 헤드퍼스트에서 읽었는데 아리까리한 부분 (상속이나 다형성.. 이런 부분)은 보강하면서 읽읍시다.


변수

값을 저장할 수 있는 메모리상의 공간

변수이름으로 특수문자는 $도 가능하다. 언더바는 당연히가능 

 

변수와 메서드 이름은 항상 대문자로 시작하고.. 이 책에서는 카멜표기법을 따르도록 안내한다. 상수는 대문자로

 

이 부분은 컴공개에서도 배운 내용이고, 헤드퍼스트에서도 배운 내용이기 때문에 딱히 새롭게 배우거나 기존에 배웠던 것에서 보강할 게 없다.


 

타입

선언할 때 필요한거.. 문자(char)와 숫자, 숫자는 다시 정수(byte, short, int, long)와 실수(float, double)로 나뉜다.

 

이 중 boolean, char, byte, short, int, long, float, double 8개의 타입은 기본형(primitive) 타입으로 실제 값이 저장된다.

 

원시타입이 참조형이다

헤드퍼스트자바 #6편에서.. 원시타입은 객체가 아니기 때문에 ArrayList에 들어갈 수 없다..이런 말을 했는데 여기서의 원시타입이 바로 기본형 타입이다.

그리고 저기서 오류가 있는데 String은 기본형(원시타입) 변수가 아니다. char가 기본형이다. 반대로 쓴 듯


기본형 변수 boolean, char, byte, short, int, long, float, double 는 boolean을 제외하고는 서로 연산이 가능하다. char의 경우에는 문자를 정수(유니코드)로 바꿔서 저장하기 때문에 다른 정수/실수형 타입과의 연산이 가능하다. 이 부분은 C와 동일하나 정수와 실수 간의 연산도 가능하고 불리언 타입도 있는 등.. C와는 다른 부분도 있다,

 

기본형 변수들의 크기는

boolean은 true, false만 구분하면 되기 때문에, byte와 함께 1바이트

char는 2바이트 유니코드 체계를 따르므로 2바이트, short도 2바이트

int와 float는 4바이트

long과 double은 8바이트다. float의 두 배라서 double

 

바이트는 8개의 비트로 이루어져 있으므로 0부터 2^(비트의 값) - 1 개만큼 값을 저장할 수 있다. boolean은 단 2개만 저장할 수 있다. 대표적으로 int는 4바이트, 즉 32비트이므로 2^32개의 값을 표시할 수 있으나, 앞부분에 부호표시용 비트를 하나 빼면 양수 2^31 - 1개, 음수 2^31개, 0 한 개를 표시할 수 있다.

 

실수형의 경우에는 float가 7자리까지, double이 15자리까지 정밀도를 가진다. C프에서 float의 경우에는 4바이트, 즉 32개의 비트 중에서 정수부분 8개비트, 실수부분 24개비트로 구성되며 정수부분에서 부호표시용 비트 하나를 빼면 7자리까지 정확도를 보인다고 했는데 아마 같은 이유이지않나 생각된다.


기본형의 반대는 참조형(Reference) 타입으로 값의 주소(또는 null)가 저장된다.

참조형 변수 간은 연산을 진행할 수 없다. 실제 연산은 기본형으로 진행된다. 다만 Integer, Double 같은 래핑된 객체는 컴파일러가 자동으로 기본형 ↔ 참조형 변환을 처리해준다.

 

Member member = new Member();

이렇게 특정 클래스에 대한 참조형 변수를 만들 수 있으며, 이러면 member에는 객체의 주소가 저장된다.


리터럴과 접미사

수학에서는 변수 이외의 값을 상수라고 했는데, 자바에서는 (자바가 아니더라도 프로그래밍 전반에서) 한 번 설정되면 절대로 변하지 않는 값을 상수로 칭한다. 이는 final을 사용하면되고.. 기존의 수학의 상수라는 뜻은 리터럴이라는 용어를 사용한다.

 

여러 타입들을 구분하기 위해서 리터럴에 접미사를 붙여서 타입을 구분한다.

long setTime = 1000L;

예전에 JWT토큰 만료시간을 설정할 때 이런 유형의 코드를 사용했는데, 리터럴 뒤에 붙이는 접미사가 L이면 long 타입을 나타내는 것이라고 명시하는 것이다. 대표적으로 L(long), f(float), d(double), 0(8진수), 0x(16진수), 0b(2진수)를 사용하며, L, f, d는 접미사, 0, 0x, 0b는 접두사로 사용한다.

 

int는 리터럴이 없고, short, byte는 int타입의 리터럴을 사용한다. int가 가장 널리 쓰이고 기본 자료형이니까. 마찬가지로 double에서 'd'는 생략할 수 있다.

float pi = 3.14;

따라서 이런 코드를 작성하면 오류가 터진다. 리터럴 접미사가 없으면 변수 타입을 double로 인식하는데 이를 float에 저장할 수는 없으니까

 

따라서 8진수, 2진수 이런 유형을 제외하면 리터럴에 접미사가 필요한 경우는 long, float 두 개 뿐이다.


var

JDK10에서 추가된 지역변수의 타입으로 사용할 수 있으며, 변수의 타입이 명확한 경우 컴파일러가 변수의 타입을 추론한다.

 

int age = 20;
var age = 20;

이렇게 쓸 수 있다. 컴파일러가 age 변수가 int겠거니하고 자동추론. 따라서 추론이 불가능하게 값을 null로 주거나 선언만 하고 실제로 값을 대입하지는 않은 경우에는 오류가 터진다.


우선은 피곤하니까 여기까지

그냥 간단하게 읽어도 될 것이라고 생각했는데 헤드퍼스트에서는 간단하게 넘어간 부분이나 잘 소개되지 않은 부분이 여기서는 좀 깊게 설명되어 있어서 그 부분만 좀 보고 넘어가려고 했는데도 꽤 걸렸다. 또 2장이 짧으면 그냥 읽겠는데 꽤 길어보여서 우선 여기까지. 내일합시다!

'언어공부 > Java | Kotlin' 카테고리의 다른 글

인프런 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 후기  (0) 2025.09.20
[CS] 자바의정석 독서 #2 - 포매팅  (0) 2025.09.18
[2025 백엔드] 헤드퍼스트자바 독서 #10 - 16장. 객체 저장  (5) 2025.08.17
[2025 백엔드] 헤드퍼스트자바 독서 #9 - 13장. 위험한 행동  (4) 2025.08.13
[2025백엔드] 헤드퍼스트자바 독서 #8 - 12장. 람다와 스트림  (4) 2025.08.13
'언어공부/Java | Kotlin' 카테고리의 다른 글
  • 인프런 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 후기
  • [CS] 자바의정석 독서 #2 - 포매팅
  • [2025 백엔드] 헤드퍼스트자바 독서 #10 - 16장. 객체 저장
  • [2025 백엔드] 헤드퍼스트자바 독서 #9 - 13장. 위험한 행동
Radiata
Radiata
개발을 합니다.
  • Radiata
    DDD
    Radiata
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • 신년사 (3)
        • 2025년 (2)
        • 2026년 (1)
      • CS (59)
        • JVM (12)
        • 백엔드 (20)
        • 언어구현 (1)
        • 객체지향 (1)
        • 논리회로 (5)
        • 컴퓨터구조 (9)
        • 데이터베이스 (1)
        • 컴퓨터 네트워크 (10)
      • 언어공부 (64)
        • Java | Kotlin (48)
        • JavaScript | TypeScript (9)
        • C | C++ (6)
      • 개인 프로젝트 (11)
        • [2025] Happy2SendingMails (3)
        • [2026] 골든리포트! (8)
        • [2026] 순수자바로 개발하기 (0)
        • 기타 이것저것 (0)
      • 팀 프로젝트 (29)
        • [2025][GDG]홍대 맛집 아카이빙 프로젝트 (29)
      • 알고리즘 (13)
        • 백준풀이기록 (11)
      • 놀이터 (0)
      • 에러 수정일지 (2)
      • 고찰 (24)
        • CEOS 23기 회고록 (2)
  • 블로그 메뉴

    • CS
    • 언어공부
    • 개인 프로젝트
    • 팀 프로젝트
    • 알고리즘
    • 고찰
    • 신년사
    • 컬러잇 개발블로그
  • 링크

    • 컬러잇 개발블로그
  • 공지사항

  • 인기 글

  • 태그

    144
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Radiata
[CS] 자바의 정석 독서 #1 - 2장 - 변수
상단으로

티스토리툴바