명품 Java Programming.

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

5 장 조건과 반복 ②. Contents Counting and Looping [while 문 사용 ] Powers of 2 [while 문 사용 ] More Guessing [do 문 사용 ] Election Day [do 문 사용 ] Finding Maximum &
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
Vision System Lab, Sang-Hun Han
제 3 장 변수와 자료형.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
10. 예외 처리.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
C++ Espresso 제1장 기초 사항.
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
객체지향 프로그래밍.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
7장 배열 ②.
어서와 Java는 처음이지! 제4장 배열.
Java Seminar 6.
제 4장 문 장 배정문 혼합문 제어문 표준 입출력.
강좌명 : C++프로그래밍 (C++ Programming)
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
명품 JAVA Programming 제 7 장 제네릭과 컬렉션.
명품 JAVA Essential.
제7장 제어구조 I – 식과 문장.
명품 JAVA Essential.
명품 JAVA Programming.
명품 JAVA Programming 제 4 장 클래스와 객체.
Power Java 제4장 자바 프로그래밍 기초.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
명품 JAVA Essential.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
주소록 프로그램.
7장 배열 ①.
제 3 장 상수와 변수
6장 객체-지향 설계 ①.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
제1장 서론.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Java 8장. 상속 public class SumTest {
5장 조건과 반복 ②.
6장 객체-지향 설계 ①.
어서와 Java는 처음이지! 제4장 배열 IT응용시스템공학과 김형진 교수.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Java의 정석 제 2 장 변수(Variable) Java 정석 남궁성 강의
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
4장 - PHP의 표현식과 흐름 제어-.
[INA470] Java Programming Youn-Hee Han
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
[INA470] Java Programming Youn-Hee Han
자바 5.0 프로그래밍.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자바 5.0 프로그래밍.
printf("Global Korea\n");
Choi Younghwan CSE HUFS
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

명품 Java Programming

예제 2-1 자바프로그램의 기본 구조 메소드 클래스 메소드 /* * 소스 파일 : Hello.java */ public class Hello { 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("Hello"); // "Hello" 문자열 화면 출력 System.out.println(s); // 정수 s 값 화면 출력 ? Hello 30 메소드 클래스 메소드

예제 2-1 코드 설명 클래스 만들기 주석문 main() 메소드 메소드 메소드 호출 C/C++에서의 함수를 메소드로 지칭 Hello 이름의 클래스 선언 class 키워드로 클래스 선언 public 선언하면 다른 클래스에서 접근 가능 클래스 코드는 { } 내에 모두 작성 주석문 // 한 라인 주석 /* 여러 행 주석 */ main() 메소드 자바 프로그램은 main()에서 실행 시작 public static void으로 선언 String[] args로 실행 인자를 전달 받음 메소드 C/C++에서의 함수를 메소드로 지칭 클래스 바깥에 작성할 수 없음 메소드 호출 sum() 메소드 호춯 sum() 호출 시 변수 i의 값과 정수 10을 전달 sum()의 n, m에 각각 20, 10 값 전달 sum()은 n과 m 값을 더한 30 리턴 변수 s는 정수 30을 전달받음 public class Hello { } public static int sum(int n, int m) { ... } int i = 20; s = sum(i, 10); public static void main(String[] args) { }

예제 2-1 설명 (계속) 화면 출력 변수 선언 표준 출력 스트림에 메시지 출력 변수 타입과 변수 이름 선언 표준 출력 스트림 System.out의 println() 메소드 호출 println()은 여러 타입의 데이터 출력 가능 println()은 출력 후 다음 행으로 커서 이동 변수 선언 변수 타입과 변수 이름 선언 메소드 내에서 선언된 변수는 지역 변수 지역 변수는 메소드 실행이 끝나면 자동 소명 문장 ;로 한 문장의 끝을 인식 int i=20; char a; System.out.println("Hello"); // "Hello" 화면 출력 int i=20; s = sum(i, 20);

sum() 메소드 호출과 리턴

식별자 (identifier) 식별자란? 식별자의 원칙 대소문자 구별 클래스, 변수, 상수, 메소드 등에 붙이는 이름 ‘@’, ‘#’, ‘!’와 같은 특수 문자, 공백 또는 탭은 식별자로 사용할 수 없 으나 ‘_’, ‘$’는 사용 가능 유니코드 문자 사용 가능. 한글 사용 가능 자바 언어의 키워드는 식별자로 사용불가 식별자의 첫 번째 문자로 숫자는 사용불가 ‘_’ 또는 ‘$’를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로 잘 사용하지 않는다. 불린 리터럴 (true, false)과 널 리터럴(null)은 식별자로 사용불가 길이 제한 없음 대소문자 구별 Test와 test는 별개의 식별자

식별자 이름 사례 사용 가능한 예 잘못된 예 int name; char student_ID; // '_' 사용 가능 void $func() { } // '$' 사용 가능 class Monster3 { } // 숫자 사용 가능 int whatsyournamemynameiskitae; // 길이 제한 없음 int barChart; int barchart; // 대소문자 구분. barChart와 barchart는 다름 int 가격; // 한글 이름 사용 가능 int 3Chapter; // 식별자의 첫문자로 숫자 사용 불가 class if { } // 자바의 예약어 if 사용 불가 char false; // false 사용 불가 void null() { } // null 사용 불가 class %calc { } // '%'는 특수문자

자바 키워드 abstract continue for new switch assert default if package synchronized boolean do goto private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while

좋은 이름 붙이는 언어 관습 기본 : 가독성 높은 이름 자바 언어의 이름 붙이는 관습 : 헝가리언 이름 붙이기 목적을 나타내는 이름 붙이기 : s 보다 sum 충분히 긴 이름으로 붙이기 : AVM보다 AutoVendingMachine 자바 언어의 이름 붙이는 관습 : 헝가리언 이름 붙이기 클래스 이름 첫 번째 문자는 대문자로 시작 각 단어의 첫 번째 문자만 대문자 변수, 메소드 이름 첫 단어 이후 각 단어의 첫 번째 문자는 대문자로 시작 상수 이름 모든 문자를 대문자로 표시 public class HelloWorld { } class AutoVendingMachine { } int myAge; boolean IsSingle; public int getAge() {} final static double PI = 3.141592;

자바의 데이터 타입 자바의 데이터 타입 기본 타입 : 8 개 레퍼런스 타입 : 1 개이며 용도는 다음 3 가지 boolean char byte short int long float double 레퍼런스 타입 : 1 개이며 용도는 다음 3 가지 배열(array)에 대한 레퍼런스 클래스(class)에 대한 레퍼런스 인터페이스(interface)에 대한 레퍼런스

자바의 기본 타입 특징 기본 타입의 크기가 정해져 있음 CPU나 운영체제에 따라 변하지 않음

문자열 문자열은 기본 타입이 아님 String 클래스로 문자열 표현 문자열 리터럴 – “JDK”, “한글”, “계속하세요” 문자열이 섞인 + 연산 -> 문자열 연결 String toolName="JDK"; toolName + 1.8 -> "JDK1.8" "(" + 3 + "," + 5 + ")" -> "(3,5)" System.out.println(toolName + "이 출시됨"); // "JDK1.8이 출시됨" 출력

변수와 선언 변수 변수 선언 프로그램 실행 중에 값을 임시 저장하기 위한 공간 데이터 타입에서 정한 크기의 메모리 할당 변수 값은 프로그램 수행 중 변경될 수 있음 데이터 타입에서 정한 크기의 메모리 할당 변수 선언 변수의 타입 다음에 변수 이름을 적어 변수를 선언

변수 선언 사례 변수 선언 사례 변수 선언과 초기화 변수 읽기와 저장 선언과 동시에 초기값 지정 대입 연산자인 = 다음에 식(expression) int radius; char c1, c2, c3; // 3 개의 변수를 한 번에 선언한다. int radius = 10; char c1 = 'a', c2 = 'b', c3 = 'c'; double weight = 75.56; radius = 10 * 5; c1 = 'r'; weight = weight + 5.0;

리터럴과 정수 리터럴 리터럴(literal) 정수 리터럴 프로그램에서 직접 표현한 값 정수, 실수, 문자, 논리, 문자열 리터럴 있음 사례) 34, 42.195, '%', true, "hello" 정수 리터럴 10진수, 8진수, 16진수, 2진수 리터럴 정수 리터럴은 int 형으로 컴파일 long 타입 리터럴은 숫자 뒤에 L 또는 l을 붙여 표시 ex) long g = 24L; 15 -> 10진수 리터럴 15 015 -> 0으로 시작하면 8진수. 십진수로 13 0x15 -> 0x로 시작하면 16진수. 십진수로 21 0b0101 -> 0b로 시작하면 2진수. 십진수로 5 int n = 15; int m = 015; int k = 0x15; int b = 0b0101;

실수 리터럴 소수점 형태나 지수 형태로 표현한 실수 실수 타입 리터럴은 double 타입으로 컴파일 숫자 뒤에 f(float)나 d(double)을 명시적으로 붙이기도 함 double d = 0.1234; double e = 1234E-4; // 1234E-4 = 1234x10-4이므로 0.1234와 동일 float f = 0.1234f; double w = .1234D; // .1234D와 .1234는 동일

문자 리터럴 단일 인용부호(' ')로 문자 표현 특수문자 리터럴은 백슬래시(\)로 시작 사례) 'w', 'A', '가', '*', '3', '글', \u0041 \u다음에 4자리 16진수(2바이트의 유니코드) \u0041 -> 문자 'A'의 유니코드(0041) \uae00 -> 한글문자 '글'의 유니코드(ae00) 특수문자 리터럴은 백슬래시(\)로 시작 char a = 'A'; char b = '글'; char c = \u0041; // 문자 'A'의 유니코드 값(0041) 사용 char d = \uae00; // 문자 '글'의 유니코드 값(ae00) 사용

논리 리터럴과 boolean 타입 논리 리터럴은 2개뿐 true, false boolean a = true; boolean b = 10 > 0; // 10>0가 참이므로 b 값은 true boolean c = 1; // 타입 불일치 오류. C/C++와 달리 자바에서 1,0을 참, 거짓으로 사용 불가 while(true) { // 무한 루프. while(1)로 사용하면 안 됨 ... }

Tip: 기본 타입 이외의 리터럴 null 리터럴 문자열 리터럴(스트링 리터럴) 레퍼런스에 대입 사용 이중 인용부호로 묶어 표현 사례) "Good", "Morning", "자바", "3.19", "26", "a" 문자열 리터럴은 String 객체로 자동 처리 int n = null; // 기본 타입에 사용 불가 String str = null; String str = “Good";

Tip. JDK7부터 숫자에 ‘_’ 허용, 가독성 높임 숫자 리터럴의 아무 위치에나 언더스코어(‘_’) 허용 컴파일러는 리터럴에서 ‘_’를 빼고 처리 사용 예 허용되지 않는 4가지 경우 int price = 20_100; // 20100과 동일 long cardNumber = 1234_5678_1357_9998L; // 1234567813579998L와 같음 long controlBits = 0b10110100_01011011_10110011_111110000; long maxLong = 0x7fff_ffff_ffff_ffffL; int age = 2______5; // 25와 동일 int x = 15_; // 오류. 리터럴 끝에 사용할 수 없다. double pi = 3_.14; // 오류. 소수점(.) 앞뒤에 사용할 수 없다. long idNum = 981231_1234567_L; // 오류. _L(_F) 앞에 사용할 수 없다. int y = 0_x15; // 오류. 0x 중간이나 끝에 사용할 수 없다. 0x_15(오류)

Tip. var 키워드를 사용하여 변수 타입 생략 Java 10부터 도입된 키워드 var와 동일한 기능으로 C++(2011년 표준부터)의 auto 키워드 지역 변수의 선언에만 사용 변수 타입 선언 생략 : 컴파일러가 변수 타입 추론 사용 예 변수 선언문에 반드시 초깃값 지정 var price = 200; // price는 int 타입으로 결정 var name = "kitae"; // name은 String 타입으로 결정 var pi = 3.14; // pi는 double 타입으로 결정 var point = new Point(); // point는 Point 타입으로 결정(4장 참조) var v = new Vector<Integer>(); // v는 Vector<integer> 타입으로 결정(7장 참조) var name; // 컴파일 오류. 변수 name의 타입을 추론할 수 없음

상수 상수 선언 final 키워드 사용 선언 시 초기값 지정 실행 중 값 변경 불가

예제 2-2 : 변수, 리터럴, 상수 활용 원의 면적을 구하는 프로그램을 작성해보자. public class CircleArea { public static void main(String[] args) { final double PI = 3.14; // 원주율을 상수로 선언 double radius = 10.0; // 원의 반지름 double circleArea = radius*radius*PI; // 원의 면적 계산 // 원의 면적을 화면에 출력한다. System.out.println("원의 면적 = " + circleArea); } 원의 면적 = 314.0

자동 타입 변환 자동 타입 변환 작은 타입은 큰 타입으로 자동 변환 치환문(=)이나 수식 내에서 타입이 일치하지 않을 때 컴파일러에 의해 이루어짐 치환문(=)이나 수식 내에서 타입이 일치하지 않을 때 long m = 25; // 25는 int 타입. 25가 long 타입으로 자동 변환되는 사례 2 5 32비트 0 0 2 5 m 64비트 double d = 3.14 * 10; // 실수 연산을 하기 위해 10이 10.0으로 자동 변환 // 다른 피연산자 3.14가 실수이기 때문

강제 타입 변환 자동 타입 변환이 안 되는 경우 : 큰 타입이 작은타입으로 변환할 때 강제 타입 변환 개발자가 필요하여 강제로 타입 변환을 지시 () 안에 변환할 타입 지정 강제 변환은 값 손실 우려 int n = 300; byte b = n; // 컴파일 오류. int 타입이 byte로 자동 변환 안 됨 강제 타입 변환하려면, byte b = (byte)n; 로 수정 byte b = (byte)n; 에 따른 손실 0x0000012C n 32비트 0x2C b 8비트 정수 300 정수 44 double d = 1.9; int n = (int)d; // n = 1 강제 타입 변환으로 소숫점 이하 0.9 손실 44 = 300%256

예제 2-3 : 타입 변환 자동 타입 변환과 강제 타입 변환의 이해를 위한 예제이다. 다음 소스의 실행 결과는 무엇인가? 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); } 강제 타입 변환 결과 0x41이 되며, 문자 A의 코드임 227 2 2.5 A -29 3.8 4 3

자바에서 키 입력 System.in System.in을 사용할 때 문제점 키보드로부터 직접 읽는 자바의 표준 입력 스트림 키 값을 바이트(문자 아님)로 리턴 System.in을 사용할 때 문제점 키 값을 바이트 데이터로 넘겨주므로 응용프로그램이 문자 정보 로 변환해야 함

Scanner로 쉽게 키 입력 Scanner 클래스 객체 생성 System.in에게 키를 읽게 하고, 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴 java.util.Scanner 클래스 객체 생성 System.in에게 키를 읽게 하고, 원하는 타입으로 변환하여 리턴 import java.util.Scanner; // import 문 필요 ... Scanner a = new Scanner(System.in); // Scanner 객체 생성

Scanner를 이용한 키 입력 Scanner에서 키 입력 받기 개발자가 원하는 다양한 타입의 값으로 바꾸어 읽을 수 있음 공백 문자 : ‘\t’, ‘\f’, ‘\r’, ‘ ’, ‘\n’ 개발자가 원하는 다양한 타입의 값으로 바꾸어 읽을 수 있음 Scanner scanner = new Scanner(System.in); String name = scanner.next(); // "Kim" String city = scanner.next(); // "Seoul" int age = scanner.nextInt(); // 20 double weight = scanner.nextDouble(); // 65.1 boolean single = scanner.nextBoolean(); // true

Scanner 주요 메소드

예제 2-4 : Scanner를 이용한 키 입력 연습 import java.util.Scanner; public class ScannerEx { public static void main(String args[]) { System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요"); Scanner scanner = new Scanner(System.in); String name = scanner.next(); // 문자열 읽기 System.out.print("이름은 " + name + ", "); String city = scanner.next(); // 문자열 읽기 System.out.print("도시는 " + city + ", "); int age = scanner.nextInt(); // 정수 읽기 System.out.print("나이는 " + age + "살, "); double weight = scanner.nextDouble(); // 실수 읽기 System.out.print("체중은 " + weight + "kg, "); boolean single = scanner.nextBoolean(); // 논리값 읽기 System.out.println("독신 여부는 " + single + "입니다."); scanner.close(); // scanner 닫기 } Scanner를 이용하여 이름, 도시, 나이, 체중, 독신 여부를 입력 받고 다시 출력하는 프로그램을 작성하라. 이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요. Kim Seoul 20 65.1 true 이름은 Kim, 도시는 Seoul, 나이는 20살, 체중은 65.1kg, 독신 여부는 true입니다.

식과 연산자 연산 : 주어진 식을 계산하여 결과를 얻어내는 과정

연산자 우선순위 같은 우선순위의 연산자 괄호는 최우선순위 왼쪽에서 오른쪽으로 처리 예외)오른쪽에서 왼쪽으로 대입 연산자, --, ++, +,-(양수 음 수 부호), !, 형 변환은 오른쪽에서 왼쪽으로 처리 괄호는 최우선순위 괄호가 다시 괄호를 포함한 경우는 가장 안쪽의 괄호부 터 먼저 처리

산술 연산자 산술 연산자 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%) /와 % 응용 10의 자리와 1의 자리 분리 n이 홀수인지 판단 69/10 = 6 ← 몫 6 69%10 = 9 ← 나머지 9 int r = n % 2; // r이 1이면 n은 홀수, 0이면 짝수

예제 2-5 : /와 % 산술 연산 초 단위의 정수를 입력받고, 몇 시간, 몇 분, 몇 초인지 출력하는 프로그램을 작성하라. import java.util.Scanner; public class ArithmeticOperator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);   System.out.print("정수를 입력하세요: "); int time = scanner.nextInt(); // 정수 입력 int second = time % 60; // 60으로 나눈 나머지는 초 int minute = (time / 60) % 60; // 60으로 나눈 몫을 다시 60으로 나눈 나머지는 분 int hour = (time / 60) / 60; // 60으로 나눈 몫을 다시 60으로 나눈 몫은 시간 System.out.print(time + "초는 "); System.out.print(hour + "시간, "); System.out.print(minute + "분, "); System.out.println(second + "초입니다."); scanner.close(); } 정수를 입력하세요:5000 5000초는 1시간, 23분, 20초입니다.

증감 연산 1 증가 혹은 감소 시키는 연산 ++, --

대입 연산 연산의 오른쪽 결과는 왼쪽 변수에 대입 int a = 1, b = 3; a = b; // b 값을 a에 대입하여 a=3 a += b; // a = a + b의 연산이 이루어져, a=6. b는 3 그대로

예제 2-6 : 대입 연산자와 증감 연산자 사용 다음 코드의 실행 결과는 무엇인가? public class AssignmentIncDecOperator { public static void main(String[] args) { int a=3, b=3, c=3; // 대입 연산자 사례 a += 3; // a=a+3 = 6 b *= 3; // b=b*3 = 9 c %= 2; // c=c%2 = 1 System.out.println("a=" + a + ", b=" + b + ", c=" + c); int d=3; // 증감 연산자 사례 a = d++; // a=3, d=4 System.out.println("a=" + a + ", d=" + d); a = ++d; // d=5, a=5 a = d--; // a=5, d=4 a = --d; // d=3, a=3 } a=6, b=9, c=1 a=3, d=4 a=5, d=5 a=5, d=4 a=3, d=3

비교 연산과 논리 연산 비교 연산 논리 연산 두 피연산자를 비교하여 true 또는 false의 논리 값을 내는 연산 논리 값으로 NOT, OR, AND 논리 연산. 논리 값을 내는 연산

비교 연산과 논리 연산의 복합 사례 // 나이(int age)가 20대인 경우 (age >= 20) && (age < 30) // 문자(char c)가 대문자인 경우 (c >= 'A') && (c <= 'Z') // (x,y)가 (0,0)과 (50,50)의 사각형 내에 있음 (x>=0) && (y>=0) && (x<=50) && (y<=50) 20 <= age < 30 // 오류

예제 2-7 : 비교 연산자와 논리 연산자 사용하기 다음 소스의 실행 결과는 무엇인가? public class LogicalOperator { public static void main (String[] args) { // 비교 연산 System.out.println('a' > 'b'); System.out.println(3 >= 2); System.out.println(-1 < 0); System.out.println(3.45 <= 2); System.out.println(3 == 2); System.out.println(3 != 2); System.out.println(!(3 != 2)); // 비교 연산과 논리 연산 복합 System.out.println((3 > 2) && (3 > 4)); System.out.println((3 != 2) || (-1 > 0)); } false true

단순 if문 단순 if 문 if의 괄호 안에 조건식(논리형 변수나 논리 연산) 실행문장이 단일 문장인 경우 둘러싸는 {, } 생략 가능 if(n%2 == 0) { System.out.println(n + "은 짝수입니다."); }

예제 2-10 : if문 사용하기 시험 점수가 80점이 이상이면 합격 판별을 하는 프로그램을 작성하시오. import java.util.Scanner; public class SuccessOrFail { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("점수를 입력하시오: "); int score = scanner.nextInt(); if (score >= 80) System.out.println("축하합니다! 합격입니다."); scanner.close(); } 점수를 입력하시오: 95 축하합니다! 합격입니다.

조건문 – if-else if-else 문 조건식이 true면 실행문장1 실행 후 if-else문을 벗어남 false인 경우에 실행문장2 실행후, if-else문을 벗어남

예제 2-11 : if-else 사용하기 입력된 수가 3의 배수인지 판별하는 프로그램을 작성하시오. import java.util.Scanner; 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의 배수가 아닙니다."); scanner.close(); } 수를 입력하시오: 129 3의 배수입니다.

다중 if-else 문 다중 if-else 문 if-else가 연속되는 모양 조건문이 너무 많은 경우, switch 문 사용 권장

예제 2-12 : 다중 if-else로 학점 매기기 다중 if-else문을 이용하여 입력받은 성적에 대해 학점을 부여하는 프로그램을 작성해보자. import java.util.Scanner; public class Grading { public static void main(String[] args) { char grade; Scanner scanner = new Scanner(System.in); System.out.print("점수를 입력하세요(0~100): "); int score = scanner.nextInt(); // 점수 읽기 if(score >= 90) // score가 90 이상 grade = 'A'; else if(score >= 80) // score가 80 이상 90 미만 grade = 'B'; else if(score >= 70) // score가 70 이상 80 미만 grade = 'C'; else if(score >= 60) // score가 60 이상 70 미만 grade = 'D'; else // score가 60 이만 grade = 'F'; System.out.println("학점은 "+ grade + "입니다."); scanner.close(); } 점수를 입력하세요(0~100): 89 학점은 B입니다.

예제 2-13 : 중첩 if-else 문 사례 점수와 학년을 입력 받아 60점 이상이면 합격, 미만이면 불합격을 출력한다. 4학년의 경우 70점 이상이어야 합격이다. import java.util.Scanner; public class NestedIf { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("점수를 입력하세요(0~100): "); int score = scanner.nextInt(); System.out.print("학년을 입력하세요(1~4): "); int year = scanner.nextInt(); if(score >= 60) { // 60점 이상 if(year != 4) System.out.println("합격!"); // 4학년 아니면 합격 else if(score >= 70) System.out.println("합격!"); // 4학년이 70점 이상이면 합격 else System.out.println("불합격!"); // 4학년이 70점 미만이면 불합격 } else // 60점 미만 불합격 System.out.println("불합격!"); scanner.close(); 점수를 입력하세요(0~100): 65 학년을 입력하세요(1~4): 4 불합격!

switch문 switch문은 식과 case 문의 값과 비교 default문은 생략 가능 case의 비교 값과 일치하면 해당 case의 실행문장 수행 break를 만나면 switch문을 벗어남 case의 비교 값과 일치하는 것이 없으면 default 문 실행 default문은 생략 가능

예제 2-14 switch 문으로 학점 매기기 예제 2-12의 성적 매기는 코드를 switch 문으로 작성하라. import java.util.Scanner; public class GradingSwitch { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); char grade; System.out.print("점수를 입력하세요(0~100): "); int score = scanner.nextInt(); switch (score/10) { case 10: // score = 100 case 9: // score는 90~99 grade = 'A'; break; case 8: // score는 80~89 grade = 'B'; case 7: // score는 70~79 grade = 'C'; case 6: // score는 60~69 grade = 'D'; default: // score는 59 이하 grade = 'F'; } System.out.println("학점은 "+grade+"입니다"); scanner.close(); 예제 2-12의 성적 매기는 코드를 switch 문으로 작성하라. 점수를 입력하세요(0~100): 89 학점은 B입니다.

switch문에서 벗어나기 switch문 내의 break문 break문 만나면 switch문 벗어남 case 문에 break문이 없다면, 다음 case문으로 실행 계속 언젠가 break를 만날 때까지 계속 내려 가면서 실행 char grade='A'; switch (grade) { case 'A': System.out.println("90 ~ 100점입니다."); break; case 'B': System.out.println("80 ~ 89점입니다."); case 'C': System.out.println("70 ~ 79점입니다."); } 90 ~ 100점입니다. 80 ~ 89점입니다.

case 문의 값 case 문의 값 문자, 정수, 문자열 리터럴만 허용 실수 리터럴은 허용되지 않음 int b; switch(b%2) { case 1 : ...; break; case 2 : ...; break; } char c; switch(c) { case '+' : ...; break; case '-' : ...; break; String s = "예"; switch(s) { case "예" : ...; break; case "아니요" : ...; break; switch(a) { case a : // 오류. 변수 사용 안됨 case a > 3 : // 오류. 수식 안됨 case a == 1 : // 오류. 수식 안됨 } 정수 리터럴 사용 가능 문자 리터럴 사용 가능 문자열 리터럴 사용 가능

예제 2-15 : switch 문 활용 switch 문을 이용하여 커피 메뉴의 가격을 알려주는 프로그램을 작성하라. 에스프레소, 카푸치노, 카페라떼는 3500원이고, 아메리카노는 2000원이다. import java.util.Scanner; public class CoffeePrice { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("무슨 커피 드릴까요? "); String order = scanner.next(); int price=0; switch (order) { case "에스프레소": case "카푸치노": case "카페라떼": price = 3500; break; case "아메리카노" : price = 2000; default: System.out.println("메뉴에 없습니다!"); } if(price != 0) System.out.print(order + "는 " + price + "원입니다"); scanner.close(); 무슨 커피 드릴까요? 에스프레소 에스프레소는 3500원입니다