STUDY/JAVA

[JAVA] 변수, 데이터 타입

aftersep 2022. 3. 13. 16:18

변수

변수 ==> 변할 수 있는 값(숫자를 의미하는 것이 아니다.) 

단 하나의 값을 저장할 수 있는 메모리 공간.
상수 ==> 변할 수 없는 값

 

y = f(x)

 

f: function 기능

x: 입력 값

y: 출력 값

 

변수란 반드시 하나의 값만 저장할 수 있다.

새로 넣으려면 기존에 있던 것 하나를 빼내야 한다.

두 가지 값을 넣을 수 없다.

 

변수선언

int age;

변수에 저장될 값이 어떤 타입인지 지정하는 것이다.

 

변수의 초기화

int age = 25;

변수를 사용하기 전에 처음으로 값을 저장하는 것.

*integer 정수 = int

 

정수만 들어갈 수 있는데 실수가 들어가 있으니 당연히 오류가 생긴다.

 

= : 대입 연산자

오른쪽에 있는 것을 왼쪽에 대입하는 역할을 함

 

아무리 복잡한 식이어도 값은 하나만 나온다.

 

오른쪽에 값이 올 수도, 연산식이 올 수도, 변수가 올 수도 있다.

 

Lvalue(변수선언) = Rvalue(변수의 초기값)

 

 

String : 문자열

이름, 문자를 입력하고자 할 때

여러 개의 문자들을 엮어놓은 것을 의미

 

오류가 생김 (name 때문)

정의가 되지 않았으므로 변수는 선언으로만 쓸 수 없다.

 

변수의 정의 = 변수 선언 + 초기화(초기값을 넣어줌)

★★★ 변수는 "정의"까지 완성되어야만 사용가능하다. 

 

 

런 버튼과 동일하다. 그러나 오른쪽 마우스를 클릭했을 때 보이는 이것에 익숙해져야 한다.

 

이처럼 변수를 한글로 표기해도 자바는 작동이 된다.

그러나 영어로 하기를 권장한다.

 

final

 

 

System.out.println(); : 메소드이다.

 

변수 - 영어: variable

 

Ctrl + / 해당 행 전체 주석처리

 

Literal리터럴

age = 23;

하드 코딩

literal리터럴: 소스 코드 내에서 직접 입력된 변수의 초기값

 

언제 값이 바뀔지 모르니 리터럴의 사용은 지양되어야 한다.

 

 

변수의 유효범위

 

 

변수: 정의 + "유효범위(***)"

일반화 요약:

(1) 변수의 유효범위는 자신이 선언된 블록 내부에서만 유효하다!

(2) 변수는 자신의 유효범위가 끝나는 순간, 메모리에서 '파괴'된다.

변수의 유효범위: 정의된 변수를 사용가능한 범위

 

오류가 나는 이유

변수의 유효 범위를 넘어갔기 때문.

 

유효범위 초과라서 var2가 무엇인지 알아내지 못함.

 

 

이름은 같지만 완전히 새로운 age가 됨.

 

사용자 정의 블록은 어디에 두어도 허용되지만 class 범위 밖에서는 허용되지 않는다.

 

세미콜론: 실행문의 마무리

세미콜론n: 여러 번 써도 상관없음

세미콜론2(;;) : pass = 아직 실행 문장을 완성하지 못하거나, 준비가 안 된다.

빈 { } 으로 놔두면 동료 개발자가 무슨 뜻인지 알 수 없음.

pass (;;)를 해두면 골격만 만들어놓고 아직 준비가 덜 되었다는 것을 알 수 있음.

(파이썬에서는 pass라고 표기)

 

변수의 구분

 

(1) 지역변수 Local

 

(2) 전역변수 Global : 자바에는 없다!

 

 The value of the local(<->global) variable age is not used

 

 

if 블록으로 들어갔을 때 v2 값이 선언되었으니 if 블록을 나가는 순간 파괴된다.

if 블록이 끝나면 메소드 블록이 남는데 v1은 메소드 블록에서 선언되어 살아있지만, 

v2는 if 블록이 끝나면서 파괴되었기 때문에 존재하지 않는 변수가 되어버린다.

그래서 컴파일 오류가 생긴다.

5는 하드코딩된 리터럴값

 

에러 메시지가 뜨는 빨간, 노란 줄 옆 노란 포스트잇(풍선)을 반드시 확인해볼 것!

 

영어라서 모르겠다면 복사해서 번역해보기.

 

데이터 타입

● 기본타입

1. 정수타입

- byte : 1바이트

- char(character: 문자) : 2바이트

- short: 2바이트

- int (정수): 4바이트

- long: 8바이트

2. 실수 타입(소수점 있는)

- float: 4바이트

- double: 8바이트

3. Logical 논리타입

- boolean(불린): 운영체제(플랫폼)마다 다르다.

참과 거짓의 경우에는 1비트(8비트=1바이트)만 사용.

 

   1 bit ----- 전기적 신호가 흐르면 1, 안흐르면 0 
   1 byte --- 8개의 bit 모여서 1byte --> 8bits 
   1 KB    -- 1024 bytes  
   1 MB   -- 1024 kbytes 
   1 GB    -- 1024 MB  
   1 TB     -- (Tera Bytes) 1024GB 
   1 PB    -- (Peta Bytes) 1024TB

 

변수와 타입

 

 

정수 중 기본 타입 변수: int

실수 중 기본 타입 변수: double

 

 

 

char: 두 개 이상의 문자는 넣을 수 없다.

 

아스키 코드 ASCII Code

 

Keystroke 키를 누르는 행위

Key -> 정수값으로 변환 (Keycode)

 

문자 집합(Character Set)

ASCII: 영어권 문자밖에 표현 못 함

UTF-8: 다국어 문자 표현 가능

 

Encoding: 문자 > 키 코드(정수)로 변환

Decoding: 키 코드(정수) > 문자로 변환

 

개발은 MS949로 해서는 안 된다.

UTF-8이 표준이므로 이클립스 환경 설정(Window-Preference-General-Workspace)에서 고치기

 

형 변환

데이터 타입을 다른 타입으로 변환하는 것

byte <-> int

int <-> double

 

종류

자동(묵시적) 타입 변환: Promotion

강제(명시적) 타입 변환: Casting

 

자동 타입 변환

프로그램 실행 도중 작은 타입은 큰 타입으로 자동 타입 변환

byte < short < int < long < float < double

* 실수 타입이 정수 타입보다 크다.

 

byte 타입의 표현 범위: -128 ~ +127

범위를 초과하여 컴파일 에러가 발생한다.

 

코끼리를 냉장고에 넣으려고 하니 생기는 오류라고 생각하면 편하다.

 

10진수를 주로 기억하기!

16진수는 보안에서 쓴다.

 

int는 정수 타입이므로 문자가 출력되지 않고 가지고 있던 정수를 출력하게 만든다.

 

long의 그릇이 크기 때문에 작은 리터럴이 들어가는 데 이상이 없음

int의 범위를 초과하는 큰 숫자더라도 long이 수용가능할 수준임

 

 

The literal 1000000000000 of type int is out of range 

:: int 유형의 리터럴 1000000000000이 범위를 벗어났습니다.

 

리터럴은 형 변환 대상 자체가 아니다.

long은 큰 숫자라서 자주 쓰이지는 않는다.

 

 

 

 

정수 타입 < 실수 타입

 

정수 - > 실수 타입으로 자동 형 변환 가능

실수 - > 정수 타입으로 형 변환은 어려워 강제로 변환해야 함

 

UTF-8에 따르면 "가"의 유니코드 키코드 값이 44032라는 것

필수적이진 않지만 궁금하면 위와 같이 해볼 수 있음

 

"가의 유니코드="문자열 리터럴: String

intValue: int

 

기본 타입(정수... 실수... ) < 참조 타입(String)

참조 타입이 더 크므로 정수 값을 변환할 수 있다.

 

대부분의 자바 프로그램은 참조 타입으로 하는 것이다.

 

문자열("") => type:String