데이터타입과변수 및조건문...
Transcript of 데이터타입과변수 및조건문...
목차
• 자바 프로그램 구조
• 변수 및 데이터 타입
• 연산자
• 조건문
• 반복문
2
목차
• 자바 프로그램 구조
• 변수 및 데이터 타입
• 연산자
• 조건문
• 반복문
3
4
자바 프로그램 구조
public class Hello2 {
public static int sum(int n, int m) { return n + m;
}
// main() 메소드에서 실행 시작public static void main(String[] args) {
int i = 20;int s;char a;
s = sum(i, 10); // sum() 메소드 호출a = '?';System.out.println(a); // 문자 '?' 화면 출력System.out.println("Hello2"); // "Hello2" 문자열 화면 출력System.out.println(s); // 정수 s 값 화면 출력
}}
클래스
메소드
메소드
목차
• 자바 프로그램 구조
• 변수 및 데이터 타입
• 연산자
• 조건문
• 반복문
5
6
변수 및 데이터 타입
• 변수란?– 하나의 값을 저장할 수 있는 메모리 공간
• 변수의 선언
int age ; double value ;
타입 변수이름
7
변수 및 데이터 타입
• 식별자– 클래스, 변수, 상수, 메소드 등에 붙이는 이름
• 식별자를 위한 명명 규칙– ‘@’, ‘#’, ‘!’와 같은 특수 문자, 공백 또는 탭은 식별자로 사용할 수
없으나 ‘_’, ‘$’는 사용 가능
– 유니코드 문자 사용 가능. 한글 사용 가능
– 자바 언어의 키워드는 식별자로 사용불가
– 식별자의 첫 번째 문자로 숫자는 사용불가
– ‘_’ 또는 ‘$’를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로잘 사용하지 않는다.
– 대소문자 구별
– 길이 제한 없음
8
변수 및 데이터 타입
• 데이터 타입– 기본 타입 (primitive type) : 8개
• boolean
• char
• byte
• short
• int
• long
• float
• Double
– 레퍼런스 타입 (reference type) : 1개, 3가지 용도
• 클래스(class)에 대한 레퍼런스
• 인터페이스(interface)에 대한 레퍼런스
• 배열(array)에 대한 레퍼런스
논리형
정수형
실수형
9
변수 및 데이터 타입
• 기본 데이터 타입– 크기가 정해져 있음
– 크기는 CPU나 운영체제에 따라 변하지 않음
0
1 byte = 8 bit
0 0 0 0 0 0 0
10
변수 및 데이터 타입
• 변수의 사용– 변수 값 저장
• 초기값은 변수를 선언함과 동시에 줄 수도 있음
int score ; // 변수 선언Score = 90 ; // 값 저장
int score = 90 ; // 선언과 동시에 값 저장
11
변수 및 데이터 타입
• 변수의 사용– 변수 값 읽기
• 잘못된 코딩의 예
• 맞게 고친 후의 코드
int value ; // 변수 선언 (초기화 X)int result = value + 10 ; // value 값에 10을 더해 저장
int value = 30 ; // 변수 선언 (초기화 O)Int result = value + 10 ; // value 값에 10을 더해 저장
리터럴(literal)
12
변수 및 데이터 타입
• 리터럴 (literal)– 변수에 값을 설정할 때, 그때의 값을 의미
• 리터럴의 종류– 정수 리터럴
– 실수 리터럴
– 문자 리터럴
– 문자열 리터럴
– 논리 리터럴
13
변수 및 데이터 타입
• 정수 리터럴– 진수
• 2진수 (0, 1)
• 10진수 (0~9)
• 16진수 (0~9, A~F)
14
변수 및 데이터 타입
• 정수 리터럴– 8진수 : 0으로 시작
• int n = 015; // 10진수로 13
– 16진수 : 0x로 시작
• int n = 0x15; // 10진수로 21
– 10진수 : 0으로 시작하지 않는 숫자
• 15, 3, 20, 55, 88
– 2진수 : 0b로 시작
• int n = 0b0101; // 이진수 0101 -> 십진수 5
– long 타입 리터럴은 숫자 뒤에 L 또는 l을 붙여 표시
• ex) 24L, 3578l
15
변수 및 데이터 타입
• 실수 리터럴– 부동 소수점 실수 직접 표시
• 소수점을 찍은 실수, 지수(exponent)식으로 표현한 실수
– 12. 또는 12.0
– .1234 또는 0.1234 또는 1234E-4
• 숫자 뒤에 f(float)나 d(double)을 명시적으로 붙이기도 함
– 0.1234 또는 0.1234D 또는 0.1234d → double 타입
– 0.1234f 또는 0.1234F → float 타입
– 1234D 또는 1234d → 1234.0과 같으며 double 타입
– 1234F 또는 1234f → 1234.0과 같으며 float 타입
16
변수 및 데이터 타입
• 문자 리터럴– 단일 인용부호(' ')로 문자 표현
• 'a', 'W', '가', '*', '3', '7'
– \u다음에 4자리 16진수로, 2 바이트의 유니코드(Unicode)
• \u0041 -> 문자 'A'의 유니코드(0041)
• \uae00 -> 한글문자 '글'의 유니코드(ae00)
– 특수 기호는 \로 시작
17
변수 및 데이터 타입
• 문자열 리터럴– 이중 인용부호로 묶어서 표현
• "Good", "Morning", "자바", "3.19", "26", "a"
– 자바에서 문자열은 객체이므로 기본 타입 아님
– 문자열 리터럴은 String 객체로 자동 처리
• 논리 리터널– true 또는 false 뿐
boolean b = true; boolean c = 10 > 0; // 10>0이 참이므로 c 값은 true
18
변수 및 데이터 타입
• 상수– 상수 선언
• final 키워드 사용
• 선언 시 초기값 지정
• 실행 중 값 변경 불가
19
변수 및 데이터 타입
• 변수의 사용 범위– 변수는 중괄호 블록 {} 내에서 선언되고 사용
public class Hello2 {
public static int sum(int n, int m) { return n + m;
}
// main() 메소드에서 실행 시작public static void main(String[] args) {
int i = 20;int s;char a;
s = sum(i, 10); // sum() 메소드 호출a = '?';System.out.println(a); // 문자 '?' 화면 출력System.out.println("Hello2"); // "Hello2" 문자열 화면 출력System.out.println(s); // 정수 s 값 화면 출력
}}
i, s, a 는 여기서만사용 가능
20
변수 및 데이터 타입
• 변수의 사용 예public class exam_val {
public static void main(String[] args) { int i = 20 ;float f = 3.123456789123456789123456789f ;float f2 = 3f ;double d = 3.123456789123456789123456789 ;double d2 = 5 ;boolean b = true ;boolean b2 = false ;char by = 'a' ;char by2 = '\uae00' ;String s = "Java" ;
System.out.println(i);System.out.println(f);System.out.println(f2);System.out.println(d);System.out.println(d2);System.out.println(b);System.out.println(b2);System.out.println(by);System.out.println(by2);System.out.println(s);
}}
20
3.1234567
3.0
3.123456789123457
5.0
true
false
Java
a
글
21
변수 및 데이터 타입
• 타입 변환– 데이터 타입을 다른 타입으로 변환하는 것
• byte ↔ int, int ↔ double
– 종류
• 자동(묵시적) 타입 변환: Promotion
• 강제(명시적) 타입 변환: Casting
22
변수 및 데이터 타입
• 자동 타입 변환– 프로그램 실행 도중 작은 타입은 큰 타입으로 자동 타입 변환 가능
long var;byte b = 25; // 0x19var = b;
자동타입변환바이트타입 변수롱타입 변수
0x19 b 8비트
0x0000000000000019 var 64비트
변수 및 데이터 타입
• 연산식에 의한 자동 타입 변환– 연산은 같은 타입의 피연산자(operand)간에만 수행
• 서로 다른 타입의 피연산자는 같은 타입으로 변환
• 두 피연산자 중 크기가 큰 타입으로 자동 변환
int var ;double doublevar ;double result = var + doublevar;
24
변수 및 데이터 타입
• 강제 타입 변환– 개발자의 의도적인 타입 변환
– 큰 타입을 작은 타입 단위로 쪼개기
– 끝의 한 부분만 작은 타입으로 강제적 변환
short var;int n = 855638017; //0x33000001var = (short) n;
0x33000001 n 32비트
0x0001 var 16비트
int 타입 값을 short타입으로 강제 변환
int 타입 변수short 타입 변수
25
변수 및 데이터 타입
• 타입 변환 실습
public class TypeConversion {public static void main(String[] args) {
byte b = 127;int i = 100;System.out.println(b+i);System.out.println(10/4);System.out.println(10.0/4);System.out.println((char)0x12340041);System.out.println((byte)(b+i));System.out.println((int)2.9 + 1.8);System.out.println((int)(2.9 + 1.8));System.out.println((int)2.9 + (int)1.8);
}}
22722.5A-293.843
목차
• 자바 프로그램 구조
• 변수 및 데이터 타입
• 연산자
• 조건문
• 반복문
26
27
연산자
• 연산이란?– 데이터를 처리하여 결과를 산출하는 것
• 연산자(Operations)– 연산에 사용되는 표시나 기호(+, -, *, /, %, =, …)
• 피연산자(Operand)– 연산 대상이 되는 데이터(리터럴, 변수)
• 연산식(Expressions)– 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것
28
연산자
29
연산자
• 연산자의 종류
30
연산자
• 연산의 방향과 우선 순위
31
연산자
• 산술 연산자– boolean 타입을 제외한 모든 기본 타입에 사용 가능
– 결과값 산출할 때 Overflow 주의
– 정확한 계산은 정수를 사용
– NaN과 Infinity 연산은 주의할 것
– +는 문자열 결합에 사용 가능 (String)
32
연산자
• 비교 연산자– 대소(<, <=, >, >=) 또는 동등(==, !=) 비교해 boolean 타입인
true/false 산출
– 동등 비교 연산자는 모든 타입에 사용
– 크기 비교 연산자는 boolean 타입 제외한 모든 기본 타입에 사용
– 흐름 제어문인 조건문(if), 반복문(for, while)에서 주로 이용
• 실행 흐름을 제어할 때 사용
33
연산자
• 논리 연산자– 논리곱(&&), 논리합(||), 배타적 논리합(^) ,논리 부정(!) 연산 수행
– 피연산자는 boolean 타입만 사용 가능
34
연산자
• 비트 연산자– 비트(bit) 단위로 연산 하므로 0과 1이 피연산자
• 0과 1로 표현이 가능한 정수 타입만 비트 연산 가능
• 실수 타입인 float과 double은 비트 연산 불가
– 종류
• 비트 논리 연산자(&, |, ^, ~)
• 비트 이동 연산자(<<, >>, >>>)
35
연산자
• 비트 논리 연산자– 피 연산자가 boolean타입일 경우 일반 논리 연산자
– 피연산자가 정수 타입일 경우 비트 논리 연산자로 사용
– 비트 연산자는 피연산자를 int타입으로 자동 타입 변환 후 연산 수행
36
연산자
• 비트 논리 연산자
37
연산자
• 비트 이동 연산자– 시프트 연산자
– 정수 데이터의 비트를 좌측 또는 우측으로 밀어 이동시키는 연산수행
38
연산자
• 비트 이동 연산자
39
연산자
• 대입, 증감 연산자
40
연산자
• 대입 및 증감 연산 실습
public class UnaryOperator {public static void main(String[] args) {
int opr = 0;opr += 3; // opr = opr + 3System.out.println(opr++); // opr 출력 후 증가System.out.println(opr);System.out.println(++opr); // opr 증가 후 출력System.out.println(opr);System.out.println(opr--); // opr 출력 후 감소System.out.println(opr);System.out.println(--opr); // opr 감소 후 출력System.out.println(opr);
}}
34555433
41
연산자
• 삼항 연산자– 세 개의 피연산자를 필요로 하는 연산자
– 앞의 조건식 결과에 따라 콜론 앞 뒤의 피연산자 선택 -> 조건 연산식
목차
• 자바 프로그램 구조
• 변수 및 데이터 타입
• 연산자
• 조건문
• 반복문
42
43
조건문
• 코드 실행 흐름 제어– 정상적인 코드 실행 흐름
• main() 메소드의 시작인 중괄호 { 에서 끝 중괄호 } 까지 위->아래 방향으로 실행
– 제어문의 역할
• 코드 실행 흐름을 개발자가 원하는 방향으로 변경할 수 있도록 도와줌
– 제어문의 종류
• 조건문
• 반복문
• Break, continue 문
– 제어문은 중첩이 가능
44
조건문
• 조건문의 종류– If, switch
• If문– 조건식 결과 따라 중괄호 { } 블록을 실행할지 여부 결정할 때 사용
– 조건식
• true 또는 false값을 산출할 수 있는 연산식
• boolean 변수
• 조건식이 true이면 블록 실행하고 false 이면 블록 실행하지 않음
45
조건문
• If문
public class SuccessOrFail {public static void main (String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("점수를 입력하시오: ");int score = in.nextInt();if (score >= 80)
System.out.println("축하합니다! 합격입니다.");}
}
점수를 입력하시오: 95축하합니다! 합격입니다.
46
조건문
• if-else 문– 조건식 결과에 따라 실행 블록을 선택
47
조건문
• if-else 문
public class MultipleOfThree {public static void main (String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("수를 입력하시오: ");int number = in.nextInt();
if (number % 3 == 0)System.out.println("3의 배수입니다.");
else System.out.println("3의 배수가 아닙니다.");
}}
수를 입력하시오: 1293의 배수입니다
48
조건문
• if - else if - else 문– 복수의 조건식을 두어 결과에 따라 실행 블록을 선택
49
조건문
• if - else if - else 문
public static void main (String[] args) {char grade;Scanner a = new Scanner(System.in);while (a.hasNext()) {
int score = a.nextInt();if(score >= 90)
grade = 'A';else if(score >= 80)
grade = 'B';else if(score >= 70)
grade = 'C';else if(score >= 60)
grade = 'D';else
grade = 'F';System.out.println("학점은 "+grade+"입니다");
}}
80학점은 B입니다90학점은 A입니다76학점은 C입니다
50
조건문
• 중첩 if 문– 코드 실행 흐름을 이해하는 것이 가장 중요
51
조건문
• Switch 문– 변수 및 연산식의 값에 따라 실행문을 선택할 때 사용
52
조건문
• Switch 문 실습– 앞의 if - else if - else 문 예제에서 본 학점 부여 프로그램을 switch
문으로 변경
목차
• 자바 프로그램 구조
• 변수 및 데이터 타입
• 연산자
• 조건문
• 반복문
53
54
반복문
• 반복문이란? – 중괄호 블록 내용을 반복적으로 실행할 때 사용
• 반복문의 종류– for 문
– while 문
– do while 문
55
반복문
• for 문– 반복 획수를 알고 있을 때 주로 사용
56
반복문
• while 문– 조건에 따라 반복을 계속할지 결정할 때 사용
57
반복문
• do-while문– 조건 따라 반복 계속할지 결정할 때 사용하는 것은 while문과 동일
– 무조건 중괄호 { } 블록을 한 번 실행한 후, 조건 검사해 반복 결정
58
반복문
• break 문– for문, while문, do-while문 종료 (반복 취소)
– Switch문 종료
– 대개 if문과 같이 사용
• if문 조건식에 따라 for문과 while문 종료할 때 사용
59
반복문
• break 문
public class BreakExample {public static void main (String[] args) {
Scanner in = new Scanner(System.in);int num = 0;
while (true) {if (in.nextInt() == -1)
break;num++;
}System.out.println("입력된 숫자 개수는 " + num);
}} 10
895-1입력된 숫자 개수는 4
60
반복문
• break 문– 반복문이 중첩된 경우
• 반복문이 중첩되어 있을 경우 break; 문은 가장 가까운 반복문만 종료
• 바깥쪽 반복문까지 종료시키려면 반복문에 이름(라벨)을 붙이고, “break 이름;” 사용
61
반복문
• continue 문– for문, while문, do-while문에서 사용
• for문: 증감식으로 이동
• while문, do-while문: 조건식으로 이동
62
반복문
• continue 문
public class ContinueExample {public static void main (String[] args) {
int sum = 0;for (int i = 1; i <= 100; i++) {
if (i%2 == 1) continue;
elsesum += i;
}System.out.println("1부터 100까지 짝수의 합은 " + sum);
}}
1부터 100까지 짝수의 합은 2550
63
반복문
• 예제 1 : 구구단을 출력하시요.– 이중 for문을 사용
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
.
.
.
.
9 * 8 = 72
9 * 9 = 81
64
반복문
• *을 다음 과 같이 출력하시오.– for문을 사용
– System.out.println 대신 System.out.print 를 사용
*
**
***
****
*****
for (int i = 1 ; i <= 5 ; i++) {for (int j = 0 ; j < i ; j++) {
System.out.print("*");}System.out.println() ;
}
65
반복문
• *을 다음 과 같이 출력하시오.– for문을 사용– System.out.println 대신 System.out.print 를 사용
*************************
for (int i = 1 ; i <= 5 ; i++) {for (int j = 0 ; j < i ; j++) {
System.out.print("*");}System.out.println() ;
}
for (int i = 4 ; i >= 0 ; i--) {for (int j = 0 ; j < i ; j++) {
System.out.print("*");}System.out.println() ;
}
66
반복문
• *을 다음 과 같이 출력하시오.– for문을 사용
– System.out.println 대신 System.out.print 를 사용
*
***
*****
public static void main(String[] args) {
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3 - x; y++) {
System.out.print(" ");
}
for (int y = 0; y < 2 * (x + 1) - 1; y++) {
System.out.print("*");
}
System.out.println("");
}
}
67
반복문
• *을 다음 과 같이 출력하시오.– for문을 사용
– System.out.println 대신 System.out.print 를 사용
*
***
*****
***
*
public static void main(String[] args) {
for (int x = 0; x < 2; x++) {
for (int y = 0; y < 2 - x; y++) {
System.out.print(" ");
}
for (int y = 0; y < 2 * (x + 1) - 1; y++) {
System.out.print("*");
}
System.out.println("");
}
for (int x = 2; x >= 0; x--) {
for (int y = 0; y < 2 - x; y++) {
System.out.print(" ");
}
for (int y = 0; y < 2 * (x + 1) - 1; y++) {
System.out.print("*");
}
System.out.println("");
}
}