[과목3] 자바언어 (java language) - ipact.kripact.kr/pds/b002-3(1).pdf · 제2장 자바...

103
[과목3] 자바언어 (Java Language)

Upload: hoangnguyet

Post on 09-Feb-2018

245 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

[과목3]

자바언어

(Java Language)

Page 2: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

차 례

제1장 자바 시작

1.1 자바 시작

제2장 자바 기본 프로그래밍

2.1 자바 프로그램 구조 - 맛보기 예제

제3장 반복문, 배열, 예외처리

3.1반복문의 특징

3.2 배열이란?

3.3 자바의 예외 처리

제4장 클래스와 객체

4.1 객체지향적 언어의 목적

4.2 생성자

제5장 상속과 다형성

5.1 상속 (inheritance)

제6장 패키지 개념과 자바 기본 패키지

6.1 패키지 개념과 필요성

제7장 입출력 스트림

7.1 스트림

제8장 제네릭과 컬렉션

8.1 컬렉션(collection)의 개념

제9장 자바의 GUI, AWT와 Swing

9.1 자바의 GUI(Graphic User Interface)

제10장 이벤트 처리

10.1 이벤트 기반 프로그래밍

제11장 스윙 컴포넌트와 이벤트 핸들링

11.1 기초적인 스윙 컴포넌트와 상속 관계

제12장 그래픽

Page 3: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

12.1 스윙 컴포넌트 그리기, paintComponent() 메소드

제13장 스레드와 멀티태스킹

13.1 멀티태스킹(multi-tasking) 개념

제14장 고급 스윙 컴포넌트

14.1 메뉴 만들기

제15장 애플릿, 멀티미디어

15.1 자바 애플릿

제16장 네트워크

16.1 TCP/IP 소개

제17장 JDBC 프로그래밍

17.1 데이터베이스의 개념

자바언어 예상문제

Page 4: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 301 -

제1장 자바언어 시작

1.1 자바 시작

1.1.1 컴퓨터의 하드웨어와 소프트웨어

그림 1.1

1.1.2 프로그래밍 언어

-프로그래밍 언어

∎프로그램 작성 언어

∎기계어(machine language)

• 0, 1의 이진수로 구성된 언어

• 컴퓨터의 CPU는 기계어만 이해 및 처리가능

∎어셈블리어

• 기계어의 명령을 ADD, SUB, MOVE 등과 같은 표현하기 쉬운 상징적인 단어인 니모닉

기호(mnemonic symbol)로 일대일 대응시킨 언어

∎고급언어

• 사람이 이해하기 쉽고 복잡한 작업, 자료 구조,알고리즘을 표현하기 위해 고안된 언어

• Pascal, Basic, C/C++, Java, C#

• 절차 지향 언어와 객체 지향 언어로 나눌 수 있음

1.1.3 프로그램 편집, 컴파일 및 실행

-소스 : 프로그래밍 언어로 작성된 텍스트 파일

-컴파일 : 소스 파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정

∎소스 파일 확장자와 컴파일된 파일의 확장자

• 자바 : .java -> .class

• C : .c ->.obj->.exe

Page 5: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 302 -

• C++ : .cpp ->.obj -> .exe

그림 1.2

1.1.4 자바의 태동

-썬 마이크로시스템스의 제임스 고슬링(James Gosling)

∎1991년에 이 그린 프로젝트(Green Project)라는 이름으로 가전 제품에 들어갈 소프트웨

어를 위해 개발 시작

∎1995년 자바 발표

-목적

∎플랫폼 호환성 문제 해결

• 기존 프로그래밍 언어의 플랫폼 호환성 결여

• 기본 언어로 작성된 프로그램은 PC, 유닉스, 메인 프레임 등 플랫폼 간에 호환성이 없음

• 다시 소스를 컴파일하거나 프로그램을 재 작성해야 하는 단점 존재

∎플랫폼 독립적인 언어 개발

• 모든 플랫폼에서 호환성을 갖는 프로그래밍 언어 필요

• 네트워크, 특히 웹에 최적화된 프로그래밍 언어의 필요성 대두

∎메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용

• 가전 제품 : 작은 량의 메모리를 가지는 제어 장치

• 내장형 시스템 요구 충족

-초기 이름 오크(OAK)

∎인터넷과 웹의 엄청난 발전에 힘입어 퍼지게 됨

∎Netscape 웹 브라우저에서 실행

-2009년에 썬 마이크로시스템스를 오라클에서 인수

1.1.5 WORA

-WORA(Write Once Run Anywhere)

Page 6: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 303 -

∎한 번 만 작성하여 모든 플랫폼에 실행가능

∎C/C++ 등과 같은 기존 언어의 플랫폼 종속성 극복

• OS, H/W에 상관없이 JVM이 있는 곳이면 어디서나 자바 프로그램에 동일한 실행환경을

제공하며 실행 결과 기대

∎네트워크에 연결된 어느 클라이언트에서 실행 가능.

• 웹 브라우저, 분산 환경에서 지원됨

-WORA를 가능하게 하는 자바의 특징

∎바이트 코드(byte code)

∎JVM(Java Virtual Machine)

1.1.6 플랫폼 종속성(platform dependence)

그림 1.3

1.1.7 자바의 플랫폼 독립성, WORA

그림 1.4

Page 7: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 304 -

1.1.8 자바의 실행 환경

-바이트 코드

∎플랫폼 종속성이 없이 자바 가상 기계인 JVM (Java Virtual Machine)에 동작하는 바이

너리 코드

∎클래스 파일(.class)에 저장

∎바이트 코드는 컴퓨터 CPU에 의해 직접 실행되지 않음

• 자바 가상 기계가 인터프리터 방식으로 바이트 코드 해석, 해당 플랫폼에서 실행시킴

-자바 가상 기계(JVM : Java Virtual Machine)

∎가상 기계로서 각기 다른 플랫폼에서 동일한 자바실행환경 제공

∎자바 가상 기계 자체는 플랫폼에 종속적

• 자바 가상 기계는 각 플랫폼에 맞도록 작성된다.

• 리눅스에서 작동하는 자바 가상 기계는 윈도우즈에서 작동하지 않는다.

∎자바 가상 기계 개발, 공급

• 자바 개발사인 오라클 이외 IBM, MS 등 다양한 회사에서 제작 공급

-자바의 실행

∎자바 가상 기계가 클래스 파일을 실행

1.1.9 바이트 코드의 디어셈블(disassemble)

-디어셈블

∎클래스 파일에 들어 있는 자바 바이트 코드를 텍스트로 볼 수있게 변환하는 작업

∎JDK의 javap.exe 이용

public class Hello {public static int sum(int i, int j) {

return i + j;// i와 j의 합을 리턴 }public static void main(String[] args) {

int i;int j;char a;String b;final int TEN = 10;i = 1;j = sum(i, TEN);a = '?';b = "Hello";java.lang.System.out.println(a);System.out.println(b);System.out.println(TEN);System.out.println(j);

}}

Page 8: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 305 -

그림 1.5

1.1.10 디어셈블하여 바이트 코드 보기

그림 1.6

Page 9: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 306 -

1.1.11 자바 가상 기계와 자바 응용프로그램의 실행

그림 1.7

1.1.12 자바와 C/C++의 실행 환경 차이

∎자바

그림 1.8

∎C/C++

그림 1.9

1.1.13 Tip: 자바와 C/C++실행 환경 및 과정

-자바

Page 10: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 307 -

∎자바는 링크 과정이 없이 컴파일러가 바로 바이트 코드 생성

∎바이트 코드는 JVM으로만 실행 가능

∎자바는 런타임에 필요한 클래스들이 JVM에 링크되며 클래스 로더가 동적으로 필요한 클

래스를 로딩한다.

∎ClassLoader 객체를 이용하여 프로그래머가 직접 클래스를 로딩할 수도 있다.

-C/C++

∎C/C++에서는 컴파일러가 중간 단계인 오브젝트 코드를 생성한 후 링커가 필요한 라이브

러리들을 링크하여 최종 실행 가능한 실행 파일을 생성

∎라이브러리의 형태가 정적 라이브러리의 경우는 라이브러리를 실행 파일에 포함시키므로

실행 파일 크기가 커짐.

∎동적 라이브러리의 경우는 런타임에 링크가 일어난다.

∎오브젝트 코드 및 실행 파일은 플랫폼에 따라 다르므로 플랫폼이 바뀌면 컴파일 및 링크

를 새로 하여야 한다.

1.1.14 자바의 진화(financial express에 인용)

-자바의 성장 매년 천억 달러 이상의 비즈니스 창출

-30억 달러 이상의 자바 모바일 게임 시장

-현재 개발 중인 무선 어플리케이션 프로그램 10개 중에 7개는 자바 실행 환경을 이용

-약 450만 명의 소프트웨어 개발자가 자바 관련 작업

-엔터프라이즈에서는 약 22억 달러의 자바 어플리케이션 서버와 천 백억 달러 정도의 관

련 IT 투자가 이뤄지고 있다

-약 5억 8천대의 자바 지원 단말기와 100여 개의 사업자가 자바 플랫폼 배치

-약 7억 5천만대의 자바 카드 보급

1.1.15 자바와 오픈 소스

-오픈 소스란?

∎소프트웨어 제작자의 권리를 보존하며 누구나 액세스할 수 있도록 소스 코드를 무상 공개

한 소프트웨어

-오픈 소스의 장점

∎공개된 소스 코드를 참조함으로써 개발 시간 및 비용 단축

∎공개된 소프트웨어를 다수의 인원이 참여 개량, 우수한 품질의 소프트웨어 개발

-오픈 소스의 단점

∎무단으로 상용 소프트웨어에 사용할 경우 저작권 침해가 발생

∎다양한 개량 버전의 소프트웨어로 인한 호환성 문제

-오프 소스 소프트웨어 사례

∎Linux, OpenOffice, Open Solaris, Mozilla, Apache, GNU, WebKit 등

∎2006년 11월, 썬 마이크로시스템스는 대부분의 자바를 GPL 라이선스로 소스 오픈

∎http://sourceforge.net : 오픈 소스를 위한 사이트

1.1.16 자바의 배포판 종류

-오라클은 개발 환경에 따라 3 개의 배포판 제공

-Java SE

Page 11: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 308 -

∎자바 표준 배포판

∎데스크탑과 서버 응용 개발 플랫폼

∎임베디드 및 실시간 환경 지원

-Java ME

∎자바 마이크로 배포판

∎휴대 전화나 PDA, 셋톱박스 등제한된 리소스를 갖는 하드웨어에서 응용 개발을 위한 플

랫폼

∎가장 작은 메모리 풋프린트

∎Java SE의 서브셋 + 임베디드 및 가전 제품을 위한 API 정의

-Java EE

∎자바 기업용 배포판

∎자바를 이용한 다중 사용자, 기업용 응용 개발을 위한 플랫폼

∎Java SE + 인터넷 기반의 서버사이드 컴퓨팅 관련 API 추가

1.1.17 Java SE 구성

그림 1.10

1.1.18 JDK와 JRE

-JDK란?

∎Java Development Kit의 약자

∎자바 응용 개발 환경으로, 개발에 필요한 도구 포함

• 컴파일러, JRE (Java Runtime Environment), 클래스 라이브러리, 샘플 등

-JRE

∎자바 실행 환경으로 JVM이 포함되어 있음

∎자바 실행 환경만 필요한 경우 JRE만 따로 다운 가능

-JDK와 JRE의 개발 및 배포

∎오라클의 Technology Network의 자바 사이트에서 다운로드

-JDK의 bin 디렉토터리에 포함된 주요 개발 도구

Page 12: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 309 -

∎javac

• 자바 소스를 바이트 코드로 변환하는 컴파일러

∎java

• jre의 bin 디렉토리에도 있는 자바 응용프로그램 실행기

∎jar

• 자바 아카이브 파일 (JAR)의 생성 및 관리하는 유틸리티

∎jdb

• 자바 디버거

∎appletviewer

• 웹 브라우저 없이 애플릿을 실행 및 디버깅하는 유틸리티

1.1.19 JDK 설치 후 디렉터리 구조

그림 1.11

1.1.20 누구?

그림 1.12

1.1.21 자바 API

-자바 API(Application Programming Interface)란?

∎JDK에 포함된 클래스 라이브러리

∎주요한 기능들을 미리 구현한 클래스 라이브러리의 집합

Page 13: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 310 -

∎개발자는 API를 이용하여 쉽고 빠르게 자바 프로그램 개발

∎API에서 정의한 규격에 따라 개발자는 클래스 사용

-자바 패키지(package)

∎서로 관련된 클래스들을 분류하여 묶어 놓은 것

∎필요한 클래스가 속한 패키지만 import하여 사용

∎계층구조로 되어 있음

• 클래스의 이름에 패키지 이름도 포함

• 다른 패키지에 동일한 이름의 클래스 존재 가능

∎자바 API(클래스 라이브러리)는 JDK내에 패키지 형태로 제공

∎개발자가 자신의 패키지 생성 가능

1.1.22 자바 API 참조 문서

-온라인 자바 API 참조

∎http://download-llnw.oracle.com/javase/6/docs/api/

그림 1.13

1.1.23 자바 통합 개발 환경(자바 IDE) - Eclipse

-IDE란?

∎Integrated Development Environment의 약자

∎통합 개발 환경

∎편집, 컴파일, 디버깅을 한번에 할 수 있는 통합된 개발 환경

-Eclipse

∎자바 응용 프로그램 개발을 위한 통합 개발 환경

∎IBM에 의해 개발된 오픈 소스 프로젝트

Page 14: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 311 -

∎http://www.eclipse.org/downloads/ 에서 다운로드

1.1.24 Tip: javadoc를 이용한 API 도큐먼트 생성

-javadoc.exe

∎자바 소스 파일로부터 API 도큐먼트 생성

∎소스의 선언문과 /** 와 */ 사이에 주어진 정보를 바탕으로 HTML로 된 API 도큐먼트

생성.

∎클래스, 인터페이스 생성자, 메소드, 필드 등을 기술

-실행 방법 사례

∎javadoc HelloDoc.java

∎HelloDoc.html 파일 생성

∎HelloDoc 클래스를 설명하는 API 도큐먼트

/** * javadoc 사용 예제를 위한 클래스 */public class HelloDoc { /**

* 두 정수의 합을 구하는 메소드 * * @param i 합을 구할 첫번째 정수형 인자 * @param j 합을 구할 두번째 정수형 인자 * @return 두 정수의 합을 리턴 */

public static int sum(int i, int j) {return i + j;

}

public static void main(String[] args) {int i;int j;char a;String b;final int TEN = 10;

i = 1;j = sum(i, TEN);a = '?';b = "Hello";

java.lang.System.out.println(a);System.out.println(b);System.out.println(TEN);

Page 15: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 312 -

1.1.25 javadoc로 HelloDoc 클래스의 API 도큐먼트생성

그림 1.14

1.1.26 자바 프로그램 개발

-public class Hello2010

∎클래스의 선언

∎Hello2010 은 클래스 이름

∎클래스는 {와 } 사이에 정의

∎자바는 하나 이상의 클래스로 구성

-public static void main(String[] args)

∎자바 프로그램은 main 메소드에서 실행 시작

∎실행을 시작하는 클래스에 main() 메소드가 반드시 하나만 존재

-int n = 2010;

∎지역 변수 선언

-System.out.println(“헬로”+n);

∎화면에 “헬로2010”를 출력하는 실행문

∎JDK에서 제공하는 java.lang.System.out 객체 이용

System.out.println(j);}

}

Page 16: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 313 -

샘플: Hello2010.java

1.1.27 자바 소스 편집

-어떤 편집기를 사용해도 무관

∎보조 프로그램의 메모장 이용한 샘플

그림 1.15

-작성 후 임의의 디렉토리에 Hello2010.java로 저장

∎클래스의 이름과 동일한 파일 이름으로 저장

∎확장자는 .java

1.1.28 소스 컴파일 및 실행

그림 1.16

Page 17: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 314 -

1.1.29 이클립스를 이용한 자바 프로그램 개발

-프로젝트 생성

∎File->New->Java Project를 선택

∎Project name 난에 프로젝트 이름을 입력

∎Finish 버튼을 눌러 프로젝트 생성

그림 1.17

-클래스 생성

∎File->New->Class를 선택

∎클래스 이름은 Hello2010을 입력

∎Finish 버튼을 눌러 클래스 생성

그림 1.18

Page 18: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 315 -

1.1.30 생성된 클래스와 소스

그림 1.19

1.1.31 소스 편집과 컴파일 및 실행

-자바 응용프로그램의 실행

∎이클립스의 소스 편집 윈도우에 앞서 메모장을 이용하여 소스를 작성한 것과 동일하게 소

스 작성

∎Run->Run 메뉴를 선택 또는 클릭 콘솔 출력 메시지

그림 1.20

1.1.32 자바 응용의 종류 : 데스크탑 어플리케이션

-일반적인 응용프로그램

∎PC 등의 데스크톱 컴퓨터에 설치되어 실행

∎JRE가 설치된 어떤 환경에서도 실행

∎다른 응용프로그램의 도움이 필요 없이 단독으로 실행

Page 19: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 316 -

그림 1.21

1.1.33 자바 응용의 종류 : 애플릿 응용프로그램

-애플릿(applet)

∎웹 브라우저에 의해 구동되고 실행이 제어되는 자바 프로그램

∎애플릿은 사용할 수 있는 자원 접근에 제약 있음

그림 1.22

1.1.34 자바 응용의 종류 : 서블릿 응용프로그램

-서블릿(servlet)

∎서블릿은 애플릿과 반대로 서버에서 실행되는 자바 프로그램이다.

∎유사 기술 : perl, CGI, PHP, ASP

∎서블릿은 데이터베이스 및 기타 서버 등과 연동하여 복잡한 기능을 구현할 때 사용됨

∎프로세스 기반인 CGI에 비하여 스레드 기반으로 작고 빠르다.

Page 20: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 317 -

그림 1.23

1.1.35 자바 응용의 종류 : 웹 스타트

-웹 스타트(web start)

∎서버에 존재한다.

∎내 컴퓨터에 설치하지 않고 언제든지 서버로부터 불러 실행할 수 있는 응용프로그램

∎문서 편집, 스프레드시트, 이메일 클라이언트 등과 같이 고도의 복잡한 기능 목적

∎자바 웹 스타트는 웹 브라우저와 별도로 실행

그림 1.24

1.1.36 자바 응용의 종류 : 모바일 응용프로그램

-Java ME

∎모바일 디바이스를 위한 기술 및 규격의 집합

• CLDC, CDC configuration 등이 있다.

∎유럽, 미국 시장에 출시되는 대부분의 단말기에 탑재

∎노키아, 삼성, LG, 소니 에릭슨, 모토롤러 등 단말기 제조사들은 자바 기술이 탑재된 단

말기를 출시

Page 21: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 318 -

그림 1.25

1.1.37 자바 모바일 응용 : WIPI

-WIPI

∎한국 무선인터넷 표준화 포럼에서 제정한 무선인터넷 플랫폼 표준 규격

∎단말기용 응용 프로그램 개발자에게는 플랫폼간 컨텐츠 호환성을 보장

∎단말기 개발자에게는 플랫폼 이식의 용이성을 제공

∎C와 자바 인터페이스 지원

그림 1.26

1.1.38 자바 모바일 응용 : 안드로이드

-안드로이드

∎구글의 주도로 여러 모바일 회사가 모여 만든 OHA(Open Handset Alliance)에서 만든

무료 모바일 플랫폼

∎개발 언어는 자바를 사용하나 JVM에 해당하는 Dalvik은 기존 바이트 코드와 호환성이

Page 22: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 319 -

없어 변환이 필요

그림 1.27

1.1.39 자바의 특성

-객체지향

∎객체지향의 특징인 클래스 계층 구조, 상속성, 다형성, 캡슐화 등 지원

-멀티스레드

∎하나의 프로그램에서 다수의 스레드의 동시에 수행 환경 지원

∎자바는 운영체제의 도움 없이 자체적으로 멀티스레드 지원

• C/C++ 등에서는 멀티스레드를 위해 운영체제 API를 호출

-플랫폼 독립성

∎하드웨어, 운영체제 등에 독립적인 바이트 코드를 자바 가상 기계로 실행시킴으로써 플랫

폼에 종속성을 갖지 않음

-소스(.java)와 클래스(.class) 파일

∎클래스 파일에는 단 하나 만의 클래스만 존재.

∎하나의 소스 파일에 여러 클래스를 작성 가능

• 하나의 public 클래스만 가능

∎다수의 클래스가 작성된 자바 소스를 컴파일하면 각각 별도의 클래스 파일 생성

∎소스 파일의 이름과 public으로 선언된 클래스 이름은 같아야 함

1.1.40 자바의 특징(계속)

-자바 실행 모듈

∎한 개의 class 파일 또는 다수의 class 파일로 구성

∎여러 디렉토리에 걸쳐 다수의 클래스 파일로 구성된 경우 jar 파일 형태로 배포 가능

∎자바 응용프로그램의 실행은 main() 메소드에서 시작

∎하나의 클래스 파일에 하나 이상의 main() 메소드가 있을 수 없음

∎다수의 클래스 파일이 각각 main() 메소드를 포함하고 있는 것은 상관없음

-클래스로 캡슐화

∎자바의 모든 변수나 함수는 클래스 내에서 정의 - 캡슐화

Page 23: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 320 -

∎클래스 안에서 새로운 클래스 정의 가능 – 내부 클래스

-패키지

∎관련된 클래스는 패키지로 묶어 관리

∎패키지는 폴더 개념

• 예) java..lang.System은 java\lang 디랙터리 밑의 System.class를 나타낸다.

1.1.41 소스 파일과 클래스, 클래스 파일의 관계

그림 1.28

제2장 자바 기본 프로그래밍

2.1 자바 프로그램 구조 - 맛보기 예제

Page 24: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 321 -

2.1.1 맛보기 예제 설명

-클래스 만들기

∎Hello2 라는 이름의 클래스 선언

∎class 라는 키워드로 클래스 정의(4장 참고)

∎public으로 선언하면 다른 클래스에서도 접근 가능

∎클래스 본문은 ‘{’으로 시작하여 ‘}’으로 끝남

-main() 메소드

∎public static void으로 선언되어야 함

∎자바 프로그램은 main() 메소드부터 실행 시작

∎String[] args로 실행 인자를 전달 받음(3장 참고)

-멤버 메소드

∎메소드 sum() 정의

∎클래스 에 속한 함수, 클래스 내에서만 선언

∎인자들의 타입과 변수 명을 ‘,’로 분리하여 나열

∎메소드 코드는 ‘{’과 ‘}’ 사이에 작성

-변수 선언

∎개발자가 변수 이름을 붙이고 같이 선언

∎메소드 내에서 선언된 변수가 지역 변수

∎지역 변수는 메소드 실행이 끝나면 저장 공간 반환

-메소드 호출

∎sum() 메소드 호춯

∎sum() 메소드의 호출 시 변수 i의 값과 정수 10을 전달

∎sum() 메소드의 인자인 n, m은 각각 20, 10의 값을 전달 받음

∎sum() 메소드는 n과 m 값을 더한 30을 리턴

∎호출한 부분에서 변수 s는 정수 30을 전달받아 저장

Page 25: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 322 -

2.1.2 sum() 메소드 호출과 리턴

-주석문

∎실행에 영향을 주지 않음.

∎“//”을 만나면 행 끝날 때가지 한 라인을 주석문 처리

∎“/*”을 만나면 “*/”을 만날 때까지 여러 행을 주석문 처리

-화면 출력

∎표준 출력 스트림에 메시지 출력

∎표준 출력 스트림 System.out의 println 메소드 호출

∎println은 여러가지 데이터 타입 출력

∎println은 주어진 인자를 출력 후 다음 행으로 커서 이동

-문장

∎;로 한 문장의 끝을 인식

∎한 문장을 여러 줄에 작성해도 무방

∎주석문 끝에는 ‘;’를 붙이지 않음

Page 26: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 323 -

-블록

∎블록은 {으로 시작하여 }으로 끝남

∎클래스 선언과 메소드 선언 등은 블록으로 구성

2.1.3 식별자 (identifier)

-식별자란?

∎클래스, 변수, 상수, 메소드 등에 붙이는 이름

-식별자의 원칙

∎‘@’, ‘#’, ‘!’와 같은 특수 문자, 공백 또는 탭은 식별자로 사용할 수 없으나 ‘_’, ‘$’는 사

용 가능

∎유니코드 문자 사용 가능. 한글 사용 가능

∎자바 언어의 키워드는 식별자로 사용할 수 없음

∎식별자의 첫 번째 문자로 숫자는 사용할 수 없음

∎‘_’ 또는 ‘$’를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로 잘 사용하지 않는다.

∎불린 리터럴 (true, false)와 널 리터럴(null)은 식별자로 사용할 수 없음

∎길이 제한 없음

-대소문자 구별

∎Test와 test는 별개의 식별자

2.1.4 식별자 이름 사례

∎사용 가능한 예

∎잘못된 예

Page 27: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 324 -

2.1.5 자바 키워드

표 2.1

2.1.6 식별자 이름 붙이는 관습

-기본 : 헝그리안 이름붙이기 관습

-클래스 이름

∎첫 번째 문자는 대문자로 시작

∎여러 단어가 복합되어 있을 때는 각 단어의 첫 번째 문자만 대문자로 표시

-변수, 메소드 이름

∎첫 단어 이후 각 단어의 첫 번째 문자는 대문자로 시작

-상수 이름

∎모든 문자를 대문자로 표시

2.1.7 자바의 데이터 타입

-자바의 데이터 타입

∎기본 타입 : 8 개

• boolean

• char

• byte

• short

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

Page 28: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 325 -

• int

• long

• float

• double

∎레퍼런스 타입 : 3 개

• 클래스(class)에 대한 레퍼런스

• 인터페이스(interface)에 대한 레퍼런스

• 배열(array)에 대한 레퍼런스

2.1.8 자바의 기본 데이터 타입

-특징

∎기본 데이타 타입의 크기가 정해져 있음

기본 데이타 타입의 크기는 CPU나 운영체제에 따라 변하지 않음

그림 2.1

2.1.9 변수와 선언

-변수

∎프로그램이 실행 중에 값을 임시 저장하기 위한 공간

• 변수 값은 프로그램 수행 중 변경될 수 있다.

∎데이터 타입에 맞는 크기의 메모리 할당

∎반드시 변수 선언과 값을 초기화 후 사용

-변수 선언

∎변수의 타입 다음에 변수 이름을 적어 변수를 선언

Page 29: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 326 -

-변수 선언 사례

-변수 선언과 초기화

∎선언과 동시에 초기값 지정

-변수에 값 대입

∎대입 연산자인 = 다음에 식(expression)

2.1.10 정수타입 리터럴

-정수타입 리터럴 : 소수점이 없는 정수를 직접 표시

∎8진수 : 0으로 시작하는 숫자는 모두 8진수로 인식

• int n = 015; // 10진수 13

∎16진수 : 0x로 시작하는 숫자는 16진수를 의미

• int n = 0x15; // 10진수 21

∎10진수 : 0으로 시작하지 않는 숫자는 10진수를 의미

• 15, 3, 20, 55, 88

∎모든 정수타입 리터럴은 int형으로 처리

∎long 타입 리터럴은 숫자 뒤에 L 또는 l을 붙인다.

• ex) 24L, 3578l

2.1.11 실수타입 리터럴

-부동 소수점을 갖는 수를 표시

∎소수점을 찍은 실수, 지수(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 타입

∎실수타입 리터럴은 디폴트로 double 타입 처리

Page 30: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 327 -

2.1.12 문자타입 리터럴

-문자 한 자를 나타낸다.

∎단일 인용부호(‘’)로 문자 하나 표현

• 'a', 'W', '가', '*', '3', '7'

∎\다음에 숫자는 8진수로서 0 ~ 337사이의 8진수만 가능

• 𝈏102 -> 문자 ‘B’를 나타내는 8진수

• 𝈏337 -> 문자 ‘β’를 나타내는 8진수

∎\u다음에 4자리 16진수, 2 바이트의 유니코드(Unicode)

𝈏u0041 -> 문자 'A'의 유니코드(0041)

𝈏uae00 -> 한글문자 '글'의 유니코드(ae00)

∎특수 기호는 \로 시작

표2.2

2.1.13 논리타입 리터럴

-논리값 표시

∎true 또는 false 뿐

-논리타입과 정수타입 사이의 타입 변환 허용 안 됨

∎(i==1) 또는 (i!=0)과 같은 논리연산으로 변경해야 함

2.1.14 Tip: 기본 데이터 타입 이외 리터럴

-null 리터럴

∎어떠한 레퍼런스 타입의 값으로도 사용 가능

• int n = null; // 기본 데이터 타입에는 사용 불가

• String str = null;

-문자열 리터럴

∎이중 인용부호로 묶어서 표현

• "Good", "Morning", "자바", "3.19", "26", "a"

∎자바에서 문자열은 객체이므로 기본 타입이 아님

∎문자열 리터럴은 String 객체로 생성됨

2.1.15 상수

-상수 선언

‘𝈏b’ 백스페이스 ‘𝈏t’ 탭

‘𝈏n’ 라인피드 ‘𝈏f’ 폼피드

‘𝈏r’ 캐리지리턴 ‘𝈏”’ 이중 인용 부호

‘𝈏’’ 단일 인용 부호 ‘𝈏𝈏’ 백슬래쉬

Page 31: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 328 -

∎final 키워드 사용

∎값을 변경 불가

∎선언 시 반드시 초기값 지정

-상수 선언 사례

-예제 2-1 : 변수, 리터럴, 상수 사용하기

원의 면적을 구하는 프로그램을 작성해보자.

2.1.16 자동 타입 변환

-자동타입 변환이 발생하는 경우

∎원래의 타입보다 큰 자료타입으로 바뀔 때

∎원본 데이터 그대로 보존

-자동 타입 변환 사례

2.1.17 강제 타입 변환

-강제 타입 변환 : 개발자의 의도적으로 타입 변환

-강제 타입 변환 방법

Page 32: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 329 -

∎강제 타입 변환 사례

• 실수타입이 정수타입으로 강제 변환 시 소수점 아래가 버려짐(데이터의 손실)

2.1.18 byte 타입이 int 타입으로 자동 변환되는 사례

2.1.19 int에서 byte 타입으로, double 타입이 int 타입으로 강제 변환되는 사례

Page 33: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 330 -

-예제 2-2 : 자동 타입 변환, 강제 타입 변환

∎자동 타입 변환과 강제 타입 변환의 이해를 위한 예제이다. 다음 소스의 실행 결과는 무엇인가?

2.1.20 자바에서 키 입력, System.in

-System.in

∎자바의 표준 입력 스트림

∎java.io의 InputStream 클래스 타입

∎InputStream이 바이트 스트림이므로 문자 스트림으로 변환하려면 InputStreamReader 클

래스를 이용

∎입력 동안 IOException이 발생가능, 예외 처리 필요(3장 참조)

-예제 2-3 : 표준 입력 스트림을 이용한 키 입력

∎다음 소스의 실행 결과는 무엇인가?

System.in을 InputStreamReader에 연결하여 사용자로부터 키를 입력받는다. 입력받은

Page 34: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 331 -

문자를 화면에 출력하고 사용자가 ctrl-z를 누르면 읽기가 종료된다.

2.1.21 Scanner를 이용한 키 입력

-Scanner 클래스

∎java.util.Scanner 클래스

∎Scanner 객체 생성

-import문 필요

∎소스 맨 앞줄에 사용

-Scanner에서 키 입력 받기

∎Scanner는 입력되는 키 값을 공백 (‘𝈏t’,‘ 𝈏f’,‘ 𝈏r’,‘ ’,‘ 𝈏n’)으로 구분되는 아이템 단위로 읽음

2.1.22 Scanner 주요 메소드

Page 35: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 332 -

표 2.3

-예제 2-4 : Scanner를 이용한 키 입력 연습

∎Scanner를 이용하여 나이, 체중, 신장 데이터를 키보드에서 입력 받아 다시 출력하는 프

로그램을 작성해보자.

2.1.23 식과 연산자

생성자/메소드 설명

Stringnext() 다음아이템을 찾아 문자열로 반환

booleannextBoolean()다음아이템을 찾아 boolean으로 변환하여 반환

bytenextByte() 다음아이템을 찾아 byte로 변환하여 반환

double nextDouble() 다음아이템을 찾아 double로 변환하여 반환

float nextFloat() 다음아이템을 찾아 float로 변환하여 반환

intnextInt() 다음아이템을 찾아 int로 변환하여 반환

long nextLong() 다음아이템을 찾아 long으로 변환하여 반환

short nextShort() 다음 아이템을 찾아 short로 변환하여 반환

StringnextLine() 한 라인 전체(‘\n’ 포함)를 문자열 타입으로 반환

Page 36: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 333 -

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

2.1.24 연산자 우선 순위

-같은 우선순위의 연산자

∎왼쪽에서 오른쪽으로 처리

∎예외)오른쪽에서 왼쪽으로

• 대입 연산자, --, ++, +,-(양수 음수 부호), !, 형 변환은 오른쪽에서 왼쪽으로 처리

-괄호는 최우선순위

∎괄호가 다시 괄호를 포함한 경우는 가장 안쪽의 괄호부터 먼저 처리

2.1.25 산술 연산자

-/와 % 연산자의 특이성

∎정수 연산

• /은 정수 몫. %는 정수 나머지

∎실수 연산

• /는 실수 몫. %는 몫을 정수로 구했을 때의 실수 나머지

• 5.5/3.3 = 1.6666666<------ 나머지 없는 실수 몫 값

• 5.5%3.3 = 2.2<------ 정수 몫 1를 구한 나머지 실수 몫 값(5.5-3.3 = 2.2)

• 1.6666666*3.3 + 2.2 ≠ 5.5

Page 37: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 334 -

표 2.4

-예제 2-5 : 산술 연산 예제

∎정수의 몫과 나머지를 이용하여 500초는 몇 시간, 몇 분, 몇 초인가를 구하는 프로그램을

작성하시오.

2.1.26 비트 연산자

-피 연산자의 각 비트들을 대상으로 하는 연산

표2.5

2.1.27 비트 연산자의 사례

산술 연산자 의미 예 결과값

+ 더하기 25.5 + 3.6 29.1

- 빼기 3 - 5 -2

* 곱하기 2.5 * 4 10.0

/ 나누기 5/2 2

% 나머지 5%2 1

비트 연산자 내용

a &b a와 b의 각 비트들의 AND 연산. 두 비트 모두 1일 때만 1이 되며 나머지는 0

a | b a와 b의 각 비트들의 OR 연산. 두 비트 모두 0일 때만 0이 되며 나머지는 1

a ^ b a와 b의 각 비트들의 XOR 연산. 두 비트가 서로 다르면 1, 같으면 0

~ a 단항 연산자로서, a의 각 비트들에 NOT 연산. 1을 0으로, 0을 1로 변환

Page 38: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 335 -

2.1.28 시프트 연산자

표 2.6

2.1.29 시프트 연산자의 사례

2.1.30 Tip: 산술적 시프트와 논리적 시프트

시프트 연산자 내용

a >>b

a의 각 비트를 오른쪽으로 b 번 시프트한다.

최상위 비트의 빈자리는 시프트 전의 최상위 비트로 다시 채운다.

산술적 오른쪽 시프트.

a >>>b

a의 각 비트를 오른쪽으로 b 번 시프트한다.

그리고 최상위 비트의 빈자리는 0으로 채운다.

논리적 오른쪽 시프트.

a <<b

a의 각 비트를 왼쪽으로 b 번 시프트한다.

그리고 최하위 비트의 빈자리는 0으로 채운다.

산술적 왼쪽 시프트.

Page 39: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 336 -

-산술적 오른쪽 시프트

∎>>는 1비트 오른쪽으로 시프트할 때마다 2로 나누기하는 결과

-산술적 왼쪽 시프트

∎<< 연산자는 1비트 시프트할 때마다 2로 곱하는 결과

∎음수(최상위 비트가 1)는 시프트 결과 최상위 비트가 0인 양수가 되는 오버플로 발생 가

능 주의

-논리적 오른쪽 시프트

∎>>>는 시프트 시 최상위 비트에 항상 0이 삽입

∎나누기의 산술적 효과가 나타나지 않음

-byte, short, char 타입의 시프트 연산 시 주의 사항

∎int 타입으로 변환되어 연산이 일어나므로 원하지 않는 결과 발생 가능

-예제 2-6 : 비트 연산자와 시프트 연산자 사용 예

∎다음 소스의 실행 결과는 무엇인가?

2.1.31 비교연산자

표 2.7

비교 연산자 내용 예제 결과

a <b a가 b보다 작으면 true 아니면 false 3 <5 true

a >b a가 b보다 크면 true 아니면 false 3 >5 false

a <= b a가 b보다 작거나 같으면 true 아니면 false 1 <= 0 false

a >= b a가 b보다 크거나 같으면 true 아니면 false 10 >= 10 true

a == b a가 b와 같으면 true 아니면 false 1 == 3 false

a != b a가 b와 같지 않으면 true 아니면 false 1 != 3 true

Page 40: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 337 -

-논리 연산자 1

표2.8

-논리 연산자 2

표 2.9

-예제 2-7 : 비교 연산자와 논리 연산자 사용하기

Page 41: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 338 -

2.1.32 대입 연산자, 증감 연산자

표 2.10

2.1.33 증감 연산자

-증감 연산의 순서

∎연산자가 피연산자 뒤에 붙는 경우

∎연산자가 피연산자 앞에 붙는 경우

-예제 2-8 : 대입 연산자와 증감 연산자 사용하기

2.1.34 조건 연산자 ?:

-opr1?opr2:opr3

∎세 개의 피연산자로 구성되어 삼항(ternary) 연산자

∎opr1이 true이면 값은 opr2, false이면 opr3.

∎조건 연산자를 활용하면 변수에 값을 대입 연산 시 조건에 따라 다른 값을 대입할 수가 있다.

∎if-else에 비행 문장이 간결해짐

Page 42: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 339 -

-예제 2-9 : 조건 연산자 사용하기

2.1.35 조건문 - if

-단순 if 문

∎if 다음의 괄호 안에는 조건식(논리형 변수나 논리 연산)

∎조건식의 값

• true인 경우, if문을 벗어나 다음 문장이 실행된다.

• false의 경우에는 if 다음의 문장이 실행되지 않고 if 문을 빠져 나온다.

∎실행문장이 단일 문장인 경우 둘러싸는 {, } 생략 가능

Page 43: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 340 -

-예제 2-10 : if문 사용하기

-조건문 – if-else

∎if-else 문

• 조건식이 true면 실행문장1 실행 후 if-else문을 벗어남

• false인 경우에 실행문장2 실행후, if-else문을 벗어남

-예제 2-11 : if-else 사용하기

Page 44: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 341 -

-조건문 – 다중 if

∎다중 if문

• 실행문장이 다시 if문 또는 if-else문을 포함

• else 문은 바로 전의 if문과 짝을 이룬다.

• 조건문이 너무 많은 경우에는 switch 문을 사용하는 것이 좋다

-예제 2-12 : 학점 매기기

-Tip: if문과 조건 연산자 ?:

∎조건 연산자 ?:는 if-else로 바꿀 수 있다.

Page 45: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 342 -

2.1.36 switch문

∎switch문은 하나의 식에 대해 결과값만 비교할 수 있다.

• case문의 비교 값은 정수형 또는 enum만이 될 수 있다.

∎비교값과 일치하면 해당 case문의 실행문장 수행. break를 만나면 switch문을 벗어남

∎일치하는 비교값이 없으면 default 문 실행.

∎default문은 생략 가능

-switch문에서 벗어나기

∎switch문 내의 break문

• break 문장을 만나면 switch문을 벗어나도록 지시

• 만일 case 문에 break문이 없다면 다음 case문의 실행문장으로 실행을 계속하게 되며

언젠가 break를 만날 때까지 계속 내려감

Page 46: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 343 -

-예제 2-13 : switch문의 break 사용하기

2.1.37 case문의 값

-case문의 값의 특징

∎switch문은 식의 결과 값을 case 문과 비교

∎case문에 지정하는 비교 값은 정수 타입 리터럴 만 될 수 있음

-예제 2-14 : 성적 분류

Page 47: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 344 -

제3장 반복문, 배열, 예외처리

3.1 반복문의 특징

-자바 반복문의 종류

∎for 문

∎while 문

∎do while 문

그림 3.1

3.1.1 for 문의 구성

-for문의 실행 과정을 나타내는 순서도

Page 48: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 345 -

-for문의 예시

-for문의 특이한 형태

Page 49: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 346 -

-예제 3-1 : 1부터 10까지 숫자의 합을 출력

3.1.2 while 문의 구성

-while문의 실행 과정을 나타내는 순서도

Page 50: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 347 -

-예제 3-2 : 입력된 수의 평균 구하기

3.1.3 do-while 문의 구성

Page 51: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 348 -

-do-while문의 실행 과정을 나타내는 순서도

-예제 3-3 : a-z까지 출력

3.1.4 중첩 반복

-중첩 반복

∎반복문이 다른 반복문을 내포하는 모양

∎이론적으로는 몇 번이고 중첩 반복 가능

∎너무 많은 중첩 반복은 프로그램 구조를 복잡하게 하므로 보통 2중 또는 3중 반복 정도가 적당

Page 52: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 349 -

-예제 3-4 : 구구단

3.1.5 continue문

-continue 문

∎반복문을 빠져 나가지 않으면서 특정 값에 대해 반복문 내의 실행문을 건너 뛸 때 사용

-예제 3-5 : 1부터 100까지 짝수의 합

for문을 사용하여 1부터 100까지 짝수의 합을 구해보자.

Page 53: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 350 -

3.1.6 break문

-break 문

∎반복문을 완전히 빠져 나갈 때 사용

∎break문은 하나의 반복문만 벗어남

• 중첩 반복의 경우 안쪽 반복문이 break 문을 포함하고 있으면 안쪽 반복문만 벗어남

-예제 3-6 : 입력된 숫자 개수 세기

∎while문과 break문을 사용하여 -1이 입력될 때까지 입력된 숫자의 개수를 출력하시오.

-Tip: 라벨로 분기

-라벨

∎continue문과 break문은 특정 라벨의 위치로 바로 분기 가능

∎continue에서 라벨은 주로 중첩 반복(nested loop)에서 바깥의 반복문으로 빠져 나갈 때 사용

∎break에서 라벨을 적으면 바로 라벨이 붙은 반복문을 벗어나게 되므로 중첩 반복문을 한

번에 벗어날 때 사용

3.2 배열이란?

3.2.1 배열(array)

∎인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조

∎배열에는 같은 종류의 데이터들이 순차적으로 저장하는 공간

∎인덱스는 0부터 시작

∎인덱스는 배열의 시작 위치에서부터 데이터가 저장되어 있는 상대적인 위치

∎배열을 이용하면 한 번에 많은 메모리 공간 선언 가능

∎배열은 같은 데이터 타입들이 순차적으로 저장되어 있어 반복문을 이용하여 처리하기에

가장 적합한 자료 구조

Page 54: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 351 -

3.2.2. 자바 배열의 필요성과 모양

3.2.3 일차원 배열의 선언

∎배열 선언과 배열 생성의 두 단계 필요

∎배열 선언

-배열 생성

∎선언과 초기화

• 배열이 생성되면서 원소의 값이 초기화됨

3.2.4 배열 선언과 생성의 차이

Page 55: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 352 -

3.2.5. 배열을 초기화하면서 생성한 결과

-배열 참조

3.2.6 배열 접근 방법

-배열 원소 접근

∎반드시 배열 생성 후 접근

∎배열 변수명과 [] 사이에 원소의 인덱스를 적어 접근

∎배열의 인덱스는 0부터 시작

∎배열의 마지막 항목의 인덱스는 (배열 크기 – 1)

-예제 3-7 : 배열에 입력받은 수 중 제일큰수 찾기

Page 56: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 353 -

3.2.7 배열의 크기와 인덱스

-인덱스

∎인덱스는 0부터 시작하며 마지막 인덱스는 (배열 크기 -1)이다.

∎인덱스는 정수 타입만 가능

-배열의 크기

∎배열의 크기는 배열 레퍼런스 변수를 선언할 때 결정되지 않음

∎배열의 크기는 배열 생성 시에 결정되며, 나중에 바꿀 수 없다.

∎배열의 크기는 배열의 length라는 필드에 저장되어 있다.

3.2.8.배열은 객체로 관리

-예제 3-8 : 배열 원소의 평균 구하기

Page 57: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 354 -

3.2.9 2차원 배열

∎2차원 배열 선언

∎2차원 배열 생성

∎2차원 배열 선언, 생성, 초기화

3.2.10 2차원 배열의 length 필드

-2차원 배열의 length

∎i.length -> 2차원 배열의 행의 개수로서 2

∎i[n].length는 n번째 행의 열의 개수

• i[0].length -> 0번째 행의 열의 개수로서 5

• i[1].length -> 1번째 행의 열의 개수로서 역시 5

Page 58: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 355 -

-예제 3-9 : 3년간 매출 총액과 평균 구하기

3.2.11 비정방형 배열

-정방형 배열

∎각 행의 열의 개수가 같은 배열

-비정방병 배열

∎각 행의 열의 개수가 다른 배열

∎비정방형 배열의 생성

3.2.12 비정방형 배열의 length

-비정방형 배열의 length

Page 59: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 356 -

∎i.length -> 2차원 배열의 행의 개수로서 4

∎i[n].length는 n번째 행의 열의 개수

• i[0].length -> 0번째 행의 열의 개수로서 1

• i[1].length -> 1번째 행의 열의 개수로서 2

• i[2].length -> 2번째 행의 열의 개수로서 3

• i[3].length -> 3번째 행의 열의 개수로서 4

-예제 3-10 : 비 정방형 배열의 생성과 접근

3.2.13 메소드에서 배열 리턴

-메소드가 리턴하는 배열

∎메소드가 리턴하는 배열의 타입과 차원은 리턴받는 배열 레퍼런스의 타입과 차원에 일치

해야 함

∎리턴 타입에 배열의 크기를 지정하지 않음

-예제 3-11 : 배열 리턴 예제

∎배열을 생성하고 각 원소 값을 출력하는 프로그램을 작성하시오. 배열 생성은 배열을 생

Page 60: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 357 -

성하여 각 원소의 인덱스 값으로 초기화하여 반환하는 메소드를 이용한다.

3.2.14 main() 메소드

-main()의 메소드 특징

∎자바 응용프로그램은 main()에서 부터 시작

∎public 속성

∎static 속성

∎리턴 타입은 void

∎인자는 문자열 배열(String [])로 전달

3.2.15 main(string [] args) 메소드의 인자 전달

-이클립스에서 main() 메소드의 인자전달

Page 61: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 358 -

∎Run 메뉴의 Run Configurations 항목에서 main() 메소드의 인자를 나열

그림 3.2

-main()의 인자 이용 예

그림3.3

-예제 3-12 : main()의 인자들을 받아서 평균값을 계산하는 예제

∎실수를 main() 메소드 인자로 전달받아 평균값을 구하는 프로그램을 작성하시오.

3.3 자바의 예외 처리

3.3.1. 예외(Exception)

-실행 중 발생하는 에러는 컴파일러가 알 수 없다.

-실행 중 에러 발생 시 예외를 발생시켜 예외 처리함

∎예외를 처리하지 않으면 예외가 발생한 프로그램은 강제 종료

Page 62: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 359 -

3.3.2 try-catch-finally문

-예외 처리문

∎try-catch-finally문 사용

∎finally는 생략 가능

3.3.3 예외가 발생한 경우와 예외가 발생하지 않은 경우 실행 과정

3.3.4 자주 발생하는 예외

표 3.1

예외 예외가 발생할 때

ArithmeticException 정수를 0으로 나눌 때 발생

NullPointerException Null 레퍼런스 참조할 때 발생

Page 63: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 360 -

-예제 3-13 : 두 정수의 나눗셈에서 ArithmeticException을 처리하도록 수정된 예

∎try-catch문을 이용하여 정수를 0으로 나누려고 할 때 "0으로 나룰 수 없습니다."라는 경

고 메시지를 출력하도록 프로그램을 작성하시오.

그림 3.4

-예제 3-13 : 범위를 벗어난 배열의 접근

∎배열의 인덱스가 범위를 벗어날 때 발생하는 ArrayIndexOutOfBoundsException을 처리

하는 프로그램을 작성하시오.

ClassCastException 변환할 수 없는 타입으로 객체를 변환할 때 발생

OutOfMemoryException 메모리가 부족한 경우 발생

ArrayIndexOutOfBoundsException 배열의 범위를 벗어난 접근 시 발생

IllegalArgumentException 잘못된 인자 전달 시 발생

IOException 입출력 동작 실패 또는 인터럽트 시 발생

NumberFormatException 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫

자로 변환 시 발생

Page 64: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 361 -

-예제 3-15 : 정수가 아닌 문자열을 정수로 변환할 때 예외 발생

∎문자열을 정수로 변환할 때 발생하는 NumberFormatException을 처리하는 프로그램을

작성하라.

제4장 클래스와 객체

4.1 객체지향적 언어의 목적

4.1.1 소프트웨어의 생산성을 향상

-소프트웨어의 생산성을 향상

∎컴퓨터 산업 발전에 따라 소프트웨어의생명 주기(life cycle) 단축

∎객체 지향적 언어는 상속, 다형성, 객체, 캡슐화 등 소프트웨어의 재사용을 위한 여러 장

치를 내장

Page 65: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 362 -

∎소프트웨어의 재사용과 부분 수정을 통해 소프트웨어를 다시 만드는 부담을 대폭 줄임으

로써 소프트웨어의 생산성이 향상

-실세계에 대한 쉬운 모델링

∎과거

• 소프트웨어는 수학 계산/통계 처리를 하는 등의 처리 과정, 계산 절차가 중요

∎현대

• 컴퓨터가 산업 전반에 활용됨에 따라 실세계에서 발생하는 일을 프로그래밍

∎실세계의 일의 특징

• 절차나 과정보다 일과 관련된 많은 물체(객체)들의 상호 작용으로 묘사하는 것이 이해

가 용이

∎실세계의 일을 보다 쉽게 프로그래밍하기 위한 객체 중심의 객체 지향적 언어 탄생

4.1.2 절차 지향적 프로그래밍과 객체 지향적 프로그래밍

-절차지향적 프로그래밍

∎기존의 프로그래밍 언어

∎작업 순서를 표현하는 컴퓨터 명령 집합

-객체지향적 프로그래밍

∎프로그램을 실제 세상에 가깝게 모델링

∎컴퓨터가 수행하는 작업을 객체들간의 상호 작용으로 표현

4.1.3 객체 지향 언어의 특성 : 캡슐화

-캡슐화

∎메소드(함수)와 데이터를 클래스 내에 정의하고 구현

∎외부에서는 공개된 메소드의 인터페이스만을 접근할 있음

• 외부에서는 비공개 데이터에 직접 접근하거나 메소드의 구현 세부를 알 수 없다.

∎객체 내 데이터에 대한 보안, 보호, 외부 접근 제한 -> 정보 은닉화

Page 66: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 363 -

그림 4.1

4.1.4 객체 지향의 특성 : 상속

4.1.5 객체지향 언어에서의 상속

-상속 : 상위 클래스의 특성을 하위 클래스가 물려받음

∎상위 클래스 : 수퍼 클래스, 하위 클래스 : 서브 클래스

-서브 클래스

∎수퍼 클래스 코드의 재사용

∎새로운 특성 추가 가능

-자바는 다중 상속을 지원 않음

∎인터페이스를 통해 다중 상속과 같은 효과 얻음

Page 67: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 364 -

4.1.6 객체 지향의 특성 : 다형성

-다형성

∎같은 메시지 또는 함수에서 객체에 따라서 다른 동작 가능함

∎다형성은 오버라이딩과 밀접한 관계가 있음

그림 4.2

4.1.7 클래스와 객체

-클래스

∎객체의 공통된 특징을 기술한 것

∎객체의 특성과 행위를 정의

-객체

∎물리적 공간을 갖는 구체적인 것, 실체

∎클래스의 인스턴스(실체)

• 클래스를 구체화한 객체를 인스턴스(instance)라고 부름

• 객체와 인스턴스는 같은 뜻으로 사용

-사례

∎클래스: 소나타자동차, 객체: 출고된 실제 소나타 100대

∎클래스: 벽시계, 객체: 우리집 벽에 걸린 벽시계들

∎클래스: 책상, 객체: 우리가 사용중인 실제 책상들

4.1.8 클래스와 객체와의 관계

그림 4.3

Page 68: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 365 -

4.1.9 사람을 사례로 든 클래스와 객체 사례

그림 4.4

4.1.10 클래스 구성

4.1.11 클래스 선언

-클래스 접근 권한, public

∎public 접근 권한은 다른 모든 클래스들이 이 클래스에 대해 사용 혹은 접근이 가능함을

의미

-class Person

∎Person이라는 이름의 클래스 정의

∎class 다음에 클래스의 이름을 선언

∎클래스는 {로 시작하여 }로 닫으며 이곳에 모든 멤버 필드와 메소드를 구현

-필드(field)

Page 69: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 366 -

∎값을 저장할 맴버 변수를 선언

∎멤버 변수 혹은 필드라고 함

∎필드 앞에 붙은 접근 지정자 public은 이 필드가 다른 클래스에서 접근될 수 있도록 공개

한다는 의미

-생성자(constructor)

∎클래스의 이름과 동일한 메소드

∎클래스의 객체가 생성될 때만 호출되는 메소드

-메소드(method)

∎메소드는 실행 가능한 함수이며 객체의 행위를 구현

∎메소드 앞에 붙은 접근 지정자 public은 이 메소드가 다른 클래스에서 접근될 수 있도록

공개한다는 의미

4.1.12 객체 생성

-객체 생성

∎객체는 new 키워드를 이용하여 생성

new는 객체의 생성자 호출

-객체를 생성하는 두 단계

∎객체에 대한 레퍼런스 변수 선언

∎객체 생성

4.1.13 객체 생성 및 사용 예

Page 70: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 367 -

4.1.14 객체의 활용

-객체의 멤버 접근

-예제 4-1 : 상품 하나를 표현하는 클래스 Goods 만들기

∎상품 하나를 표현하는 클래스 Goods를 작성하라. 상품은 String 타입의 name, int 타입

의 price, numberOfStock, sold 등 네 개의 필드를 갖는다. Goods 클래스 내에 main()

메소드를 작성하여 Goods 객체를 하나 생성하고 이 객체에 대한 레퍼런스 변수 명을

camera로 하라. 그리고 나서 camera의 상품 이름(name 필드)을 “Nikon”, 값(price)을

400000, 재고 갯수(numberOfStock)를 30, 팔린 개수(sold)를 50으로 설정하라. 그리고

설정된 이들 값을 화면에 출력하라.

Page 71: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 368 -

-예제 4-2 : 지수 클래스 MyExp 만들기

∎클래스 MyExp를 작성하라. MyExp는 지수값을 표현하는 클래스로서 두 개의 정수형 멤

버 필드 base와 exp를 가진다. 23의 경우 base는 2이며, exp는 3이 된다. base와 exp

는 양의 정수만을 가지는 것으로 가정한다. 또한 MyExp는 정수값을 리턴하는

getValue()라는 멤버 메소드를 제공한다. getValue()는 base와 exp 값으로부터 지수를

계산하여 정수 값으로 리턴한다. 예를 들어 MyExp객체의 base 필드가 2이고 exp가 3이

라면 getValue()는 8을 리턴한다.

4.1.15 객체 배열

-객체 배열 생성 과정

Page 72: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 369 -

4.1.16 객체 배열 선언과 생성 사례

-예제 4-3 : 객체 배열 생성

∎java.util.Scanner 클래스를 이용하여 상품을 입력 받아 Goods 객체를 생성하고 이들을

Goods 객체 배열에 저장하라. 상품 즉 Goods 객체를 3개 입력 받으면 이들을 모두 화면

에 출력하라.

Page 73: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 370 -

4.1.17 메소드 형식

-메소드

∎메소드는 함수이며 함수 만드는 방법과 동일

∎모든 메소드는 반드시 클래스 안에 있어야 함(캡슐화 원칙)

-메소드 구성 형식

∎접근 지정자

• public. private, protected, default(접근 지정자 생략된 경우)

∎리턴 타입

• 메소드가 반환하는 결과값의 데이터 타입

∎메소드 이름, 인자, 코드

4.1.18 인자 전달 - call by value

-자바의 메소드 호출 시 인자 전달 방식

∎값에 의한 호출(call by value)

-기본 데이터 타입의 값을 전달하는 경우

∎값이 복사되어 전달

∎메소드의 매개 변수의 값이 변경되어도 호출한 인자의 값은 변경되지 않음

-객체 혹은 배열을 전달하는 경우

∎객체나 배열의 레퍼런스 만이 전달됨

• 객체 혹은 배열이 통째로 복사되어 전달되는 것이 아님

∎메소드의 매개 변수와 호출한 인자가 객체 혹은 배열을 공유

4.1.19 call by value : 기본 데이터의 값 전달 사례

Page 74: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 371 -

-call by value : 객체 전달 사례

-call by value : 배열 전달 사례

∎인자로 배열을 전달하면 배열의 레퍼런스만이 전달됨

Page 75: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 372 -

-예제 4-4 : 배열의 전달

∎char 배열을 메소드의 인자로 전달하여 배열 속의 공백(' ')문자를 ‘,’로 대치하는 프로그

램을 작성하라.

4.1.20 메소드 오버로딩

-오버로딩(Overloading)

∎한 클래스 내에서 두 개 이상의 이름이 같은 메소드 작성

• 메소드 이름이 동일하여야 한다.

• 메소드의 인자가 개수 서로 다르거나, 메소드의 인자 타입이 서로 달라야 한다.

• 메소드의 이름이 같고 인자의 개수나 타입이 모두 같은데 메소드의 리턴 타입이 다르면

메소드 오버로딩이 성립되지 않으며 컴파일 오류가 발생한다.

4.1.21 오버로딩된 메소드 호출

Page 76: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 373 -

4.1.22 this 레퍼런스

-this의 기초 개념

∎현재 객체 자기 자신을 가리킨다.

• 자기 자신에 대한 레퍼런스

• 같은 클래스 내에서 클래스 멤버, 변수를 접근할 때 객체 이름이 없으면 묵시적으로

this로 가정

-this의 필요성

∎객체의 멤버 변수와 메소드 변수의 이름이 같은 경우

∎객체 자신을 메소드에 전달 또는 반환할 때

4.1.23 다음 그림에서 id는 어떤 id인가?

4.1.24 this에 대한 이해

Page 77: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 374 -

4.1.25 객체의 치환

∎객체의 치환은 객체가 복사되는 것이 아니며 레퍼런스가 복사된다.

4.2 생성자

4.2.1.생성자

-생성자의 특징

∎생성자는 메소드

∎생성자의 이름은 클래스 이름과 동일

∎생성자는 new를 통해 객체를 생성할 때만 호출됨

∎생성자도 오버로딩 가능

∎생성자는 리턴 타입을 지정할 수 없다.

∎생성자는 하나 이상 정의되어야 함

• 개발자가 생성자를 하나도 정의하지 않으면 자동으로 기본 생성자가 정의됨

-컴파일러에 의해 자동 생성

-기본 생성자를 디폴트 생성자(default constructor)라고도 함

4.2.2 생성자 개념

그림 4.5

Page 78: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 375 -

4.2.3 생성자 정의와 생성자 호출

-예제 4-5 : 생성자 정의와 호출

∎클래스 Book을 String title, String author, int ISBN의 3개의 필드를 갖도록 정의하라.

4.2.4 기본 생성자

-기본 생성자(default constructor)

∎클래스에 생성자가 하나도 정의되지 않은 경우

∎컴파일러에 의해 자동으로 생성

• 인자 없는 생성자

• 아무 작업 없이 단순 리턴

-디폴트 생성자라고도 부름

Page 79: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 376 -

4.2.5 기본 생성자가 자동 생성되지 않는 경우

-클래스에 생성자가 하나라도 존재하면 자동으로 기본 생성자가 생성되지 않음

4.2.6 this(), 생성자에서 다른 생성자 호출

-this()

∎같은 클래스의 다른 생성자 호출 시 사용

∎생성자 내에서만 사용 가능

• 다른 메소드에서는 사용 불가

∎반드시 생성자 코드의 제일 처음에 수행

4.2.7 this() 사용 실패 예

Page 80: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 377 -

4.2.8 객체의 소멸과 가비지

-객체 소멸

∎new에 의해 생성된 객체 메모리를 자바 가상 기계에게 되돌려 주는 행위

∎가용 메모리에 포함시킴

-자바에서 객체 삭제 기능 없음

∎개발자에게는 매우 다행스러운 기능

• C/C++에서는 할당받은 객체를 개발자가 프로그램 내에서 삭제해야함

-가비지

∎객체에 대한 레퍼런스가 없어지면 객체는 가비지(garbage)가 됨

∎자바 가상 기계의 가비지 컬렉터가 가비지 메모리를 반환

4.2.9 가비지 사례

-예제 4-6 : 가비지 발생

∎다음 소스에서 언제 가비지가 발생하는지 설명하라.

4.2.10 가비지 컬렉션

-가비지 컬렉션

∎자바에서는 가비지들을 자동 회수, 가용 메모리 공간으로 이동하는 행위

∎자바 가상 기계 내에 포함된 가비지 컬렉터(garbage collector)에 의해 자동 수행

-개발자에 의한 강제 가비지 컬렉션

∎System 또는 Runtime 객체의 gc() 메소드 호출

Page 81: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 378 -

• 자바 가상 기계에 강력한 가비지 컬렉션을 요청.

• 그러나 자바 가상 기계가 가비지 컬렉션 시점을 전적으로 판단

4.2.11 접근 지정자 이해

그림 4.6

4.2.12 클래스 접근 지정자

-클래스 앞에 올 수 있는 접근 지정자

∎public 접근 지정자

-다른 모든 클래스가 접근 가능

∎접근 지정자 생략 (default 접근 지정자)

• 또는 package-private라고도 함

• 같은 패키지 내에 있는 클래스에서만 접근 가능

-다른 말로 같은 디렉토리에 있는 클래스끼리 접근 가능

4.2.13 멤버 접근 지정자

표 4.1

Page 82: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 379 -

4.2.14 접근 지정자의 이해

-예제 4-7 : 접근 지정자의 사용

∎다음의 소스를 컴파일 해보고 오류가 난 이유를 설명하고 오류를 수정하시오.

Page 83: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 380 -

-예제 4-7 결과

∎Sample 클래스의 a와 c는 각각 public, default 지정자로 선언이 되었으므로 같은 패키지

에 속한 AccessEx 클래스에서 접근이 가능

∎b는 private으로 선언이 되었으므로 AccessEx 클래스에서는 접근이 불가능

∎private 접근 지정자를 갖는 멤버는 클래스 내부에 get/set 메소드를 만들어서 접근한다.

4.2.15 Static 이해를 위한 그림

-눈은 각 사람마다 있고 공기는 모든 사람이 소유(공유)한다

Page 84: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 381 -

그림 4.7

4.2.16 static 멤버와 non-static 멤버

-non-static 멤버의 특성

∎공간적 - 멤버들은 객체마다 독립적으로 별도 존재

• 인스턴스 멤버라고도 부름

∎시간적 - 필드와 메소드는 객체 생성 후 비로소 사용 가능

∎비공유의 특성 - 멤버들은 여러 객체에 의해 공유되지 않고 배타적

-static 멤버란?

∎객체를 생성하지 않고 사용가능

∎객체마다 생기는 것이 아님

∎클래스당 하나만 생성됨

• 클래스 멤버라고도 부름

∎특성

• 공간적 특성 - static 멤버들은 클래스 당 하나만 생성.

• 시간적 특성 - static 멤버들은 클래스가 로딩될 때 공간 할당.

• 공유의 특성 - static 멤버들은 동일한 클래스의 모든 객체에 의해 공유

4.2.17 non-static 멤버와 static 멤버의 차이

표 4.2

non-static 멤버 static 멤버

선언 class Sample { class Sample {

Page 85: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 382 -

4.2.18 static 멤버를 객체의 멤버로 접근하는 사례

     intn;

     void g() {...}

}

     static int m;

     static void g() {...}

}

공간적 특성멤버는 객체마다 별도 존재.

- 인스턴스 멤버라고 부름.

멤버는 클래스 당 하나 생성

- 멤버는 객체 내부가 아닌 별도의 공간에 생성

- 클래스 멤버라고 부름

시간적 특성

객체 생성 시 함께 멤버 생성됨

- 객체가 생길 때 멤버도 생성

- 객체 생성 후 멤버 사용 가능

- 객체가 사라지면 멤버도 사라짐

클래스 로딩 시에 멤버 생성

- 객체가 생기기 전에 이미 생성

- 객체가 생기기 전에도 사용 가능

- 객체가 사라져도 멤버는 사라지지 않음

- 멤버는 프로그램이 종료될 때 사라짐

공유의 특성

동일한 클래스의 객체들에 의해 공유되지

않음.

- 멤버는 객체 내에 각각 공간 유지

동일한 클래스의 객체들에 의해 공유됨

Page 86: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 383 -

4.2.19 static 멤버를 클래스 이름으로 접근하는 사례

4.2.20 static의 활용

-전역 변수와 전역 함수를 만들 때 활용

∎자바에서의 캡슐화 원칙

• 다른 모든 클래스에서 공유하는 전역 변수나 전역 함수도 클래스 내부에만 정의

-java.lang.Math 클래스

∎JDK와 함께 배포되는 java.lang.Math 클래스

∎모든 메소드가 static으로 정의되어 다른 모든 클래스에서 사용됨

∎객체를 생성하지 않고 바로 호출할 수 있는 상수와 메소드 제공

4.2.21 static 메소드의 제약 조건

-static 메소드는 오직 static 멤버만 접근 가능

∎객체가 생성되지 않은 상황에서도 사용이 가능하므로 객체에 속한 인스턴스 메소드, 인스

턴스 변수 등 사용 불가

Page 87: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 384 -

∎인스턴스 메소드는 static 멤버들을 모두 사용 가능

-static 메소드에서는 this 키워드를 사용할 수 없음

∎객체가 생성되지 않은 상황에서도 호출이 가능하기 때문에 현재 실행 중인 객체를 가리키

는 this 레퍼런스를 사용할 수 없음

-예제 4-8 : static을 이용한 달러와 우리나라 원화 사이의 변환 예제

static 필드와 메소드를 이용하여 달러와 한국 원화 사이의 변환을 해주는 환율 계산기를

만들어 보자.

4.2.22 final

-final 클래스 - 더 이상 클래스 상속 불가능

-final 메소드 - 더 이상 오버라이딩 불가능

4.2.23 final 필드

-final 필드, 상수 정의

∎상수를 정의할 때 사용

Page 88: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 385 -

∎상수 필드는 선언 시에 초기 값을 지정하여야 한다

∎상수 필드는 한 번 정의되면 값을 변경할 수 없다

제5장 상속과 다형성

5.1 상속 (inheritance)

5.1.1 상속

∎상위 클래스의 특성 (필드, 메소드)을 하위 클래스에 물려주는 것

∎슈퍼 클래스 (superclass)

• 특성을 물려주는 상위 클래스

∎서브 클래스 (subclass)

• 특성을 물려 받는 하위 클래스

• 슈퍼 클래스에 자신만의 특성(필드, 메소드) 추가

• 슈퍼 클래스의 특성(메소드)을 수정 : 구체적으로 오버라이딩이라고 부름

∎슈퍼 클래스에서 하위 클래스로 갈 수록 구체적

• 예) 폰 -> 모바일폰 -> 뮤직폰

∎상속을 통해 서브 클래스의 간결한 클래스 정의

• 동일한 특성을 재정의할 필요가 없어 클래스 정의가 간결해짐

-상속 관계 예

Page 89: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 386 -

-상속의 필요성

-클래스 상속과 객체

∎상속 선언

-자바 상속의 특징

∎다중 상속 지원하지 않는다

• 다수 개의 클래스를 상속받지 못한다.

∎상속의 횟수에 제한을 두지 않는다

∎계층구조의 최상위에 있는 클래스는 java.lang.Object 클래스이다.

• 모든 클래스는 자동으로 java.lang.Object를 상속받는다.

Page 90: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 387 -

-예제 5-1 : 클래스 상속 만들어 보기

∎(x,y)의 한 점을 표현하는 Point 클래스와 이를 상속받아 컬러 점을 표현하는 ColorPoint

클래스를 만들어보자.

5.1.2 자바의 클래스 계층 구조

-자바에서는 모든 클래스는 반드시 java.lang.Object 클래스를 자동으로 상속받는다.

5.1.3 서브 클래스의 객체와 멤버 사용

-서브 클래스의 객체와 멤버 접근

Page 91: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 388 -

∎서브 클래스의 객체는 슈퍼 클래스의 멤버도 포함

∎슈퍼 클래스의 private 멤버는 상속되지 않음

• 서브 클래스에서 직접 접근 불가

• 슈퍼 클래스의 prviate 멤버는 슈퍼 클래스의 메소드를 통해서만 접근 가능

∎서브 클래스 객체에 슈퍼 클래스 멤버가 포함되므로 슈퍼 클래스 멤버의 접근은 서브 클

래스 멤버 접근과 동일

-서브 클래스의 객체 멤버 접근

Page 92: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 389 -

5.1.4 상속과 접근 지정자

-자바의 접근 지정자 4 가지

∎public, protected, default, private

• 상속 관계에서 주의할 접근 지정자는 private와 protected

-private 멤버

∎슈퍼 클래스의 private 멤버는 서브 클래스 포함하여 모든 클래스에서 접근 불허

-protected 멤버

∎같은 패키지 내의 모든 클래스는 접근

∎동일 패키지 여부와 상관없이 서브 클래스에서 슈퍼 클래스의 멤버 접근 가능

5.1.5 슈퍼 클래스 멤버의 접근 지정자

표5.1

5.1.6 같은 패키지 내 상속 관계에서 접근

default private protected public

같은 패키지의 클래스 O X O O

같은 패키지의 서브 클래스 O X O O

다른패키지의 클래스 X X X O

다른 패키지의 서브 클래스 X X O O

Page 93: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 390 -

-다른 패키지의 상속 관계에서 접근

-예제 5-2: 상속 관계에 있는 클래스 간 멤버 접근

∎클래스 Person을 아래와 같은 멤버 필드를 갖도록 선언하고 클래스 Student는 클래스

Person을 상속받아 각 멤버 필드에 값을 저장하시오. 이 예제에서 Person 클래스의

private 필드인 weight는 Student 클래스에서는 접근이 불가능하여 슈퍼 클래스인

Person의 getter와 setter를 통해서만 조작이 가능하다.

• int age;

• public String name;

• protected int height;

• private int weight;

5.1.7 서브 클래스와 슈퍼 클래스의 생성자 호출 및 실행 관계

질문 1> 서브 클래스의 인스턴스가 생성될 때 서브 클래스의 생성자와 슈퍼 클래스의 생성

자가 모두 실행되는가? 아니면 서브 클래스의 생성자만 실행되는가? 둘 다 실행된다.

질문 1> 서브 클래스의 인스턴스가 생성될 때 서브 클래스의 생성자와 슈퍼 클래스의 생성

자가 모두 실행되는가? 아니면 서브 클래스의 생성자만 실행되는가? 슈퍼 클래스의 생성자

가 먼저 실행된 후 서브 클래스의 생성자가 실행된다

-new에 의해 서브 클래스의 객체가 생성될 때

Page 94: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 391 -

∎슈퍼클래스 생성자와 서브 클래스 생성자 모두 실행됨

∎호출 순서

• 서브클래스의 생성자가 먼저 호출되고 실행되기 전 슈퍼 클래스의 생성자가 호출됨

∎실행 순서

• 슈퍼 클래스의 생성자가 먼저 실행되고 서브 클래스의 생성자 실행됨

-슈퍼클래스와 서브 클래스의 생성자간의 호출 및 실행 관계

5.1.8 서브 클래스와 슈퍼 클래스의 생성자 짝 맞추기

-슈퍼 클래스와 서브 클래스

∎각각 여러 개의 생성자 가능

-슈퍼 클래스와 서브 클래스의 생성자 사이의 짝 맞추기

∎서브클래스의 객체 생성 시, 실행 가능한 슈퍼 클래스와 서브 클래스의 생성자 조합

• 컴파일러는 서브 클래스의 생성자를 기준으로 아래 표와 같은 슈퍼 클래스의 생성자를 찾음

-경우 1, 3

• 개발자가 서브 클래스의 생성자에 슈퍼 클래스의 짝을 지정하는 방법

-경우 2, 4

-super() 키워드 이용

표5.2

경우 1 2 3 4

서브 클래스 기본 생성자기본 생성자 매개 변수를 가진 생성자매개 변수를 가진 생성자

슈퍼 클래스 기본 생성자매개 변수를 가진 생성자기본 생성자 매개 변수를 가진 생성자

Page 95: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 392 -

1: 슈퍼클래스(기본생성자),서브클래스(기본생성자)

3:서브 클래스에 매개변수 있는 생성자는 슈퍼클래스의기본생성자와 짝을 이룸

Page 96: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 393 -

5.1.9 super()

-super()

∎서브 클래스에서 명시적으로 슈퍼 클래스의 생성자를 선택 호출할 때 사용

∎사용 방식

• super(parameter);

• 인자를 이용하여 슈퍼 클래스의 적당한 생성자 호출

• 반드시 서브 클래스 생성자 코드의 제일 첫 라인에 와야 한다.

-super()를 이용한 사례

5.1.10 객체의 타입 변환

-업캐스팅(upcasting)

∎프로그램에서 이루어지는 자동 타입 변환

∎서브 클래스의 레퍼런스 값을 슈퍼 클래스 레퍼런스에 대입

• 슈퍼 클래스 레퍼런스가 서브 클래스 객체를 가리키게 되는 현상

• 객체 내에 있는 모든 멤버를 접근할 수 없고 슈퍼 클래스의 멤버만 접근 가능

Page 97: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 394 -

-업캐스팅 사례

5.1.11 객체의 타입 변환

-다운캐스팅(downcasting)

∎슈퍼 클래스 레퍼런스를 서브 클래스 레퍼런스에 대입

∎업캐스팅된 것을 다시 원래대로 되돌리는 것

∎명시적으로 타입 지정

-다운캐스팅 사례

Page 98: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 395 -

5.1.12 instanceof 연산자와 객체 구별

-업캐스팅된 레퍼런스로 객체의 진짜 타입을 구분하기 어려움

∎하나의 슈퍼 클래스는 여러 서브 클래스에 상속된다.

∎서브 클래스 객체는 업캐스팅에 의해 슈퍼 클래스 레퍼런스가 가리킬 수 있다.

-instanceof 연산자

∎instanceof를 이용하여 레퍼런스가 가리키는 객체의 정확한 진짜 타입을 식별

∎사용법

• 객체 레퍼런스 instanceof 클래스타입 --> true/false의 불린 값

그림 5.1

-instanceof 사용 예

Page 99: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 396 -

-예제 5-3 : instanceof를 이용한 객체 구별

5.1.13 메소드 오버라이딩

-메소드 오버라이딩(Method Overriding)

∎슈퍼 클래스와 서브 클래스의 메소드에서 발생

∎슈퍼 클래스의 메소드를 서브 클래스에서 재정의하는 것

• 슈퍼 클래스의 메소드 이름, 메소드 인자 타입 및 개수, 리턴 타입 등 모든 것 동일하게 정의

-이 중 하나라도 다르면 메소드 오버라이딩 실패

-슈퍼 클래스의 “메소드 무시하기”로 번역되기도 함

∎동적 바인딩 발생

∎오버라이딩된 메소드가 무조건 실행되도록 동적 바인딩 됨

5.1.14 슈퍼 클래스의 메소드를 무시하고 서브 클래스에서 새로 작성한 메소드 오버라이딩

-메소드 오버라이딩 사례

Page 100: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 397 -

5.1.15 서브 클래스 객체와 오버라이딩된 메소드 호출

-예제 5-4 : 메소드 오버라이딩 만들기

Page 101: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 398 -

-예제 실행 과정

5.1.16 메소드 오버라이딩 조건

1. 반드시 슈퍼 클래스 메소드와 동일한 이름, 동일한 호출 인자, 반환 타입을 가져야 한다.

2. 오버라이딩된 메소드의 접근 지정자는 슈퍼 클래스의 메소드의 접근 지정자 보다 좁아질

수 없다.

public > protected > private 순으로 지정 범위가 좁아진다.

3. 반환 타입만 다르면 오류

4. static, private, 또는 final 메소드는 오버라이딩 될 수 없다.

Page 102: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 399 -

-오버라이딩 활용

5.1.17 동적 바인딩

Page 103: [과목3] 자바언어 (Java Language) - ipact.kripact.kr/pds/B002-3(1).pdf · 제2장 자바 기본 프로그래밍 ... ∎데스크탑과 서버 응용 개발 ... ∎프로세스

- 400 -

5.1.18. super 키워드

-예제 5-5 : 메소드 오버라이딩

∎Person을 상속받는 Professor라는 새로운 클래스를 만들고 Professor 클래스에서

getPhone() 메소드를 재정의하라. 그리고 이 메소드에서 슈퍼 클래스의 메소드를 호출하도

록 작성하라.

5.1.19 오버라이딩 vs. 오버로딩

표 5.1