100
3장. 장장장 장장 장장 I : 장장, 장장장, 장장장 1 public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 장 장장 장장장 장장장장장 System.out.println(" 장장장 장장 " + sum + " 장장장 "); } } JAVA

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

  • Upload
    nelson

  • View
    84

  • Download
    3

Embed Size (px)

DESCRIPTION

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자. Java. public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt (a1[0]); b = Integer.parseInt (a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 - PowerPoint PPT Presentation

Citation preview

Page 1: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3장. 자바의 기본 구조 I :변수 , 자료형, 연산자

1

public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println(" 두수의 합은 " + sum + " 입니다 "); }}

JAVA

Page 2: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

자바 프로그램의 기본 구조를 학습한다 .

자바 프로그램 작성 시 발생하는 오류에 대해 알아본다 .

자바의 식별자와 변수형에 관해 학습한다 .

자바 연산자와 수식에 관해 알아본다 .

자바 프로그램에서 많이 사용하는 문자열에 대해 사용법을 알아본다 .

학습목표

2

Page 3: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

section 1 자바 프로그램의 예

section 2 프로그래밍 오류 - 2-1 구문 오류 (Syntax Error) - 2-2 실행시간 오류 (Runtime Error) - 2-3 논리 오류 (Logic Error)

section 3 식별자와 예약어

section 4 변수와 자료형 - 4-1 변수 (Variable) - 4-2 자료형

목차

3

Page 4: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

section 5 형변환

section 6 연산자와 수식 - 6-1 산술 연산자

- 6-2 관계 및 논리 연산자

- 6-3 비트 연산자

- 6-4 배정 연산자와 단축 배정 연산자

- 6-5 3 항 연산자

- 6-6 연산자의 우선순위

section 7 문자열 (String)

목차

4

Page 5: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실습예제- 다음 프로그램은 프로그램 실행 시에 두 개의 값을 입력받아 두 수의 합을 구하여 출력하는

프로그램이다 . 현재 단계에서는 프로그램의 내용은 이해하지 못해도 되며 , 이클립스를 이용하여 실습만 수행하면 된다 .

1 자바 프로그램의 예

5

SumTest.java0102030405060708091011121314

/* 이 프로그램은 첫 번째 자바 프로그램입니다 프로그램 이름 : SumTest.java 프로그램 작성자 및 작성일시 : 홍길동 2012 년 2 월 11 일*/public class SumTest {public static void main(String a1[]){ int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println(" 두수의 합은 " + sum + " 입니다 ");}}

주석

클래스 정의main() 메소드 정의정수형 변수 선언

두 수의 합 출력

Page 6: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

프로그램 설명- 01~04 : 프로그램 설명을 위한 주석 . 주석이 여러 줄일 경우 “ /*” 와 “ */” 사이에 기술

- 05 : 클래스를 정의하는 부분이다 . 5 장에서 자세하게 설명한다 . 자바 프로그램은 클래스의 이름과 같은 이름 ( 대소문자 구분함 : SumTest.java) 으로 반드시 저장되어야 한다 .

- 06 : 클래스에서 해야 하는 일을 정의하는 메소드 부분이다 . main() 메소드는 클래스에서 첫 번째로 실행되는 메소드이다 . main() 메소드의 매개변수는 항상 String( 문자열 ) 의 배열로 정의된다 . 프로그램 실행 시 입력되는 자료가 배열에 저장된다 .

- 09~10 : 프로그램 실행 시 입력된 매개변수는 문자열이다 . 문자열을 정수로 변환하여 정수형 변수에 저장하는 부분이다 . 자세한 내용은 객체지향 부분에서 기술한다 .

- 11 : 두 수의 합을 저장한다 . 한 라인에서 “ //” 표시 이후의 내용은 모두 주석으로 처리한다 .

- 12 : 자바의 출력문이다 . 괄호 내에 출력할 내용을 지정한다 .

1 자바 프로그램의 예

6

Page 7: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

이클립스에서 실행한 프로그램

1 자바 프로그램의 예

7

44 page

Page 8: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

구문 오류 또는 컴파일 (compile) 오류- 자바 언어를 배울 때 초급 프로그래머가 가장 많이 발생시키는 오류

- 타이핑 오류 , 예약어의 잘못 사용 , 닫는 괄호의 생략 , 구문 종료 기호 (;) 생략 , 구문 구조 오류 등으로 인해 발생

- 자바 컴파일러가 오류의 원인을 찾아 알려줌으로써 쉽게 수정할 수 있음

실습예제- 다음은 변수를 선언하지 않았고 , 문장의 종료기호를 빼먹고 작성한 프로그램이다 . 이

프로그램은 구문 오류를 발생시킨다 .

2-1 구문 오류 (Syntax Error)2 프로그래밍 오류

8

SyntaxErrorTest.java010203040506

public class SyntaxErrorTest { public static void main(String args[]) { i = 30 ; System.out.println( i ) }}

선언되지 않은 변수 사용선언되지 않은 변수 사용과 문장종료기호 생략

Page 9: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

프로그램 설명- 03 : 변수 i 를 선언하지 않고 사용하였다 . 자바에서 변수는 반드시 미리 선언하고

사용하여야 한다 .- 04 : 선언하지 않은 변수 i 값을 사용하였다 . 또한 문장의 종료 기호인 “ ;” 을 빠트려

오류가발생하였다 .

2-1 구문 오류 (Syntax Error)2 프로그래밍 오류

9

46 page

Page 10: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실행시간 오류- 프로그램의 실행 시 발생하는 오류

- 프로그램의 비정상적인 종료를 발생시키므로 조심해야 함

- 실행시간 오류는 숫자를 0 으로 나누는 경우나 배열의 첨자 범위를 벗어난 접근 , 실행 시 입력 받은 데이터의 오류 등으로 많이 발생

- 실행 시 사용자로부터 입력 받는 데이터의 형태가 다를 경우 많이 발생

2-2 실행시간 오류 (Runtime Error)2 프로그래밍 오류

10

Page 11: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실습예제- 다음 프로그램은 정수를 0 으로 나누는 실행시간 오류를 발생시킨다 .

2-2 실행시간 오류 (Runtime Error)2 프로그래밍 오류

11

RuntimeErrorTest.java010203040506

public class RuntimeErrorTest { public static void main(String args[]) { int i = 3 / 0 ; int j = 5 / 0 ; }}

정수를 0 으로 나눔정수를 0 으로 나눔

47 page

Page 12: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실습예제- 프로그램의 3 번 라인의 “ 3 /0” 을 “ 3 / 1” 로 수정한 다음 다시 프로그램을 실행

2-2 실행시간 오류 (Runtime Error)2 프로그래밍 오류

12

RuntimeErrorTest.java010203040506

public class RuntimeErrorTest { public static void main(String args[]) { int i = 3 / 1 ; int j = 5 / 0 ; }}

정수를 1 으로 나눔정수를 0 으로 나눔

47 page

Page 13: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

논리 오류- 프로그램 작성자의 의도와 다른 결과를 나타내는 경우에 발생

- 일반적으로 복잡한 프로그램의 경우에서 발생

- 프로그램의 컴파일이나 실행 시에 나타나지 않음

- 프로그램 작성자에 의해서 발견되어 수정

2-3 논리 오류 (Logic Error)2 프로그래밍 오류

13

Page 14: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실습예제- 다음 프로그램은 논리적 오류가 내재된 프로그램이다 . 프로그램 작성자는 두 개의 변숫값을

더하기 위한 프로그램을 작성하였지만 , 잘못된 코딩으로 예상치 않은 결과를 출력하였다 . 이와 같은 형태의 논리적 오류는 프로그램의 컴파일과 실행 시 명시적으로 나타나지 않게 된다 .

2-3 논리 오류 (Logic Error)2 프로그래밍 오류

14

LogicErrorTest.java0102030405060708

public class LogicErrorTest { public static void main(String args[]) { int i = 300 ; int j = 500 ; j += i + j ; System.out.println(" 합계는 = " + j) ; } }

“j = i + j” 를 잘못 기술

Page 15: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

2-3 논리 오류 (Logic Error)2 프로그래밍 오류

15

48 page

Page 16: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

자바에서 식별자- 변수 , 상수 , 메소드 , 배열 , 문자열 , 사용자가 정의하는 클래스나 메소드 등을 구분할 수

있는 이름을 의미

식별자의 사용 원칙- 식별자는 문자 , 숫자 , 특수문자 (_, $) 로 구성될 수 있다 .- 식별자의 첫 문자는 문자나 특수문자로 시작할 수 있다 . 숫자는 사용할 수 없다 .- 예약어를 식별자로 사용할 수 없다 .- true, false, null 은 식별자로 사용할 수 없다 .- 식별자는 길이에 제한을 두지 않는다 .- 같은 문자의 대소문자 (Sum 과 sum) 는 서로 다른 식별자로 취급한다 .

3 식별자와 예약어

16

Page 17: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

자바의 예약어

3 식별자와 예약어

17

abstract const finally interface short transient

assert continue float long static try

boolean default for native strictfp* void

break do goto new super volatile

byte double if package switch while

case else implements private synchronized

catch enum import protected this

char extend instanceof public throw

class final int return throws

Page 18: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실습예제- 다음 프로그램은 예약어를 변수로 사용하는 프로그램이다 . 예약어를 변수로 사용하는 경우

구문 오류가 발생한다 .

3 식별자와 예약어

18

LogicErrorTest.java010203040506

public class ReservedWordTest { public static void main(String args[]) { int if = 20; foat for = 30.0; }}

예약어를 변수로 사용

Page 19: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

3 식별자와 예약어

19

50 page

Page 20: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

클래스 이름- JavaTest1, RuntimeErrorTest,

바람직한 형태 , 단어의 첫 글자는 대문자로 쓰는 것이 좋다 .

- applicationtest, sampletest오류는 아니지만 관례에 어긋나고 , 가독성이 떨어짐

메소드 , 변수 , 배열 , 문자열의 이름- sum, sumAndSubstract, nameAddress

바람직한 형태 , 단어의 첫글자는 소문자로 쓰는 것이 좋다 .

- NameAndAge, Productname 좋지 않은 형태 , 클래스 이름과 혼동된다 .

상수의 이름- PI, MAX_NUMBER

상수는 모두 대문자로 쓰는 것이 관례이다 .

- max, Max, Address다른 이름과 혼동된다 .

3 식별자와 예약어

20

Page 21: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

변수의 사전적 의미- 변화하는 것

프로그래밍 언어에서 사용되는 변수- “ 값 (value) 이 저장된 메모리의 위치에 주어진 이름”

- 변수에 값을 배정 (assignment) 할 때 “ =” 기호를 사용

4-1 변수 (Variable)4 변수와 자료형

21

Page 22: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

메모리에 저장된 변수의 값 변화

4-1 변수 (Variable)4 변수와 자료형

22

52 page

Page 23: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

자료형 (Data Type)- 변수가 가질 수 있는 값의 형태

- 자바 언어는 다양한 형태의 자료형을 제공

자바의 자료형- 기본 자료형 (primitive type)- 참조 자료형 (reference type)

4-2 자료형4 변수와 자료형

23

Page 24: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

기본 자료형과 참조 자료형의 차이

4-2 자료형4 변수와 자료형

24

53 page

Page 25: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

기본 자료형 : 자바에서 제공되는 8 개의 기본 자료형은 다음과 같은 형태

4-2 자료형4 변수와 자료형

25

54 page

Page 26: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

정수형 : 4 가지의 자료형이 제공

4-2 자료형4 변수와 자료형

26

54 page

Page 27: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

정수의 음수 표현법 (2 의 보수법 )

4-2 자료형4 변수와 자료형

27

55 page

Page 28: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실습예제- 다음 프로그램은 4 개의 정수형이 나타낼 수 있는 가장 큰 값을 출력하는 프로그램이다 .

각각의 정수형 변수에는 프로그램에서 저장된 값보다 큰 값을 저장하면 구문 오류가 발생한다 .

4-2 자료형4 변수와 자료형

28

NumericTypeTest.java

01020304050607080910111213

public class NumericTypeTest { public static void main(String args[]) { byte a = 127; System.out.println("127 을 저장한 byte 값은 " + a); short b = 32767; System.out.println("32767 을 저장한 short 값은 : " + b); int c = 2147483647; System.out.println("2147483647 을 저장한 int 값은 : " + c); long d = 9223372036854775807L; System.out.println("9223372036854775807 을 저장한 long 값은 : " + d); }}

byte 형

short 형

int 형

long 형

Page 29: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

프로그램 설명- 03 : byte 형은 양수 27-1(127) 까지만 저장이 가능하다 .- 05 : short 형은 양수 215-1 까지만 저장이 가능하다 . - 07 : int 형은 양수 231-1 까지만 저장이 가능하다 .- 09 : long 형은 양수 263-1 까지만 저장이 가능하다 . 자바에서 모든 정수형의 묵시적인

형태는 int 형 (32 비트로 표시 ) 이다 . 그 이상의 값을 나타내는 정수인 long 형의 정수를 나타내기 위해서는 정수 끝에 영문자 대문자 “ L” 이나 소문자 “ l” 을 붙여서 사용해야 한다 . 일반적으로 소문자 “ l” 은 숫자 1 과 혼동되므로 대문자 “ L” 을 붙여서 사용한다 .

4-2 자료형4 변수와 자료형

29

56 page

Page 30: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실습예제- 지정된 형이 나타낼 수 있는 값의 범위를 벗어난 값을 배정하면 구문 오류를 발생시킨다 .

다음 프로그램은 지정된 범위를 초과하여 값을 배정하는 프로그램의 예이다 .

4-2 자료형4 변수와 자료형

30

ByteTestError.java

01020304050607

public class ByteTestError { public static void main(String args[]) { byte a = 128; System.out.println("128 을 저장한 byte 값은 : " + a); }}

127 까지 저장 가능한 byte 형의 변수에 128 을 저장 . 오류 발생

Page 31: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

31

57 page

Page 32: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

실습예제- 지정된 형이 나타낼 수 있는 값의 범위를 벗어난 값을 배정하려면 , 다음 프로그램과 같이

강제로 형변환을 시켜주면 된다 . 강제로 형변환을 하는 경우 값의 손실이 발생하여 예상하지 못한 결과가 출력된다 .

4-2 자료형4 변수와 자료형

32

ByteTypeTest.java

010203040506070809

public class ByteTypeTest { public static void main(String args[]) { byte a = (byte)128; System.out.println("128 을 저장한 byte 값은 : " + a); byte b = (byte)256; System.out.println("256 을 저장한 byte 값은 : " + b); }}

byte 형으로 형변환하여 저장

byte 형으로 형변환하여 저장

Page 33: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

33

58 page

Page 34: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

34

전 페이지와 같은 결과가 출력된 이유- byte 변수에 128 과 256 을 저장한 결과

58 page

Page 35: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

35

실수형- 부호와 지수 (exponential) 부분 , 가수 (mantissa) 부분으로 구성

- 저장할 수 있는 크기에 따라 float 형과 double 형으로 구분

- 묵시적 (default) 데이터형은 double 형

58 page

Page 36: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

36

실습예제- 실수형이 나타낼 수 있는 값의 범위를 나타내는 프로그램이다 . 자바에서 실수는 묵시적으로

double 형으로 나타낸다 .NumericTypeTest.java

01020304050607080910111213

public class FloatDoubleTest { public static void main(String args[]) {

foat a = 0.12345678901234567890f;double b = 0.12345678901234567890;

System.out.println("foat 변수 a 의 값은 : " + a); System.out.println("double 변수 b 의 값은 : " + b);

foat c = 1.0f / 3.0f;double d = 1.0 / 3.0;

System.out.println("foat 변수 c 의 값은 : " + c); System.out.println("double 변수 d 의 값은 : " + d); }}

실수 값

Page 37: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

37

프로그램 설명- 04 : 실수 값을 float 형의 변수에 저장할 경우에는 “ F” 또는 “ f” 를 붙인다 . 붙이지

않았을 경우에는 오류를 발생한다 .- 05 : 자바에서 실수는 묵시적으로 double 형이므로 끝에 “ D” 또는 “ d” 를 붙이지 않는다 .- 08~09 : 무한 반복되는 수이지만 , float 형과 double 형의 가수 부분에서 표현 가능한

범위만 저장한다 .

59 page

Page 38: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

38

논리형- 논리형 변수는 참 (true) 또는 거짓 (false) 을 지정하는 변수

- 프로그램의 흐름을 제어하는 제어변수로 많이 사용

- 1 바이트에 저장

Page 39: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

39

실습예제- 다음 프로그램은 논리형 변수를 사용하는 프로그램이다 . 논리형 변수에 직접 “ true” 또는

“ false” 값을 저장할 수 있으며 , 논리식의 결과도 저장할 수 있다 .

NumericTypeTest.java

0102030405060708091011

public class BooleanTypeTest { public static void main(String args[]) { boolean a = true; System.out.println("boolean 변수 a 의 값은 : " + a); boolean b = 10 > 20; System.out.println("boolean 변수 b 의 값은 : " + b); boolean c = a; System.out.println("boolean 변수 c 의 값은 : " + c); }}

boolean 변수에 값 저장

boolean 변수에 값 저장boolean 변수에 값 저장

Page 40: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

40

프로그램 설명- 04 : boolean 변수에 true 값을 저장한다 . 자바는 대소문자를 구분하므로 TRUE 를

저장하면 오류가 발생된다 . - 06 : boolean 변수에 논리식의 결과를 저장한다 . 다양한 형태의 논리식의 결과가 저장될

수 있다 .- 08 : boolean 변수에 boolean 변수의 값을 저장한다 .

61 page

Page 41: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

41

문자형- 하나의 문자를 나타낼 수 있는 char 형을 기본 자료형으로 제공

- 아스키코드 (ASCII:8 비트 ) 체계가 아닌 유니코드 (Unicode:16 비트 ) 를 사용

- 16 비트의 유니코드를 사용함으로써 세계 다양한 나라들의 모든 언어를 나타낼 수 있음

- 유니코드는 16 비트를 사용함으로써 최대 65,536 개의 문자를 나타낼 수 있음

문자 자료형- 하나의 문자를 나타내기 위해 사용

- 문자 자료형 데이터를 나타내기 위해서는 하나의 따옴표 (single quotation) 를 사용

char grade1 = 'A';char grade2 = '\ u0041'; // 'A' 와 같은 의미의 유니코드char years = '2';

Page 42: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

42

문자형과 유니코드 (unicode)

61 page

Page 43: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

43

실습예제- 문자형의 변수에는 직접 하나의 문자를 저장할 수 있다 . 16 비트 유니코드를 사용함으로써

다양한 국가의 문자들을 사용할 수 있다 .NumericTypeTest.java

0102030405060708091011121314

public class CharacterTypeTest { public static void main(String args[]) { char ch1 = 'K'; char ch2 = ' \ u004f'; char ch3 = 'R'; char ch4 = ' \ u0045'; char ch5 = 'A'; char ch6 = ' 한 '; char ch7 = ' 국 '; System.out.println(" 출력결과 : "+ch6 + ch7 + "=" + ch1 + ch2 + ch3 + ch4 + ch5); }}

문자형 변수에 값 저장

Page 44: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

44

프로그램 설명- 04 : 직접 영문자를 문자형 변수에 저장한다 . - 05 : 문자 ( 영문자 O) 에 해당하는 유니코드를 문자형 변수에 저장한다 . - 09 : 한글 (‘ 한’ ) 을 문자형 변수에 저장한다 .

62 page

Page 45: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

45

특수문자 표기방법 유니코드- 특수한 문자를 나타내기 위해 역슬래시 (backslash) 를 사용

특수문자 표기방법 유니코드 표기Backspace \ b \ u0008

Tab \ t \ u0009

Linefeed \ n \ u000A

Formfeed \ f \ u000C

Carriage Return \ r \ u000D

Backslash \\ \ u005C

Single Quote \ ' \ u0027

Double Quote \ " \ u0022

Page 46: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

46

실습예제- 문자형 변수에 특수문자를 지정할 수 있다 . 특수문자는 주로 따옴표나 줄 바꾸기 , 탭만큼

여백 주기 등에 사용되는 문자이다 .CharacterSpecialType.java0102030405060708091011121314151617

public class CharacterSpecialType { public static void main(String args[]) { char ch1 = ' \ "'; char ch2 = ' 대 '; char ch3 = ' 한 '; char ch4 = ' \ "'; char ch5 = ' \ t'; char ch6 = ' 민 '; char ch7 = ' 국 '; char ch8 = ' \ n'; char ch9 = ' 만 '; char ch10 = ' 세 '; System.out.println(" 출력결과 : \ n" + ch1 + ch2 + ch3 + ch4 + ch5 + ch6 + ch7 + ch8 + ch9 + ch10); }}

특수문자 저장

특수문자 저장

특수문자 저장

Page 47: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

4-2 자료형4 변수와 자료형

47

프로그램 설명- 04 : 이중따옴표를 지정하는 특수문자를 변수에 저장

- 08 : 탭만큼 스페이스를 가진 특수문자를 변수에 저장

- 11 : 줄 바꿈 특수문자를 변수에 저장

64 page

Page 48: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

5 형변환

48

형변환 (Casting)- 특정 자료형의 값을 다른 형태의 변수에 배정할 때 발생

- 자동으로 이루어지는 확대 (widening) 형변환

- 명시적인 형변환 구문에 의해 이루어지는 축소 (narrowing) 형변환

확대 형변환- 두 개의 타입이 같거나 치역 (traget type) 이 정의역 (source type) 보다 더 넓어 값의

손실이 발생되지 않고 저장

축소 형변환- 확대 형변환의 반대의 경우

- 명시적인 형변환 구문을 사용

Page 49: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

5 형변환

49

확대 형변환과 축소 형변환

65 page

Page 50: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

5 형변환

50

실습예제- 자바 프로그램에서 확대 형변환은 정보의 손실이 발생치 않고 , 자동으로 형변환이

이루어진다 . 반면에 축소 형변환은 명시적인 형변환 구문을 사용해야 하며 정보의 손실이 발생한다 .CastingTest1.java

01020304050607080910111213141516

public class CastingTest1 { public static void main(String args[]) { byte b = 120; int i = b; System.out.println(" 확대 형변환 : "+i); int j = 259; double d = 259.428; System.out.println(" 축소 형변환 결과 "); b = (byte) j; System.out.println("int 259 를 byte 로 : " + b); i = (int) d; System.out.println("double 259.428 을 int 로 : " + i); b = (byte) d; System.out.println("double 259.428 을 byte 로 : " + b); }}

byte 형의 값을 int 형 변수에 저장

int 형의 값을 byte 형 변수에 저장double 형의 값을 int 형 변수에 저장double 형의 값을 byte 형 변수에 저장

Page 51: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

5 형변환

51

프로그램 설명- 04 : byte 형의 값을 int 형의 변수에 값을 저장하므로 확대 형변환이 일어난다 . 확대

형변환은 명시적인 형변환 구문 없이 자동으로 변환될 수 있으며 값의 손실이 발생하지 않는다 .

- 09 : 정수 값 259 의 하위 8 비트를 byte 형 변수에 저장한다 . 값의 손실이 발생하기 때문에결과적으로 3 이 출력된다 .

- 11 : 259.428 의 double 형 값을 int 형으로 강제 형변환하면 , 소수점 아랫부분이 손실되고정수 부분만 저장된다 .

- 13 : 259.428 의 double 형 값을 byte 형으로 강제 형변환하면 , 소수점 아랫부분이 손실되고정수 부분만 저장된다 . byte 형의 경우에는 정수 부분의 하위 8 비트에 해당하는 값만저장된다 .

Page 52: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

5 형변환

52

67 page

Page 53: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

5 형변환

53

실습예제- 문자형을 int 형으로 형변환할 수 있으며 , 반대의 경우도 가능하다 . 다음은 문자형을

정수형으로 정수형을 문자형으로 변환하는 프로그램의 예이다 .CastingTest1.java

0102030405060708091011

public class CastingTest2 { public static void main(String args[]) { int i = '1' + 10; int j = '1' + 'A';

System.out.println(" \ '1 \ ' + 10 = " + i);

System.out.println(" \ '1 \ ' + \ 'A \ ' = " + j); int k = 66;

System.out.println("66 은 유니코드 문자로 " + (char)k + " 입니다 "); }}

문자를 유니코드로 변환하여 저장

Page 54: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

5 형변환

54

프로그램 설명- 04 : 문자 ‘ 1’ 과 정수가 덧셈이 되는 경우 , 문자의 유니코드 값 (‘\ u0031’) 에 해당하는

10 진수 값이 정수로 변환되어 덧셈이 수행된다 . 16 진수 ‘ 0031’ 은 10 진수 49 이다 .- 05 : 문자 ‘ 1’ 과 문자 ‘ A’ 가 덧셈이 되는 경우에도 문자의 유니코드 값에 해당하는 10

진수값이 더해진다 .- 09 : 숫자 66 을 문자형으로 형변환을 실시하면 , 10 진수의 유니코드 값 (‘\ u0042’) 에

해당하는 ‘ B’ 가 출력된다 .

68 page

Page 55: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6 연산자와 수식

55

연산자와 피연산자

연산자와 수식

연산자 +, -, *, /, &&, >> 등등피연산자 5, 10, a, b ... 등등

69 page

Page 56: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6 연산자와 수식

56

자바에서 연산자의 사용형태는 크게 3 가지로 구분- 일반적으로 사용되는 사용형태는 하나의 연산자에 두 개의 피연산자를 가지는 이항 연산자

- 피연산자를 하나만 가지는 단항 연산자

- 3 개의 피연산자를 가지는 삼항 연산자

이항 연산자 , 단항 연산자 , 삼항 연산자

Page 57: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-1 산술 연산자6 연산자와 수식

57

산술 연산자

연산자 사용법 설명 비고+ op1+op2 op1 과 op2 를 더한다 . 단항 및 이항- op-op2 op1 에서 op2 를 뺀다 . 단항 및 이항* op1*op2 op1 과 op2 를 곱한다 . 이항/ op1/op2 op1 을 op2 로 나눈다 . 이항% op1%op2 op1 을 op2 로 나눈 나머지를 구한다 . 이항

++ var++++var

var 값 1 증가 . var 값을 증가시키기 전에 평가var 값 1 증가 . var 값을 증가시킨 다음 평가

단항단항

- - var—--var

var 값 1 감소 . var 값을 감소시키기 전에 평가var 값 1 감소 . var 값을 감소시킨 다음 평가

단항단항

Page 58: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-1 산술 연산자6 연산자와 수식

58

실습예제- 다음 프로그램은 다양한 산술 연산자를 사용하는 프로그램이다 .

CastingTest1.java01020304050607080910111213141516

public class ArithmeticOPTest1 { public static void main(String args[]) { int a=5, b=2 ; int sum=a+b; System.out.println("a+b=" + sum); int sub=a-b; System.out.println("a-b=" + sub); int mul=a*b; System.out.println("a*b=" + mul); int div=a/b; System.out.println("a/b=" + div); int mod=a%b; System.out.println("a%b=" + mod); int c = ++a; System.out.println("a 의 전위증가연산 (prefx)="+c);

두 값을 나눈 나머지를 구하는 연산자단항 연산자

Page 59: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-1 산술 연산자6 연산자와 수식

59

실습예제- 다음 프로그램은 다양한 산술 연산자를 사용하는 프로그램이다 .

프로그램 설명- 15, 18 : 단항 연산자 (++, - -) 는 변수의 왼쪽 (prefix) 또는 오른쪽 (postfix) 에 올 수

있다 . 변수의왼쪽에 오는 경우는 연산을 먼저 수행하고 배정문을 수행하는 반면 , 오른쪽에 오는 경우는 배정문을 먼저 수행하고 연산을 수행한다 .

CastingTest1.java171819202122

System.out.println("a 변수의 값 : "+a); int d = b++; System.out.println("b 의 후위증가연산 (postfx)="+d); System.out.println("b 변수의 값 : "+b); }}

단항 연산자

Page 60: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-1 산술 연산자6 연산자와 수식

60

71 page

Page 61: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-1 산술 연산자6 연산자와 수식

61

실습예제- 다음 프로그램은 자료형이 나타낼 수 있는 범위를 벗어난 사용 예를 보이는 프로그램이다 . - 자바 프로그램에서 정수형의 묵시적인 (default) 자료형은 int 형이다 .CastingTest1.java

01020304050607080910111213141516171819

public class ArithmeticOPTest2 { public static void main(String aa[]) { byte a=127, b = 2; byte c =(byte)(a*b); System.out.println("a*b 의 결과를 byte 로 변환 출력 : " + c); int d = a * b; System.out.println("a*b 의 결과를 int 로 출력 : " + d); int i = 1000000, j = 1000000; int k = i * j; System.out.println(" 백만 * 백만의 결과를 int 로 출력 : " + k); long m = (long)(i*j); System.out.println(" 백만 * 백만의 결과를 long 으로 변환한 후 출력 : " + m); long l = (long)i*(long)j; System.out.println(" 각각의 백만을 long 으로 변환 후 백만 * 백만의 결과를 출력 : " + l);

} }

계산을 int 형으로 수행 , byte 형으로 변환

계산을 int 형으로 수행 , int 형 저장계산을 int 형으로 수행 , long 형으로 변환 변수를 long 형으로 전환하여 i*j 를 수행

Page 62: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-1 산술 연산자6 연산자와 수식

62

프로그램 설명- 05 : 자바 프로그램에서 수행되는 모든 정수 연산은 묵시적으로 int 형으로 실행한다 .

a*b 는 int 형으로 수행하고 , byte 형으로 변환하여 저장한다 . 계산된 결과 값은 결과가 254 가 되어 이미 byte 형이 표현할 수 있는 범위를 벗어났다 . 하위 8 비트만을 표현하여 -2 가 출력된다 .

- 10 : 백만 * 백만의 결과가 이미 int 형의 표현 범위를 벗어났다 . 하위 32 비트만을 표현하여 -727379968 가 출력

- 12 : i*j 는 int 형으로 수행된다 . int 형으로 수행된 결과는 32 비트에 저장되므로 , 이미 백만 *백만의 결과가 int 형의 표현 범위를 벗어난 경우이다 . 그 결과를 long 형으로 변환해도값은 변화되지 않는다 .

- 14 : int 형의 변수 i 와 j 를 long 형으로 전환하였다 . 이 의미는 32 비트에 저장된 i 와 j 값을 64 비트에 저장한다는 의미이고 , 64 비트 곱셈 연산을 수행한다 . 결론적으로 자바 프로그램에서 정수형의 연산은 묵시적으로 int 형으로 수행 (32 비트 연산 ) 하지만 , int형보다 큰 long 형의 피연산자가가 있을 경우에는 long 형으로 연산을 수행 (64 비트 연산 )한다 .

Page 63: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-1 산술 연산자6 연산자와 수식

63

73 page

Page 64: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

64

관계 연산자- 이항 연산자로서 두 개의 오퍼랜드 값들을 비교하여 결과로 true 또는 false 값을

반환하는 연산자로서 주로 조건문과 반복문의 조건식에 사용

연산자 사용법 설명> op1 > op2 op1 이 op2 보다 큰 경우

>= op1 >= op2 op1 이 op2 보다 크거나 같은 경우< op1 < op2 op1 이 op2 보다 작은 경우

<= op1 <= op2 op1 이 op2 보다 작거나 같은 경우== op1 == op2 op1 과 op2 가 같은 경우!= op1 != op2 op1 과 op2 가 같지 않은 경우

instanceof op1 instanceof op2 op1 이 op2 의 인스턴스 ( 객체 ) 인 경우

Page 65: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

65

실습예제- 다음 프로그램은 다양한 관계 연산자를 사용하고 있다 . 관계 연산자는 두 개의 오퍼랜드를

비교하여 결과로 true 또는 false 를 반환한다 .RelationalOPTest.java0102030405060708091011121314

public class RelationalOPTest { public static void main(String args[]) { byte a = 20; double d = 3.14; boolean fag; fag = a > d; System.out.println("a 가 d 보다 큰가 ? " + fag); fag = a == 20.0f; System.out.println("a 가 20.0f 와 같은가 ? " + fag); fag = 10 != 10; System.out.println("10 이 10 과 같지 않은가 ? " + fag); fag = 10 <= 20; System.out.println("10 이 20 보다 작거나 같은가 ? " + fag);

비교 연산자 사용비교 연산자 사용비교 연산자 사용비교 연산자 사용

Page 66: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

66

실습예제- 다음 프로그램은 다양한 관계 연산자를 사용하고 있다 . 관계 연산자는 두 개의 오퍼랜드를

비교하여 결과로 true 또는 false 를 반환한다 .RelationalOPTest.java151617181920

System.out.println("10 이 20 보다 작은가 ? " + (10 < 20)); System.out.println("10 이 20 보다 크거나 같은가 ? " + (10 >= 20)); }}

출력문에서 직접 관계 연산식 사용

Page 67: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

67

프로그램 설명- 07 : a(byte) 가 d(double) 보다 큰가 (a>d) 를 비교한다 . 관계 연산식에서 두

오퍼랜드의 형이 다를 경우 큰 범위의 형으로 자동 형변환되어 비교된다 .- 09 : a(byte) 와 20.0f(float) 이 같은가 (==) 를 비교한다 . 관계 연산식에서 두

오퍼랜드의 형이 다를 경우 큰 범위의 형으로 자동 형변환되어 비교된다 .- 11 : 두 값이 같지 않은가 (!=) 를 비교한다 . - 13 : 작거나 같은가 (<=) 를 비교한다 . - 15~20 : 출력문에 직접 관계 연산식을 사용하여 결과를 출력할 수 있다 . 이 경우 관계

연산식은 반드시 괄호로 묶어서 표현해야 한다 .

Page 68: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

68

75 page

Page 69: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

69

논리 연산자- 오퍼랜드 (operand) 의 값을 평가하여 결과로 true 또는 false 값을 반환

- 오퍼랜드는 반드시 이진값 또는 이진값을 결과로 하는 수식

- 자바 언어에서는 &&( 논리곱 ) 과 ||( 논리합 ), !(not) 논리 연산자를 제공

논리 연산자 &&, || 연산 결과

x y x || y x && y

TRUE TRUE TRUE TRUETRUE FALSE TRUE FALSEFALSE TRUE TRUE FALSEFALSE FALSE FALSE FALSE

Page 70: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

70

논리 연산자 ! 연산결과

논리 연산자 &&, || 연산자- 효율성을 기하기 위해 첫 번째 오퍼랜드를 평가한 결과 두 번째 오퍼랜드를 평가할 필요가

없을 경우 , 바로 결과를 반환

x !x

TRUE FALSEFALSE TRUE

Page 71: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

71

실습예제- 논리 연산자의 오퍼랜드는 반드시 true 또는 false 값을 나타내야 한다 .

LogicalOPTest.java01020304050607080910111213141516171819

`public class LogicalOPTest { public static void main(String args[]) { boolean a; a = (20 > 10) || (30 > 40); System.out.println("20 이 10 보다 크거나 또는 ( 논리합 ||) 30 이 40 보다 큰가 ? " + a); a = (20 > 10) && (30 > 40); System.out.println("20 이 10 보다 크고 그리고 ( 논리곱 &&) 30 이 40 보다 큰가 ? " + a); a = ! true; System.out.println("ture 의 !(not) 은 ? " + a); System.out.println("20 이 10 보다 크거나 또는 ( 논리합 ||) 30 이 40 보다 큰가 ? " + ((20 > 10) || (30 > 40))); System.out.println("20 이 10 보다 크고 그리고 ( 논리곱 &&) 30 이 40 보다 큰가 ? " + ((20 > 10) && (30 > 40))); System.out.println("ture 의 !(not) 은 ? " + (! true)); }}

논리합 연산 수행

논리곱 연산 수행

논리부정 연산 수행

출력문에서 직접 관계 연산식 사용

Page 72: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-2 관계 및 논리 연산자6 연산자와 수식

72

프로그램 설명- 05 : 두 오퍼랜드 값으로 논리합 (||) 연산을 수행한다 . 일반적으로 논리 연산자의

오퍼랜드내에는 관계 연산식이 오게 되는데 괄호로 묶어 주는 것이 바람직하다 .- 07 : 두 오퍼랜드 값으로 논리곱 (&&) 연산을 수행한다 . 일반적으로 논리 연산자의

오퍼랜드 내에는 관계 연산식이 오게 되는데 괄호로 묶어 주는 것이 바람직하다 .- 09 : true 의 논리부정 (!) 연산 수행을 수행한다 . - 13~17 : 출력문 내에 직접 논리 연산식을 사용할 수 있다 .

78 page

Page 73: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-3 비트 연산자6 연산자와 수식

73

비트 (bit) 연산자- 비트 단위로 연산할 수 있는 연산자

- 비트 단위의 연산은 정수형의 데이터에만 적용이 가능

연산자 사용법 설명>> op1 >> op2 op1 을 op2 만큼 오른쪽으로 시프트 (shift)<< op1 << op2 op1 을 op2 만큼 왼쪽으로 시프트

>>> op1 >>> op2 op1 을 op2 만큼 오른쪽으로 시프트 하면서 왼쪽에는 항상 부호에 무관하게 0 이 채워짐 .

& op1 & op2 비트 단위의 논리곱 (&)| op1 | op2 비트 단위의 논리합 (OR)^ op1 ^ op2 비트 단위의 배타적 논리합 (XOR)~ ~op 비트 단위의 보수

Page 74: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-3 비트 연산자6 연산자와 수식

74

비트 연산자의 논리표

A B A|B A&B A^B ~A

0 0 0 0 0 1

1 0 1 0 1 0

0 1 1 0 1 1

1 1 1 1 0 0

Page 75: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-3 비트 연산자6 연산자와 수식

75

실습예제- 비트 연산자는 비트 단위의 연산을 수행한다 .

RelationalOPTest.java010203040506070809101112131415

public”class BitOPTest1 { public static void main(String args[]) { int a = 3; int b = 5; int c = a | b; int d = a & b; int e = a ^ b; System.out.println(" a = " + a); System.out.println(" b = " + b); System.out.println(" a|b = " + c); System.out.println(" a&b = " + d); System.out.println(" a^b = " + e); }}

비트 단위의 논리합 (|)비트 단위의 논리곱 (&)비트 단위의 배타적 논리합 (^)

Page 76: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-3 비트 연산자6 연산자와 수식

76

프로그램 설명- 04 : 변수에 저장된 정수의 비트는 0011(3) 이다 .- 05 : 변수에 저장된 정수의 비트는 0101(5) 이다 . - 06 : 비트 단위” 논리합 (|) 연산을 한다 . 결과는 0111(7) 이다 . - 07 : 비트 단위의 논리곱 (&) 연산을 한다 . 결과는 00”1(1) 이다 . - 08 : 비트 단위의 배타적 논리합 (^) 연산을 한다 . 결과는 0110 이다 .

80 page

Page 77: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-3 비트 연산자6 연산자와 수식

77

시프트 연산자- 비트 단위로 이동 (왼쪽 또는 오른쪽 ) 하는 연산자

- 정수형의 변수에만 사용이 가능

- 정수에 해당하는 비트 값을 좌 , 우로 이동시키면 곱셈 또는 나눗셈의 결과를 얻을 수 있음

숫자 << 자릿수 : 숫자 * 2 자릿수 (왼쪽에는 항상 0 으로 채워짐 )숫자 >> 자릿수 : 숫자 / 2 자릿수 ( 오른쪽에는 부호 비트로 채워짐 )숫자 >>> 자릿수 : 숫자 / 2 자릿수 ( 오른쪽에는 부호 비트와 상관없이 0 으로 채워짐 )

Page 78: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-3 비트 연산자6 연산자와 수식

78

실습예제- 다음은 비트 단위로 시프트를 수행하는 프로그램의 예이다 .

BitOPTest2.java010203040506070809101112131415161718

public class BitOPTest2 { public static void main(String args[]) { int a = 4; int b = a << 2; int c = a >> 2; int d = -4; int e = d << 2; int f = d >> 2; int g = d >>> 2; System.out.println(" a = " + a); System.out.println(" a<<2 = " + b); System.out.println(" a>>2 = " + c); System.out.println(" d<<2 = " + e); System.out.println(" d>>2 = " + f); System.out.println(" d>>>2 = " + g); }}

왼쪽으로 2 비트 시프트오른쪽으로 2 비트 시프트왼쪽으로 2 비트 시프트오른쪽으로 2 비트 시프트오른쪽으로 2 비트 시프트 ( 왼쪽에는 0 으로 채워짐 )

Page 79: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-3 비트 연산자6 연산자와 수식

79

프로그램 설명- 04 : 정수 4 는 비트 값으로 00.. 생략 ..0100(4) 이다 . : 32 비트로 표현

- 05 : 정수 4 를 왼쪽으로 2 비트 시프트 한다 . 시프트 연산은 왼쪽으로 시프트 하는 경

우 , 왼쪽에는 항상 0 으로 채워진다 . 00.. 생략 ..010000(16)- 06 : 정수 4 를 오른쪽으로 2 비트 시프트 한다 . 오른쪽으로 시프트 하는 경우

오른쪽에는 부호 비트와 같은 값으로 채워지게 된다 . 00.. 생략 ..0001(1)- 07 : 정수 -4 는 비트 값으로 1111.. 생략 ..1100(-4) 이다 . - 08 : 정수 -4 를 왼쪽으로 2 비트 시프트 한다 . 시프트 연산은 왼쪽으로 시프트 하는 경

우 , 왼쪽에는 항상 0 으로 채워진다 . 1111.. 생략 ..110000 - 09 : 정수 -4 를 오른쪽으로 2 비트 시프트 한다 . 오른쪽으로 시프트 하는 경우

오른쪽에는부호 비트와 같은 값으로 채워지게 된다 . 1111.. 생략 ..1111 - 10 : 정수 -4 를 오른쪽으로 2 비트 시프트 한다 . 왼쪽에는 0 으로 채워진다 . >>>

시프트 연산자를 수행할 때 오른쪽에는 부호 비트와 상관없이 0 으로 채워진다 . 음수에 이

연산자를 적용하면 결과를 예측하기 힘들다 . 0011.. 생략 ..1111

Page 80: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-3 비트 연산자6 연산자와 수식

80

81 page

Page 81: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-4 배정 연산자와 단축 배정 연산자6 연산자와 수식

81

배정 연산자로 “ =” 을 제공

82 page

Page 82: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-4 배정 연산자와 단축 배정 연산자6 연산자와 수식

82

단축 배정 연산자

i = i + 8 => i += 8

82 page

Page 83: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-4 배정 연산자와 단축 배정 연산자6 연산자와 수식

83

단축 배정 연산자연산자 사용법 의미+= op1 += op2 op1 = op1 + op2-= op1 -= op2 op1 = op1 - op2*= op1 *= op2 op1 = op1 * op2/= op1 /= op2 op1 = op1 / op2%= op1 %= op2 op1 = op1 % op2&= op1 &= op2 op1 = op1 & op2|= op1 |= op2 op1 = op1 | op2^= op1 ^= op2 op1 = op1 ^ op2

<<= op1 <<= op2 op1 = op1 << op2>>= op1 >>= op2 op1 = op1 >> op2

>>>= op1 >>>= “p2 op1 = op1 >>> op2

Page 84: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-4 배정 연산자와 단축 배정 연산자6 연산자와 수식

84

실습예제- 다음 프로그램은 배정 연산자와 단축 배정 연산자를 사용하는 예이다 .

AssignOPTest.java0102030405060708091011121314151617

public class AssignOPTest { public static void main(String args[]) { int a = 10; System.out.println("a = " + a); a += 4; System.out.println("a += 4 의 결과 " + a); a -= 4; System.out.println("a -= 4 의 결과 " + a); a *= 4; System.out.println("a *= 4 의 결과 " + a); a /= 4; System.out.println("a /= 4 의 결과 " + a); a %= 4; System.out.println("a %= 4 의 결과 " + a); }}

단축 배정 연산자 사용단축 배정 연산자 사용단축 배정 연산자 사용단축 배정 연산자 사용단축 배정 연산자 사용

Page 85: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-4 배정 연산자와 단축 배정 연산자6 연산자와 수식

85

프로그램 설명- 04 : 변수 a 에 정수 10 을 배정 ( 저장 ) 한다 . - 06 : 변수 a 에 저장된 값에 숫자 4 를 더하기 연산 후 그 값을 a 에 저장한다 . - 08 : 변수 a 에 저장된 값에 숫자 4 를 빼기 연산 후 그 값을 a 에 저장한다 .- 10 : 변수 a 에 저장된 값에 숫자 4 를 곱하기 연산 후 그 값을 a 에 저장한다 .- 12 : 변수 a 에 저장된 값에 숫자 4 를 나누기 연산 후 그 값을 a 에 저장한다 .- 14 : 변수 a 에 저장된 값을 숫자 4 로 나머지 연산 후 그 값을 a 에 저장한다 .

84 page

Page 86: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-5 3 항 연산자6 연산자와 수식

86

자바는 3 개의 오퍼랜드를 가진 3 항 연산자“ ?:” 를 제공

3 항 연산자는 우선 수식 1 을 평가하여 true 인지 false 인지를 판별하여 true 이면 수식 2 가 평가되고 , false 이면 수식 3 이 평가되어 그 결과가 수식 1 의 결과로 반환

수식 1 ? 수식 2 : 수식 3형식

flag = count > 0 ? 0 : 1;

Page 87: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-5 3 항 연산자6 연산자와 수식

87

실습예제- 숫자가 짝수인지 홀수인지를 구분하는 프로그램

프로그램 설명- 07 : 변수 i 값을 2 로 나눈 나머지가 0 이면 j 에 true 를 그렇지 않으면 false 를 배정

한다 .

TernaryOPTest.java01020304050607080910

public class TernaryOPTest { public static void main(String args[]) { int i=7; boolean j; System.out.println(i +" 이 짝수입니까 ?"); j = (i % 2 == 0) ? true : false; System.out.println(j); }}

3 항 연산자의 사용

Page 88: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-5 3 항 연산자6 연산자와 수식

88

86 page

Page 89: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-6 연산자의 우선순위6 연산자와 수식

89

연산자의 우선순위우선순위 연산자

1 () [] .2 + + - - ~ !3 * / %4 + -5 >> >>> <<6 > >= < <=7 = = !=8 &9 ^

10 |11 &&12 ||13 ?:14 =

Page 90: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-6 연산자의 우선순위6 연산자와 수식

90

연산자의 우선순위

( 4 + 5 * 2 / 2 ) 의 우선순위

87 page

Page 91: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-6 연산자의 우선순위6 연산자와 수식

91

연산자의 우선순위

( -5 - -2 * 8 % (4 -2) * 3 )

88 page

Page 92: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-6 연산자의 우선순위6 연산자와 수식

92

연산자의 우선순위

a + b - c ( 우선순위가 같을 때 사칙연산의 경우는 왼쪽부터 계산 )

Page 93: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-6 연산자의 우선순위6 연산자와 수식

93

연산자의 우선순위

a = b = c = 1 ( 우선순위가 같을 때 배정 연산은 오른쪽부터 계산 )

Page 94: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-6 연산자의 우선순위7 문자열 (String)

94

문자열- 기본 자료형으로 제공되고 있지 않음

- 자바의 문자열은 String 클래스로 구현

문자열을 선언하는 예

String str1 = " 아 ! 대한민국 "; String str2 = "Korea"; String str3; String str4 = new String("Korea"); String str5 = str2 + str1;

Page 95: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-6 연산자의 우선순위7 문자열 (String)

95

실습예제- 다음 프로그램은 문자열을 사용하는 예이다 .

StringTest.java010203040506070809101112

public class StringTest { public static void main(String args[]) { String str1 = " 아 ! 대한민국 "; String str2 = new String("Korea"); System.out.println(str1 + str2); int a = 1000; int b = 2000; System.out.println(str1 + a + b + " 리 금수강산 "); System.out.println(str1 + (a + b) + " 리 금수강산 "); }}

문자열 출력문자열 변수에 값 저장

정수가 문자열로 변환되어 출력

Page 96: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

3 장 . 자바의 기본 구조 I : 변수 , 자료형 , 연산자

6-6 연산자의 우선순위7 문자열 (String)

96

프로그램 설명- 04 : 문자열 변수 str1 에 직접 문자열을 배정하여 “아 ! 대한민국 ”을 저장한다 .- 05 : 문자열 변수 str2 에 객체지향 방법인 new 연산자를 사용해서 “ Korea” 를

저장한다 . - 06 : 문자열 변수 str1 과 str2 를 연결하여 출력한다 . - 09 : 출력문 내에서 문자열과 일반 정수 값을 가진 변수와의 덧셈은 연결

(concatenation) 된다는 의미이다 . 정수는 문자열로 자동 형변환이 되어 출력된다 .- 10 : 출력문 내에서 괄호를 사용하여 정수 연산을 수행한 다음 문자열과 연결하는 연산을

수행한다 . 괄호를 사용하여 정수 덧셈을 수행할 수 있다 .

90 page

Page 97: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

자바의 기본 구조를 배우기 위한 전형적인 자바 프로그램① 자바 프로그램의 주석은 “ /*” 와 “ */” 사이에 기술한다 .② 한 라인에 기술하는 주석은 “ //” 기호를 사용한다 .③ 자바 프로그램 실행 시 매개변수로 값을 입력받아 프로그램에서 처리할 수 있다 .

매개변수로 입력된 값은 문자열의 배열로 저장된다 .

자바 프로그램의 오류① 자바 프로그램에서 발생할 수 있는 오류는 컴파일 시에 발생하는 구문 (syntax)

오류 , 실행 시 발생하는 실행시간 (Runtime) 오류 , 프로그램 작성 시 논리적 문제로 발생하는 논리 (Logic) 오류 등으로 분류된다 .

식별자와 예약어① 자바에는 50 개의 예약어가 있으며 , 예약어는 식별자로 사용할 수 없다 .② 자바는 대소문자를 구분한다 .

학습정리

97

Page 98: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

변수와 자료형① 변수는 값이 저장된 메모리의 위치에 주어진 이름이다 .② 자바는 8 개의 기본 자료형을 가진다 .

학습정리

98

Page 99: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

연산자자바는 다음과 같은 연산자를 가진다 .

문자열자바의 문자열은 String 클래스의 객체로 표현되지만 , 일반 변수처럼 사용이

가능하다 .

학습정리

99

산술 연산자 +, -, *, /, %, + +, - -

관계 및 논리 연산자 >, >=, <, <=, ==, !=, instanceof, &&, ||, !

비트 연산자 >>, <<, >>>, &, |, ^, ~

단축 배정 연산자 +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=

3 항 연산자 ? :

Page 100: 3 장 .  자바의 기본 구조  I : 변수 ,  자료형 ,  연산자

1장. 컴퓨터와 프로그램 그리고 자바

100

수고하셨습니다 .질문 있습니까 ?