자바(JAVA) 프로그래밍 기초 - (2) 변수와 타입

yunyoung·2021년 4월 27일
0

자바

목록 보기
1/1
post-thumbnail

2. 변수와 타입

2-1. 변수

변수(variable)은 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름이다. 프로그램은 변수를 통해 메모리의 특정 번지에 값을 저장하고 읽을 수 있다.
변수를 메모리의 어디에 저장하고 어떤 방식으로 저장할지는 프로그래밍 언어와 운영체제가 정하는데, 자바의 경우 JVM이 하게 된다.

자바의 변수는 다양한 타입의 값을 저장할 수 없다. (정수 타입에는 정수만, 실수 타입에는 실수만)

변수 선언

int age;
double value;

자바 변수 명명 규칙

  • 첫 번째 글자는 문자이거나 '$', '_' 이어야 한다. 숫자로 시작할 수 없다.
  • 영어 대소문자를 구문한다. (firstname != firstName)
  • 카멜 케이스 명명 규칙을 따른다. (maxSpeed, firstName, carBodyColor)

값 저장

자바에서는 변수에 값이 저장되지 않으면 변수가 생성되지 않는다. '선언'과 '생성'은 다른 이야기이다. 자바에서는 반드시 변수를 선언하고 초기화를 해 주어야 한다.

int score = 90;

변수는 선언 시에 사용한 타입의 값만 저장할 수 있다.

변수 사용 범위

자바의 모든 변수는 중괄호 { } 블록 내에서 선언되고 사용된다. 메소드 블록 내에서 선언된 변수를 로컬 변수(local variable)라고 부른다. 로컬 변수는 메소드 블록 내부에서만 사용되고 메소드 실행이 끝나면 메모리에서 자동으로 사라진다. -> 자신이 속한 블록 내부에서만 사용 가능

package sec01.exam04;

public class VariableScopeExample {
  public static void main(String[] args) {
    int v1 = 15;
    if(v1>10) {
      int v2;
      v2 = v1 - 10;
    }
    // v2 때문에 에러 발생. 사용 불가능
    int v3 = v1 + v2 + 5;
  }
}

2-2. 기본 타입

저장되는 값에 따른 분류타입의 종류
정수 타입byte, char, short, int, long
실수 타입float, double
논리 타입boolean

정수 타입

타입메모리 사용 크기(byte)메모리 사용 크기(bit)저장되는 값의 허용 범위
byte1byte8bit-128 ~ 127
short2byte16bit-32,768 ~ 32,767
char2byte16bit0 ~ 65535(유니코드)
int4byte32bit-2,147,483,648~2,147,483,647
long8byte64bit-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

저장할 수 있는 값의 범위는 -2^(n-1) ~ (2^(n-1)-1)이다.
long 타입을 사용하고자 할 때는 정수 리터럴 뒤에 L을 붙여주면 된다.

long balance = 30000000000; (X)
long balance = 30000000000L; (O)
  • char 타입

작은따옴표(')로 감싼 하나의 문자(문자 리터럴)를 저장하는 타입이다. 문자 리터럴은 유니코드로 변환되어 저장된다.

char var1 = 'A'; //유니코드: 65
char var2 = '가'; //유니코드: 44032
int var3 = 'A';
System.out.println(var1); //A 출력
System.out.println(var2); //65 출력
  • String 타입
    유니코드로 변환되지 않는 큰따옴표(")로 감싼 문자열을 저장하는 타입이다.

    • 이스케이프 문자
      이스케이프 문자를 사용하면 문자열 내부에 특정 문자를 포함시킬 수 있다.
    String str = "나는 \"자바\"를 좋아합니다.";
    System.out.println(str)
    -> 나는 "자바"를 좋아합니다.
    이스케이프 문자출력 용도
    \t탭만큼 띄움
    \n줄 바꿈
    \r캐리지리턴
    \"" 출력
    \'' 출력
    \\ \ 출력
    \u16진수16진수유니코드에 해당하는 문자 출력

실수 타입

타입메모리 사용 크기(byte)저장되는 값의 허용 범위(양수)정밀도(소수점 이하 자리)
float4byte±(1.40129846432481707e-45 ~ 3.40282346638528860e+38)7자리
double8byte±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d)15자리

자바는 실수 리터럴을 기본적으로 double 타입으로 해석한다. 실수 리터럴을 float 타입으로 저장하고 싶다면 리터럴 뒤에 F를 붙여주면 된다. 메모리에 여유가 있고 특별한 이유가 없다면 double 타입을 사용하는 것이 좋다.

float var = 3.14; (X)
float var = 3.14f;
float var = 3E6F;

논리 타입

1byte 크기이다.

boolean stop = true;
boolen state = false;

2-3. 타입 변환

자동 타입 변환

byte < short < int < long < float < double

작은 타입이 큰 타입으로 저장될 때는 자동으로 형변환된다.

강제 타입 변환

double doubleValue = 3.14;
int intValue = (int) doubleValue; //정수 부분인 3만 저장

연산식에서 자동 타입 변환

//byte, short 타입의 피연산자는 int 타입으로 변환된다
byte x = 10;
byte y = 20;
int result = x + y; //반드시 int 타입

//두 피연산자 중 큰 타입으로 변환된 후 연산 수행
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue;
int result = intValue + (int) doubleValue; //꼭 int로 하려면!

+ 연산식에서 문자열 자동 타입 변환

int value = 3 + 7; //10
String str1 = "3" + 7; //"37"
String str2 = 1 + 2 + "3"; //"33"

문자열 타입 변환 메소드

// 문자열 -> 기본 타입
String str = "10";
byte value1 = Byte.parseByte(str);
short value2 = Short.parseShort(str);
int value3 = Integer.parseInt(str);

// 기본 타입 -> 문자열
String str = String.valueOf(기본타입값);

2-4. 변수와 시스템 입출력

모니터로 변수값 출력하기

메소드의미
println(내용);괄호 안의 내용 출력 후 행을 바꿔라
printf(내용);괄호 안의 내용을 출력만 해라
printf("형식문자열", 값1, 값2,...);형식문자열대로 내용을 출력해라
//이름: 김자바
System.out.printf("이름: %s", "김자바"); 

//이름: 김자바, 나이: 25
System.out.printf("이름: %1$s, 나이: %2%d", "김자바", 25); 

키코드 읽기(입력받기)

//키보드에서 키 하나 입력받아 출력하는 코드
int keyCode = System.in.read();
System.out.println("keyCode: " + keyCode);

문자열 입력받기

import java.util.Scanner;

//시스템의 입력 장치로부터 읽는 Scanner 생성
Scanner scanner = new Scanner(System.in);
//Enter 입력되기 전까지의 내용을 읽음
String inputData = scanner.nextLine();
profile
🌈TIL과 개발 노트

0개의 댓글