[JAVA] ch2: 변수와 자료형

oow·2026년 3월 14일

JAVA

목록 보기
2/13

JAVA 기본 구조

C와 매우 유사하지만 몇 가지 차이점이 있다. JAVA는 메소드, 메인 메소드를 전체 클래스(객체)가 감싸고 있는 형태이다. 또한 JAVA의 boolean은 true/false만을 값으로 갖는다(0, 1 등 불가능).

  • 메인 메소드에서 프로그램이 시작된다.



변수 (변수명, 데이터 타입, 리터럴)

변수명은 누구나 기능을 알 수 있도록 가독성 좋게 짓는 것이 좋다. 주로 camel case로 작성하는데, 클래스의 첫 문자는 대문자로 작성하고 변수와 메소드의 첫 문자는 소문자로 작성한다. 상수는 문자를 대문자로 작성하기도 한다. 예약어는 변수명으로 사용할 수 없다.

JAVA의 데이터 타입으로는 기본 타입과 레퍼런스 타입이 있다. 기본 타입(boolean, char, byte, short, int, long, float, double)은 크기가 정해져 있어 변하지 않는다. 반면 레퍼런스 타입(String, array, class, interface)은 크기를 할당 받아 사용한다.

문자 리터럴은 작은 따옴표, 문자열 리터럴은 큰 따옴표를 사용한다. JDK7부터는 숫자 리터럴의 중간에 _를 삽입하여 가독성을 높일 수 있다. 정수 리터럴은 기본적으로 10진수이며, 수 앞에 O, Ox, Ob를 추가하면 8진수, 16진수, 2진수를 저장할 수 있다.

상수를 선언할 때는 final을 사용한다. C의 const와 같은 역할으로, 값을 변경할 수 없다.

  • 변수, 리터럴, 상수 활용



타입 변환

작은 타입은 큰 타입으로 자동 타입 변환이 가능하다. 예를 들어, long m = 25;에서 25는 int 타입이지만 long 타입으로 변환해도 자료 손실이 없으므로 자동 변환된다.

반면 int a = 3.14;에서 float 타입인 3.14를 int 타입으로 바꾸러면 자료 손실이 발생한다. 이 경우 자동 타입 변환이 되지 않고 오류가 발생한다. 따라서 int a = (int)3.14;와 같이 강제 타입 변환을 해주어야 한다. 강제로 타입을 변환하면 손실이 발생하지만 오류가 발생하지는 않는다.

  • 작은 타입이 큰 타입으로 변환된다.
  • 강제 타입 변환은 손실이 발생한다.



입력 (표준 입력, Scanner)

JAVA의 표준 입력System.in이다. 그러나 값을 바이트로 리턴하기에 문자로 변환해야 하는 문제점이 있다. 때문에 보통은 Scanner을 사용한다. System.in으로 읽은 키 값을 원하는 타입으로 변환하여 리턴해주는 클래스이다.

Scanner의 메소드로는 next, nextInt, nextDouble, nextLine 등이 있다. 이때 nextnextLine의 차이를 아는 것이 중요하다. next는 \t, \n 등의 구분자를 무시하고 읽어간다. 반면 nextLine은 다른 구분자를 포함하여 \n이 나오기 전까지 한 줄을 통으로 읽는 방식이다.

때문에 input.next()로 값을 읽은 후에 input.nextLine()을 사용하는 경우, nextLine()이 \n만 읽고 넘어가고 변수에는 빈 문자열이 저장되는 문제가 발생한다. 때문에 변수 입력 전 input.nextLine()으로 \n을 먹어 주어야 한다.

  • nextLine은 영문 이름, 음식 목록처럼 띄어쓰기를 포함하여 한 번에 저장해야 할 때 사용한다.
  • next(nextInt, nextFloat) 뒤에 nextLine을 사용하는 경우 input.nextLine()으로 엔터를 먹어 준다.
  • printf를 사용하면 문자열 포맷팅으로 문자열 중간에 변수를 삽입할 수 있다.

0개의 댓글