Presentation is loading. Please wait.

Presentation is loading. Please wait.

[INA470] Java Programming Youn-Hee Han

Similar presentations


Presentation on theme: "[INA470] Java Programming Youn-Hee Han"— Presentation transcript:

1 [INA470] Java Programming Youn-Hee Han http://link.kut.ac.kr
05. 변수, 연산자, 수식 [INA470] Java Programming Youn-Hee Han

2 1. 변수와 자료형 변수(variable): 데이터 값들이 저장되는 메모리 공간 자료형 (Data Type) 자료형의 종류
변수 자체가 어떠한 종류의 데이터를 담을 수 있는 가를 나타냄 변수에 저장되는 자료의 타입 자료형의 종류 기초형 (Primitive Data Type) 실제 값이 변수 자체에 저장 참조형 (Reference Data Type) 실제 값은 Heap이라는 저장 공간에 위치하고 변수에는 그 값이 위치한 주소가 저장

3 1. 변수와 자료형 변수의 선언과 초기화 선언만 하는 방법 선언과 동시에 초기화

4 1. 변수와 자료형 식별자 (identifier) 변수의 이름 변수 이름의 규칙
Identifiers are “names” we give to our variables, constants, classes, and methods 변수의 이름 식별자(identifier)의 일종 변수 이름의 규칙 식별자는 유니코드 문자와 숫자의 조합 식별자의 첫 문자는 유니코드 문자이어야 한다. 첫 문자가 _, $ 가 가능하지만 추천하지 않음 두 번째 문자부터는 숫자, _, $, # 등이 가능하다. 대문자와 소문자는 구별된다. 식별자의 이름으로 키워드(keyword)를 사용해서는 안 된다. true, false, null은 키워드로 분류되지 않지만 변수 이름 (식별자)로 사용될 수 없다.

5 1. 변수와 자료형 자바에서의 키워드 (keyword) 예약어(Reserved Word) 라고도 한다.

6 1. 변수와 자료형 변수 정하는 법의 예

7 1. 변수와 자료형 식별자 이름 정하는 관례

8 1. 변수와 자료형 리터럴 (Literals) 리터럴은 Java 소스 코드 내에 표기된 데이터 값 그대로인 상수(Constants)를 지칭한다. 다음과 같은 상수들이 리터럴의 예이다. 이러한 리터럴의 타입은 자바 컴파일러가 소스 코드를 컴파일할 때 자동으로 할당하는데 그 규칙은 다음과 같다. 소수점이 없는 수치 리터럴은 int 타입을 부여한다. 소수점이 있는 수치 리터럴은 double 타입을 부여한다. 큰따옴표(")로 묶여진 텍스트는 String 타입을 부여한다. 작은따옴표(')로 묶여진 문자에는 char 타입을 부여한다. 10 1.765 'A' '/u4422' "JSP 프로그래밍"

9 1. 변수와 자료형 한글 변수명? [중간 점검 문제] 2. days와 Days는 동일한 변수인가 아닌가?
한글 변수 이름도 가능합니다. [중간 점검 문제] 2. days와 Days는 동일한 변수인가 아닌가? 3. 다음 중에서 올바르지 않은 변수이름은? x, 8items, march09, sales_report, theProfit2009, #ofPlayer

10 2. 기초형 기초 자료형 (Primitive Data Type)
자바에서 사용되는 자료는 대부분이 객체이지만 기초형은 자주 사용되기 때문에 성능 저하를 막기 위하여 기초형만큼은 객체가 아닌 숫자나 문자 값 그 자체임. int vs. Integer

11 2. 기초형 정수형 long은 64비트를 이용 int는 32비트를 이용하여 약 -21억에서 21억 정도의 정수를 표현
short는 16비트를 이용하여 -32,768에서 사이의 정수를 표현 byte는 8비트 정수로서 -128에서 +127까지의 정수를 표현 (Q) 만약 다음과 같이 정수형의 변수에 범위를 벗어나는 값을 대입하면 어떻게 될까? byte number = 300;// 오류!! (A) 컴파일 오류가 발생한다.

12 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) int a1=10, b1=1000, c1=-234; long a2= L, b2=2345l;

13 2. 기초형 정수 리터럴 예제 public class IntegerLiterals {
public static void main(String args[]) { int i = 26; // 26을 10진수로 표현 int oi = 032; // 26을 8진수로 표현 int xi = 0x1a; // 26을 16진수로 표현 int j1 = 10; // int j2 = 10L; // 잘못된 구문 System.out.println(i); System.out.println(oi); System.out.println(xi); } // end method main } // end class IntegerLiterals

14 2. 기초형 기호 상수 논리형 상수에 이름을 주어서 변수처럼 사용 숫자보다 이해하기 쉽고, 값의 변경이 용이하다.
true 아니면 false라는 값만 가질 수 있다. final double PI = ; final int MAX_NUMBER = 100; boolean condition = true; boolean flag = false; x = 1; if (x) System.out.println(“Hello!”); 잘못된 코딩

15 2. 기초형 실수형 실수 리터럴 float는 32비트를 이용하여 실수를 표현 double은 64비트를 이용하여 실수를 표현
float타입은 0.0이 아니라 0.0F임에 주의 실수 리터럴은 double 타입으로 인식되기 때문에 실수 리터럴 뒤에 F (또는 f)가 있어야 float타입인 실수 리터럴이 된다. float a = 123.2F; (O) float a = 123.2f; (O) double a = 123.2; (O) float temperature = 25.6; (X) float temperature = 25.6F; (O)

16 2. 기초형 실수 리터럴 표기법 특수한 실수값 위 표에서 일반 표기법과 지수 표기법이 가능하다.
일반 표기법의 세 번째 처럼 자리수 구분 기호는 사용 불가 특수한 실수값 Infinity: 양의 무한대(positive infinity) -Infinity: 음의 무한대(negative infinity) 0.0: 너무나 작아서 표현할 수 없는 값 NaN(Not a Number): 유효하지 않은 연산 0.0/0.0 Math.sqrt(-0.9)

17 2. 기초형 실수 리터럴 예제 1 public class FloatLiterals {
public static void main(String args[]) { double r1 = 123.5; float r2 = 123.5F; //float rf = 123.5; // 잘못된 구문 double r3 = 1.235e2; double r4 = 1.235e-2; double r5 = 0.0 / 0.0; double r6 = 1.0 / 0.0; double r7 = -1.0 / 0.0; System.out.println(r1); System.out.println(r2); System.out.println(r3); System.out.println(r4); System.out.println(r5); System.out.println(r6); System.out.println(r7); } // end method main } // end class FloatLiterals 실수 리터럴 예제 1

18 2. 기초형 실수 리터럴 예제 2 [참고]

19 2. 기초형 문자형 아스키 (ASCII) 코드가 아니라 16비트 유니 코드(unicode)를 사용
유니코드의 0x0000부터 0x00ff까지의 문자는 일반적으로 많이 쓰이는 ASCII 코드와 호환 ‘A', 'b', '한', ’9‘, ’\ud654'

20 2. 기초형 문자형 리터럴 (상수) ‘A', 'b', '한', ’9‘, ’\ud654'

21 2. 기초형 특수 문자 리터럴

22 2. 기초형 특수 문자 리터럴 예제 public class CharLiterals2 {
public static void main(String args[]) { System.out.println("\n줄바꿈 \n\n기능을 테스트합니다."); System.out.println("\t탭기능을 \t테\t스트합니다."); System.out.println("캐리지 리턴을 \r테스트합니다."); System.out.println("\'작은 따옴표를 테스트합니다.\'"); System.out.println("\"큰 따옴표를 테스트합니다.\""); }

23 2. 기초형 중간 점검 1. 변수가 36에서 5000정도의 값을 저장하여야 하다면 어떤 자료형이 최적인가?
2. 변수가 -3000에서 +3000까지의 값을 저장하여야 하다면 어떤 자료형이 최적인가? 를 지수 표기법으로 표기하여 보라. 4. 어떤 리터럴(상수)이 더 많은 메모리 공간을 차지하는가? F 5. booelan 자료형이 가질 수 있는 값을 전부 쓰시오.

24 3. 연산자 연산자와 피연산자 우선순위 (Precedence) 연산자(operator)는 특정한 연산을 나타내는 기호
피연산자(operand)는 연산의 대상 우선순위 (Precedence) 수식을 계산할 때에는 우선 순위가 높은 연산자가 먼저 실행 우선 순위가 같은 연산자는 대입 연산자를 제외하고 왼쪽에서 오른쪽으로 계산 대입 연산자는 오른쪽에서 왼쪽으로 계산

25 3. 연산자 연산자의 종류 및 우선순위 int n = 1 - 2 * 3 - 4 + 5;

26 3. 연산자 수식 (Expression) 상수나 변수, 함수와 같은 피연산자들과 연산자의 조합 =

27 4. 대입, 산술, 단항 연산자 대입 연산자 (Assignment Operator)
대입 연산자(=)는 왼쪽 변수에 오른쪽 수식의 값을 계산하여 저장 대입 연산자 == 할당 연산자 == 배정 연산자 산술 연산자 (Arithmetic Operators)

28 4. 대입, 산술, 단항 연산자 산술 연산자 (Arithmetic Operators)

29 4. 대입, 산술, 단항 연산자 문자열과 “+” 연산자 + 연산자는 문자열들을 결합할때 사용될 수 있다.
+ 연산자는 문자열들을 결합할때 사용될 수 있다. 문자열과 다른 타입의 + 연산 결과는 문자열 public class StringOperator { public static void main(String[] args) { String s1 = "Hello"; String s2 = " World"; int i = 10000; double j = 20.12; char c = '\u0041'; boolean flag = false; String s3 = s1 + s2; String s4 = s1 + i + j + c + flag; String s5 = "" + i + j; double result = i + j; System.out.println(s3); System.out.println(s4); System.out.println(s5); System.out.println(result); }

30 4. 대입, 산술, 단항 연산자 단항 연산자 x = a * -b x = a * (-b)

31 4. 대입, 산술, 단항 연산자 단항 연산자 예제 위 출력결과에서 마지막 i 값은 왜 4가 아니라 3일까?
이후에 배우는 논리연산자의 short circuit 과 관련 public class UnaryOperator2 { public static void main(String[] args) { int i = 0; int j = 1; if(++i==j && ++i==++j) System.out.println("true 1"); System.out.println(i + ", " + j); if(++i==++j || ++i==j) System.out.println("true 2"); }

32 4. 대입, 산술, 단항 연산자 복합 대입 연산자 관계 연산자 (Relational Operators)
연산의 결과는 항상 boolean 리터럴인 true 또는 false 가 된다.

33 4. 대입, 산술, 단항 연산자 논리 연산자

34 4. 대입, 산술, 단항 연산자 논리 연산자 예제 ( x==3 && y ==7)
위와 같이 작성해도 연산자 우선 순위상 문제 없음

35 if(++i==++j || ++i==j)
4. 대입, 산술, 단항 연산자 논리 연산자와 Short Circuit (expr1 && expr2) 에서 expr1이 false 이면 expr2는 무시됨 (expr1 || expr2) 에서 expr1이 true 이면 expr2는 무시됨 if ( x != 0 && y == 12/x)  x가 0이면 y==12/x 라는 수식은 계산되지 않는다. if(++i==++j || ++i==j)  ++i 값과 ++j 값이 같으면 ++i ==j 수식은 무시된다.

36 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

37 5. 연산자의 우선 순위와 결합 규칙 어떤 연산자가 먼저 계산되는가? 괄호 안은 먼저 계산된다.    
만약 같은 우선 순위를 가지는 연산자들이 여러 개가 있으면 어떤 것을 먼저 수행하여야 하는가? m = x + y + z / 3    

38 5. 연산자의 우선 순위와 결합 규칙 중간 점검 다음의 수식에서 연산의 순서를 적으시오.
x = y = 3 / 5 * 2 % 6; (2) y = a * x * x + b * x + c;

39 6. 비트 연산자 비트 연산자 (Bit Operators) 정수 타입에 대한 비트 연산 및 비트 이동 연산 <<
오른쪽의 남는 비트는 0으로 채운다. >> 왼쪽의 남는 비트는 부호와 같은 값으로 채운다. 양수는 0으로 음수는 1로 채운다. >>> 왼쪽의 남는 비트는 부호와 무관하게 무조건 0으로 채운다.

40 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;

41 7. 형변환 형변환 (Type Casting) 묵시적 형변환 (Implicit Type Casting)
자동 형 변환, 확대 변환 (Widening) 타입별 범위의 순서 범위가 작은 타입 값을 범위가 큰 타입 변수에 할당할 때 Java 언어 자체에서 자동으로 타입 변환을 해주는 것을 의미 byte < short < int < long < float < double long value1 = 100; // int 타입 상수를 묵시적으로 long 타입 변수에 할당 가능 double value2 = 100; // int 타입 상수를 묵시적으로 double 타입 변수에 할당 가능 double value2 = (double) 100; // 명시적으로 적어주어도 무방 double value3 = 2 + 3; // int 타입 연산 결과를 double 타입 변수로 할당 가능

42 7. 형변환 명시적 형변환 (Implicit Type Casting)
범위가 큰 타입의 값을 범위가 작은 타입의 변수로 할당할 때 반드시 필요 축소 변환 (Narrowing Conversion) 형태 y = (double) x long value1 = 100L; //long 타입 상수를 long 타입 변수에 할당 (형변환 없음) int value2 = (int)value1; //long 타입 값을 명시적으로 int 타입 변수에 할당 int i = (int) // double 타입 상수를 int 타입에 할당 (주의) 소수점 이하는 사라진다.

43 7. 형변환 형변환 예제


Download ppt "[INA470] Java Programming Youn-Hee Han"

Similar presentations


Ads by Google