430 likes | 622 Views
05. 변수 , 연산자 , 수식. [INA470] Java Programming Youn-Hee Han http://link.kut.ac.kr. 1. 변수와 자료형. 변수 (variable): 데이터 값들이 저장되는 메모리 공간 자료형 (Data Type) 변수 자체가 어떠한 종류의 데이터를 담을 수 있는 가를 나타냄 변수에 저장되는 자료의 타입 자료형의 종류 기초형 (Primitive Data Type) 실제 값이 변수 자체에 저장 참조형 (Reference Data Type)
E N D
05. 변수, 연산자, 수식 [INA470] Java Programming Youn-Hee Han http://link.kut.ac.kr
1. 변수와 자료형 • 변수(variable): 데이터 값들이 저장되는 메모리 공간 • 자료형 (Data Type) • 변수 자체가 어떠한 종류의 데이터를 담을 수 있는 가를 나타냄 • 변수에 저장되는 자료의 타입 • 자료형의 종류 • 기초형 (Primitive Data Type) • 실제값이 변수 자체에 저장 • 참조형 (Reference Data Type) • 실제 값은 Heap이라는 저장공간에 위치하고 변수에는 그값이 위치한 주소가 저장
1. 변수와 자료형 • 변수의 선언과 초기화 • 선언만 하는 방법 • 선언과 동시에 초기화
1. 변수와 자료형 • 식별자 (identifier) • Identifiers are “names” we give to our variables, constants, classes, and methods • 변수의 이름 • 식별자(identifier)의 일종 • 변수 이름의 규칙 • 식별자는 유니코드 문자와 숫자의 조합 • 식별자의 첫 문자는 유니코드 문자이어야 한다. • 첫 문자가 _, $ 가가능하지만 추천하지 않음 • 두 번째 문자부터는 숫자, _, $, # 등이 가능하다. • 대문자와 소문자는 구별된다. • 식별자의 이름으로 키워드(keyword)를 사용해서는 안 된다. • true, false, null은 키워드로 분류되지 않지만 변수 이름 (식별자)로 사용될 수 없다.
1. 변수와 자료형 • 자바에서의 키워드 (keyword) • 예약어(Reserved Word) 라고도 한다.
1. 변수와 자료형 • 변수 정하는 법의 예
1. 변수와 자료형 • 식별자이름 정하는 관례
1. 변수와 자료형 • 리터럴 (Literals) • 리터럴은 Java 소스 코드 내에 표기된 데이터 값 그대로인 상수(Constants)를 지칭한다. • 다음과 같은 상수들이 리터럴의 예이다. • 이러한 리터럴의 타입은 자바 컴파일러가 소스 코드를 컴파일할 때 자동으로 할당하는데 그 규칙은 다음과 같다. • 소수점이 없는 수치 리터럴은 int 타입을 부여한다. • 소수점이 있는 수치 리터럴은 double 타입을 부여한다. • 큰따옴표(")로 묶여진 텍스트는 String타입을 부여한다. • 작은따옴표(')로 묶여진 문자에는 char 타입을 부여한다.
1. 변수와 자료형 • 한글 변수명? 한글 변수 이름도 가능합니다. [중간 점검 문제] 2. days와 Days는 동일한 변수인가 아닌가? 3. 다음 중에서 올바르지 않은 변수이름은? x, 8items, march09, sales_report, theProfit2009, #ofPlayer
2. 기초형 • 기초 자료형 (Primitive Data Type) • 자바에서 사용되는 자료는 대부분이 객체이지만 기초형은 자주 사용되기 때문에 성능 저하를 막기 위하여 기초형만큼은 객체가 아닌 숫자나 문자 값 그 자체임. • int vs. Integer
2. 기초형 • 정수형 • long은 64비트를 이용 • int는 32비트를 이용하여 약 -21억에서 21억 정도의 정수를 표현 • short는 16비트를 이용하여 -32,768에서 +32767사이의 정수를 표현 • byte는 8비트 정수로서 -128에서 +127까지의 정수를 표현 (Q) 만약 다음과 같이 정수형의 변수에 범위를 벗어나는 값을 대입하면 어떻게 될까? byte number = 300;// 오류!! (A) 컴파일 오류가 발생한다.
2. 기초형 • 정수형 상수 (리터럴) • x = 100;에서 100과 같이 소스 코드에 쓰여 있는 값 그 자체 • 여러 진법 사용 가능 • 10진수(Decimal): 14, 16, 17 • 8진수(Octal): 016, 018, 019 • 16진수(hexadecimal):0xe, 0x10, 0x11 • l 또는 L 표기 • 정수 리터럴은 int 타입으로 인식되기 때문에 정수리터럴 뒤에 L (또는 l)이 있어야 long타입인 정수 리터럴이된다. • long타입의 제로에 해당하는 리터럴은 0이 아니라 0L (또는 0l)
2. 기초형 • 정수 리터럴 예제
2. 기초형 • 기호 상수 • 상수에 이름을 주어서 변수처럼 사용 • 숫자보다 이해하기 쉽고, 값의 변경이 용이하다. • 논리형 • true 아니면 false라는 값만 가질 수 있다. • final double PI = 3.141592; • final int MAX_NUMBER = 100; boolean condition = true; boolean flag = false; x = 1; if (x) System.out.println(“Hello!”); 잘못된 코딩
2. 기초형 • 실수형 • float는 32비트를 이용하여 실수를 표현 • double은 64비트를 이용하여 실수를 표현 • float는 약 7개 정도의 유효 숫자 • double은 약 15개 정도의 유효 숫자 • 실수 리터럴 • 실수형 리터럴은 double형이 기본 • float타입은 0.0이 아니라 0.0F임에 주의 • 실수 리터럴은 double 타입으로 인식되기 때문에 실수리터럴 뒤에 F (또는 f)가 있어야 float타입인 실수 리터럴이된다.
2. 기초형 • 실수 리터럴 표기법 • 위 표에서 일반 표기법과 지수 표기법이 가능하다. • 일반 표기법의 세 번째 처럼 자리수 구분 기호는 사용 불가 • 특수한 실수값 • Infinity: 양의 무한대(positive infinity) • -Infinity: 음의 무한대(negative infinity) • 0.0: 너무나 작아서 표현할 수 없는 값 • NaN(Not a Number): 유효하지 않은 연산 • 0.0/0.0 • Math.sqrt(-0.9)
2. 기초형 • 실수 리터럴 예제 1
2. 기초형 • 실수 리터럴 예제 2 [참고] http://www.concentric.net/~Ttwang/tech/javafloat.htm
2. 기초형 • 문자형 • 아스키 (ASCII) 코드가 아니라 16비트 유니 코드(unicode)를 사용 • 유니코드의 0x0000부터 0x00ff까지의 문자는 일반적으로 많이 쓰이는 ASCII 코드와 호환
2. 기초형 • 문자형 리터럴 (상수)
2. 기초형 • 특수 문자 리터럴
2. 기초형 • 특수 문자 리터럴 예제
2. 기초형 • 중간 점검 1. 변수가 36에서 5000정도의 값을 저장하여야 하다면 어떤 자료형이최적인가? 2. 변수가 -3000에서 +3000까지의 값을 저장하여야 하다면 어떤 자료형이 최적인가? 3. 0.025를 지수 표기법으로 표기하여 보라. 4. 어떤 리터럴(상수)이 더 많은 메모리 공간을 차지하는가? 28.9 28.9F 5. booelan 자료형이 가질 수 있는 값을 전부 쓰시오.
3. 연산자 • 연산자와 피연산자 • 연산자(operator)는 특정한 연산을 나타내는 기호 • 피연산자(operand)는 연산의 대상 • 우선순위 (Precedence) • 수식을계산할 때에는 우선 순위가 높은 연산자가 먼저 실행 • 우선 순위가 같은 연산자는 대입 연산자를 제외하고 왼쪽에서 오른쪽으로 계산 • 대입 연산자는 오른쪽에서 왼쪽으로 계산
3. 연산자 int n = 1 - 2 * 3 - 4 + 5; int n = 1 –(2 * 3) - 4 + 5; • 연산자의 종류 및 우선순위
3. 연산자 • 수식 (Expression) • 상수나 변수, 함수와 같은 피연산자들과 연산자의 조합 =
4. 대입, 산술, 단항 연산자 • 대입연산자 (Assignment Operator) • 대입 연산자(=)는 왼쪽 변수에 오른쪽 수식의 값을 계산하여 저장 • 대입 연산자 == 할당 연산자 == 배정 연산자 • 산술 연산자 (Arithmetic Operators)
4. 대입, 산술, 단항 연산자 • 산술 연산자 (Arithmetic Operators)
4. 대입, 산술, 단항 연산자 • 문자열과 “+” 연산자 • + 연산자는 문자열들을 결합할때 사용될 수 있다. • 문자열과 다른 타입의 + 연산 결과는 문자열
4. 대입, 산술, 단항 연산자 • 단항 연산자 x = a * -b x = a * (-b)
4. 대입, 산술, 단항 연산자 • 단항 연산자 예제 • 위 출력결과에서 마지막 i 값은 왜 4가 아니라 3일까? • 이후에 배우는 논리연산자의 short circuit 과 관련
4. 대입, 산술, 단항 연산자 • 복합 대입 연산자 • 관계 연산자 (Relational Operators) • 연산의 결과는 항상 boolean 리터럴인 true 또는 false 가 된다.
4. 대입, 산술, 단항 연산자 • 논리 연산자
4. 대입, 산술, 단항 연산자 • 논리 연산자 예제 ( x==3 && y ==7) 위와 같이 작성해도 연산자 우선 순위상 문제 없음
4. 대입, 산술, 단항 연산자 • 논리 연산자와 Short Circuit • (expr1 && expr2) 에서 expr1이 false 이면 expr2는 무시됨 • (expr1 || expr2) 에서 expr1이 true 이면 expr2는 무시됨 x가 0이면 y==12/x 라는 수식은 계산되지 않는다. ++i 값과 ++j 값이 같으면 ++i ==j 수식은 무시된다.
4. 대입, 산술, 단항 연산자 • 삼항 연산자 • condition이 참이면 exp1이 선택되어 계산되고 그렇지 않으면 exp2가 선택되어 계산된다. • (예) max_value = (x > y) x : y; // 최대값 계산 • 중간 점검 문제 condition ? exp1 : exp2 • 1. 다음의 각 변수의 값을 적어보라. • int x = 1; • int y = 1; • int a = ++x * 2; // a의 값은 ___________ • int b = y++ * 2; // b의 값은 ___________ • 2. 다음 수식의 값을 쓰시오. • 12/5 - 3 • 5 + 19%3
5. 연산자의 우선 순위와 결합 규칙 • 어떤 연산자가 먼저 계산되는가? • 괄호 안은 먼저 계산된다. • 만약 같은 우선 순위를 가지는 연산자들이 여러 개가 있으면 어떤 것을 먼저 수행하여야 하는가? m = x + y + z / 3
5. 연산자의 우선 순위와 결합 규칙 • 중간 점검 • 다음의 수식에서 연산의 순서를 적으시오. • x = y = 3 / 5 * 2 % 6; • (2) y = a * x * x + b * x + c;
6. 비트연산자 • 비트 연산자 (Bit Operators) • 정수타입에 대한 비트 연산 및 비트 이동 연산 • << • 오른쪽의남는 비트는 0으로 채운다. • >> • 왼쪽의 남는 비트는 부호와 같은 값으로 채운다. 양수는 0으로 음수는 1로 채운다. • >>> • 왼쪽의 남는 비트는 부호와 무관하게 무조건 0으로 채운다.
6. 비트연산자 • 비트 연산자 예제 • 중간 점검 • 1. 변수 y, z, a, b의 값은? • int x = 0xff0f; • int y = x << 4; • int z = x >> 4; • int a = x & 0xf0ff; • int b = x | 0xf0ff;
7. 형변환 • 형변환 (Type Casting) • 형변환(cast)는 어떤 자료형의 값을 다른 자료형의 값으로 바꾸어 주는 연산 • 묵시적형변환 (Implicit Type Casting) • 자동 형 변환, 확대 변환 (Widening) • 타입별 범위의 순서 • 범위가 작은 타입 값을 범위가 큰 타입 변수에 할당할 때 Java 언어 자체에서 자동으로 타입 변환을 해주는 것을 의미
7. 형변환 • 명시적형변환 (Implicit Type Casting) • 범위가 큰 타입의 값을 범위가 작은 타입의 변수로 할당할 때 반드시 필요 • 축소 변환 (Narrowing Conversion) • 형태 y = (double) x (주의) 소수점 이하는 사라진다.
7. 형변환 • 형변환 예제