카테고리 없음
변수와 타입
달덩이><
2022. 8. 19. 17:10
Programming(coding)이란?
- 입력 데이터를 가공하여 원하는 형태의 출력 데이터로 변환하여 화면에 display하거나 file, database등에 자료를 저장
프로그램 기본 구조 : 데이터 + (Program) Code
- 데이터 정의 : 사용할 입력 데이터 종류와 출력 데이터 종류
- 예로) 1학년 1반 성적계산 프로그램에서는 입력데이터는 학생수, 국어/영어/수학 성적, 출력 데이터는 평균,최고, 최저 성적 등
- Program code : 명령어 집합으로 입력데이터를 가공
변수란?
- 하나의 값을 저장할 수 있는 메모리 공간
변수의 선언
- 타입: 메모리 방의 크기와 데이터 종류(정수, 실수, 문자열 등) 지정
- 타입 변수이름 : int age; double value;
변수 이름을 위한 명명 규칙(naming convention)
작성 규칙 | 예 |
첫번째 글자는 문자이거나 '$', '_' 여야 하고 숫자로 시작할 수 없다. (필수) | 가능: price, $price, _companyName 불가능: 1v, @speed, $#value |
영어 대소문자가 구분된다. (필수) | firstname과 firstName은 다른 변수 |
첫문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫자를 대문자로 한다. (관례) | maxSpeed, firstName, carBodyColor |
문자 수(길이)의 제한은 없다. | |
자바 예약어는 사용할 수 없다. (필수) | 책참조 |
변수의 사용
- 변수값 저장
int score; // 변수 선언
score = 90; // 값 저장
- 초기값은 변수를 선언함과 동시에 줄 수도 있다.
int score = 90;
변수의 사용
-변수값 읽기
- 변수는 초기화가 되어야 읽기 가능
잘못된 코딩의 예
int value; // 변수 value 선언 (초기화 안됨)
int result = value + 10; // 변수 value 값을 읽고 10을 더한 결과값을 변수 result에 저장
맞게 고친 후의 코드
int value = 30; // 변수 value가 30으로 초기화 됨
int result = value + 10; // 변수 value 값을 일고 10을 더한 결과값(40)을 변수 result에 저장
리터럴(literal)
- 소스 코드 내에서 직접 입력된 변수의 초기값
- 종류 : 정수 리터럴, 실수 리터럴, 문자 리터럴, 문자열 리터럴, 논리 리터럴
- 문자 리터럴 예 : 'A' , '한', '\t', '\n'
- escape 문자 : \가 포함된 문자 리터럴로 특수한 용도로 사용
이스케이프 문자 | 용도 | 유니코드 |
'\t' | 수평 탭 | 0x0009 |
'\n' | 줄 바꿈 | 0x000a |
'\r' | 리턴 | 0x000d |
'\" | "(큰따옴표) | 0x0022 |
'\' | '(작은 따옴표) | 0x0027 |
'\\' | \ | 0x005c |
'\u16진수' | 16진수에 해당하는 유니코드 | 0x0000~0xffff |
변수의 사용 범위
- 변수는 중괄호 블록 {} 내에서 선언되고 사용
int var1; // 메소드 블록에서 선언
if(...) {
int var2; // if 블록에서 선언
// var1과 var2 사용 가능
} // => if 블록
for(...) {
int var3; // for 블록에서 선언
// var1과 var3 사용 가능
// var2는 사용 못함
} // => for 블록
// var1 사용 가능
// var2와 var3는 사용 못함
}
기본(primitive) 타입
- 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입
- 메모리의 최소 기억단위인 bit가 모여 byte 형성
- 1byte = 8bit
값의 종류 | 기본 타입 | 메모리 사용 크기 | 저장되는 값의 범위 | |
정수 | byte | 1 byte | 8 bit | 2^7 ~ 2^7-1 (-128 ~ 127) |
char | 2 byte | 16 bit | 0 ~ 2^16-1 (유니코드: \u0000 ~ \uFFFF, 0 ~ 65535) |
|
short | 3 byte | 16 bit | -2^15 ~ 2^15-1 (-32,768 ~ 32,767) |
|
int | 4 byte | 32 bit | -2^31 ~ 2^31-1 (-2,147,483,648 ~ 2,147,483,647) |
|
long | 8 byte | 64 bit | -2^63 ~ 2^63-1 | |
실수 | float | 4 byte | 32 bit | (+/-)1.4E-45 ~ (+/-)3.4E28 |
double | 8 byte | 64 bit | (+/-)4.9E-324 ~ (+/-)1.7E308 | |
논리 | boolean | 1 byte | 8 bit | true, false |
실수 타입(float, double)
- 부호 : sign(+ 또는 -), 가수 : mantissa, 지수(exponent)
- 예 : 1.101인 경우 float로 표현하면
- sign : 0, 가수 : 101, 지수: 1
- 0 00000001 00000000000000000000101
Console에서 입력 Data 읽기
- System.in
- 키보드로부터 키의 문자를 읽는 자바의 표준 입력 스티림
- 키의 문자는 바이트 단위로 읽어 들임
- Scanner 클래스
- Console(키보드)에서 데이터 읽는데 사용하는 class
- System.in에서 키를 읽게 하고, 읽는 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴한다.
- Scanner에서 키 입력 받기
- Scanner는 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽는다.
- 공백 문자 : '\t', '\f', '\r, ' ', '\n
Scanner 주요 메소드
메소드 | 설명 |
String next() | 다음 아이템을 문자여 타입으로 리턴한다. |
byte nextByte() | 다음 아이템을 byte 타입으로 리턴한다. |
short nextShort() | 다음 아이템을 short 타입으로 리턴한다. |
int nextInt() | 다음 아이템을 int 타입으로 리턴한다. |
long nextLong() | 다음 아이템을 long 타입으로 리턴한다. |
float nextFloat() | 다음 아이템을 float 타입으로 리턴한다. |
double nextDouble() | 다음 아이템을 double 타입으로 리턴한다. |
String nextLine() | 한 라인 전체('\n' 까지)를 읽어 문자열 타입('\n 미포함)으로 리턴한다. |
타입 변환
- 데이터 타입을 다른 타입으로 변환하는 것 (byte <-> int, int <-> double)
- 종류
- 자동(묵시적) 타입 변환 : Promotion
- 강제(명시적) 타입 변환 : Casting
- 자동 타입 변환
- 프로그램 실행 도중 작은 타입은 큰 타입으로 자동 타입 변환 가능
- (byte(1) < short(2) < int(4) < long(8) < float(4) < double(8) )
- 연산식에서 자동 타입 변환
- 연산은 같은 타입의 피연산자(operand)간에만 수행 - 서로 다른 타입의 피연산자는 같은 타입으로 변환 - 두 피연산자 중 크기가 큰 타입으로 자동 변환
- int보다 작은 byte, char, short등의 타입으로 산술 연산할 때 int로 자동타입 변환 (4 bytes 체계로 자동 형 변환) - char + char => int + int , short + short => int + int, char + short => int + int
- long과 byte, char, short, int와 산술 연산할 때 long으로 자동타입 변환 ( 8 bytes 체계로 자동 형 변환)
- double type과 다른 type이 산술 연산할 때 모두 double type으로 자동 타입 변환 ( 8 bytes 체계로 자동 형 변환)
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; // result에 15.5가 저장
- Ex) int type으로 계산 결과를 얻고 싶다면 Double type 변수를 먼저 int로 변환 후 계산해야 한다.
- 강제 타입 변환
- 큰 타입을 작은 타입 단위로 쪼개기
- 끝의 한 부분만 작은 타입으로 강제적 변환
- (작은크기 타입) = (작은크기 타입) 큰크기 타입
- 예를 들어 int를 byte에 담으려면 아래 코드처럼 해주면 된다.
int intValue = 103020400
byte byteValue = (byte) intValue;
오늘은 이처럼 코딩의 입문단계인 변수와 타입을 배웠다. 앞으로 코딩에서 항상 쓰이게 될 것이고 기본적으로 알아야 하는 내용들이였습니다. 다음에는 오늘 배운 내용으로 실제 코딩을 하면서 실습을 해보겠습니다.
반응형