Power JJava
제1장 자바 소개
© 2009 인피니티북스 All rights reserved
자바(Java)란? ( ) (Quiz) 우리가 학습하려는 자바는 다음 중 무엇일까?
자바 섬
© 2009 인피니티북스 All rights reserved
자바에서 만들어진 커피
프로그래밍 래밍 언어
프로그램이란?
© 2009 인피니티북스 All rights reserved
컴퓨터가 이해하는 언어
© 2009 인피니티북스 All rights reserved
기계어 Q) 컴퓨터가 이해할 수 있는 언어는 어떤 것인가? A) 컴퓨터가 알아듣는 언어는 한가지이다. 즉 0과 1로 구성되어 있는 “001101110001010...”과 “001101110001010 ”과 같은 기계어이다. A) 컴퓨터는 모든 것을 0과 1로 표현하고 0과 1에 의하여 내부 스위치 회로들이 ON/OFF 상태로 변경되면서 경되 서 작 작업을 을 한다.
© 2009 인피니티북스 All rights reserved
프로그래밍 언어의 필요성 Q) 그렇다면 인간이 기계어를 사용하면 어떤가? • 기계어를 사용할 수는 있으나 이진수로 프로그램을 작성하여야 하기 때문에 아주 불편하다. 불편하다 • 프로그래밍 언어는 자연어와 기계어 중간쯤에 위치 • 컴파일러가 프로그래밍 언어를 기계어로 통역
© 2009 인피니티북스 All rights reserved
자바는 프로그래밍 언어의 일종
© 2009 인피니티북스 All rights reserved
프로그래밍 언어의 분류 • 기계어(machine language) • 어셈블리어(assembly language) • 고급 언어(high-level language): 자바, C++, C언어
기계어 어셈블리어 고급언어
컴퓨터
© 2009 인피니티북스 All rights reserved
인간
중간 점검
기계어 컴파일러 힘들어서
© 2009 인피니티북스 All rights reserved
자바란? • 패러다임(Paradigm) • 객체 지향 프로그래밍(Object-oriented), • 구조적 프로그래밍(structured) • 절차적 프로그래밍(imperative) 프로그래밍(i ti ) • 등장 • 1995 • 누가 설계하였나? • Sun Microsystems • 가장 최근 버전 • Java Standard Edition 6 (1.6.0_14) • 설계 원칙 • Static, strong, safe, nominative, manifest www.wikipedia.com참조 www.wikipedia.com참
© 2009 인피니티북스 All rights reserved
자바란? • 비슷한 언어 • Generic Java, Pizza • 자바에게 영향을 준 언어 • Objective Objective-C, C, Ada 83, Pascal, C++, C#, Eiffel, Smalltalk, Mesa, Modula-3, Generic Java • 영향을 끼친 언어 • Ada 2005, 2005 C#, C# D, D ECMAScript, ECMAScript Groovy, Groovy J#, J# PHP, PHP Scala, Scala JavaScript, Python • 운영 체제 • Cross-platform (multi-platform) • 라이센스 • GNU General Public License / Java Community Process • 웹사이트 • http://java.sun.com www.wikipedia.com참조 www.wikipedia.com참
© 2009 인피니티북스 All rights reserved
자바 가상 기계 • 자바는 다양한 컴퓨터에서 동일한 모습으로 실행이 가능하다. • (예) 자바 애플릿 • 왜 그럴까?
바로 자바 가상 기계 때문이죠
© 2009 인피니티북스 All rights reserved
자바 가상 기계 • 자바 컴파일러는 특정한 컴퓨터가 아닌 가상적인 기계(virtual machine)를 위한 코드를 생성한다.
© 2009 인피니티북스 All rights reserved
자바 플랫폼 • 플랫폼(platform)이란 프로그램이 실행되는 하드웨어나 소프트웨어 환경이다. • 일반적으로 API란 많은 유용한 기능을 제공하는 라이브러리들의 모 임이다.
© 2009 인피니티북스 All rights reserved
중간 점검 문제 바이트 코드 자바 가상 기계
특정한 컴퓨터가 아닌 중간적인 코드를 생성하고 이것을 해석하여 실행하는 구조로 되어 있기 때문이다.
© 2009 인피니티북스 All rights reserved
자바의 역사 •
1991년에 Sun에서는 제임스 고슬링(James Gosling)를 비롯한 Green 연구팀 에서는 가정용 전자 제품에 사용할 수 있는 작은 컴퓨터 언어를 설계
•
처음에 C++를 사용하여 운영 체제를 만들려고 시도하였는데 C++의 복잡도 로 인하여 실패
•
Green 프로젝트를 위한 더 나은 언어를 직접 만들게 되는데 이것이 바로 자 바. 바
•
Green 프로젝트는 Time Warner의 주문형 비디오 시스템을 개발하다가 Time Warner가 경쟁사인 실리콘 그래픽스 사를 선택하는 바람에 결국 실패
•
1993년, 그래픽 기반의 월드 와이드 웹(world wide web)이 발표되고 자바의 개발자들은 곧 이러한 웹 기반의 응용 프로그램에는 자바와 같은 기계 중립 적인 언어가 이상적이라는 것을 발견
© 2009 인피니티북스 All rights reserved
자바는 누가 만들었을까? • James Gosling
© 2009 인피니티북스 All rights reserved
자바 버전
© 2009 인피니티북스 All rights reserved
자바의 특징
© 2009 인피니티북스 All rights reserved
자바의 특징 •
단순하지만 강력하다 • 꼭 필요로 하는 기능만을 포함시키고 복잡하고 많이 쓰이지 않는 기능은 삭제 • 포인터 연산, 연산자 오버로딩, 다중 상속 등의 복잡한 기능을 삭제 • 자동 메모리 관리 기능, 멀티 스레드, 방대한 라이브러리 제공
•
객체 지향적이다. • 객체 지향은 지난 30년간의 연구를 통하여 그 가치를 입증한,, 프로그램 을 설계하는 방법론 • 기본 데이터 타입을 제외한 거의 모든 것이 객체로 표현
•
분산 환경 지원 • 네트워크상에서 동작되는 것을 기본으로 설계 • 쉽게 네트워크 관련 프로그램을 개발
© 2009 인피니티북스 All rights reserved
자바의 특징 •
견고하다 • 오류를 만들 수 있는 원인들을 제거 • (예) 포인터 개념을 삭제하였으며 컴파일시에 강력하게 데이터 타입을 검사
•
안전하다. • 바이러스, 파일의 삭제나 수정, 데이터 파괴 작업이나 컴퓨터 오류 연산 등을 방지하면서 실행되도록 설계되었다. 설계되었다
•
컴퓨터 구조에 중립적이다. • 컴퓨터 구조에 중립적인 바이트 코드로 번역 • 이러한 바이트 코드 특성 때문에 인터넷에 연결된 서로 다른 기종의 컴 퓨터에서도 자바는 실행될 수 있다.
© 2009 인피니티북스 All rights reserved
자바의 특징 •
멀티스레딩 지원 • 자바는 언어 수준에서 멀티스레딩(multithreading)을 멀티스레딩( l i h di )을 지원 • 멀티스레딩이란 많은 작업을 동시에 실행
•
동적이다(Dynamic). • 라이브러리들은 실행 파일에 영향을 끼치지 않고 자유롭게 새로운 기능 들을 추가할 수 있다. • 자바는 실행되기 직전에 라이브러리를 동적으로 링크하므로 실행할 때 변경된 라이브러리가 자동적으로 참조된다.
•
기타 장점 • 비교적 배우기 쉽고 특히 C언어를 이미 학습하였다면 더욱 쉽다. 쉽다. • 자바 웹 스타트 스타트(Java (Java Web Start) 소프트웨어를 사용하면 제작된 응용 프 로그램을 한 번의 마우스 클릭으로 실행
© 2009 인피니티북스 All rights reserved
중간 점검 바이트 코드와 자바 가상 기계 C 언어는 절차적 언어, 자바는 객체 지향 언어 여러 작업을 동시에 실행하는 것
© 2009 인피니티북스 All rights reserved
자바의 에디션
• Java SE(Standard Edition) • Java EE(Enterprise Edition) • Java ME(Micro Edition)
© 2009 인피니티북스 All rights reserved
Java SE • Java SE는 SE는 데스크탑과 서버에서 자바 애플리케이션을 개발하고 실행 할 수 있게 해주며 임베디드 환경 환경(embedded (embedded environment)과 environment)과 실시간 환경(real 환경 (real--Time environments)도 environments)도 지원
© 2009 인피니티북스 All rights reserved
Java EE • Java EE는 기업용 애플리케이션을 개발하는 데 필요한 여러 가지 도 구 및 라이브러리들을 모아 놓은 것 • 응용 서버, 웹서버, J2EE API, 엔터프라이즈 자바 빈즈(JavaBeans) 지원, 자바 서블릿 API 와 JSP 등을 포함
© 2009 인피니티북스 All rights reserved
Java ME • Java ME는 핸드폰, PDA, TV 셉톱박스, 프린터와 같은 모바일 기기나 다른 엠베디드 장치들에서 실행되는 애플리케이션을 위한 강인하고 유연한 환경을 제공
© 2009 인피니티북스 All rights reserved
자바로 만들 수 있는 것 • 자바 애플리케이션(Java application) • 독립적으로 실행될 수 있는 일반 응용 프로그램 • 자바 애플릿(Java applet) • 웹 브라우저 안에서 실행되는 작은 프로그램이다. 프로그램이다
© 2009 인피니티북스 All rights reserved
자바로 만들 수 있는 것 • 자바 서블릿(Java servlet) • 웹서버에서 동작하는 서버 모듈로서 클라이언트의 요구를 받아 서 그에 대한 처리를 한 후에, 실행 결과를 HTML 문서 형태로 클 라이언트 컴퓨터로 전송
© 2009 인피니티북스 All rights reserved
자바로 만들 수 있는 것 • HTML안에 HTML안에 자바 코드를 넣으면 웹페이지를 사용자와 상호작용하도록 만들 수 있다 있다.. JSP는 JSP는 서버에서 실행되고 결과를 사용자에게 보여준 다.
© 2009 인피니티북스 All rights reserved
자바로 만들 수 있는 것 • 자바 빈즈(Java Beans) • 자바로 작성된 컴포넌트를 자바 빈즈 빈즈(Java (Java beans)라고 beans)라고 한다 한다.. 컴 포넌트는 애플리케이션을 형성하기 위한 프로그램 빌딩 블록
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 애플릿과 서블릿을 비교하여 보자. 애플릿: 서버에서 다운로드되어서 웹 페이지 안에서 실행 서블릿: 웹 서버 안에서 사용자의 요청을 처리
2. JSP에 대하여 웹을 통하여 조사하여 보자. JavaServer Pages (JSP)는 서버 측의 자바 기술로서 클라이언트 컴퓨터의 요청에 따라서 동적으로, HTML, XML 등이 포함된 웹 페이지를 생성한다. Æ 자세한 것은 다음 기회에… 기회에
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제2장 자바 개발 도구
© 2009 인피니티북스 All rights reserved
자바를 사용하려면 무엇이 필요한가? • • • •
명칭: JDK (Java Development Kit) 설명: 자바 개발 도구 다운로드 위치: java.sun.com 비용 무료 비용:
© 2009 인피니티북스 All rights reserved
JDK와 JRE • JRE(Java Runtime Environment) • JRE는 자바 프로그램을 실행하기 위한 라이브러리, 자바 가상 기 계, 기타 컴포넌트들을 제공한다. • JDK(Java Development Kit) • JDK는 JRE에 추가로 자바 프로그램을 개발하는데 필요한 컴파일 러, 디버거와 같은 명령어행 개발 도구를 추가한 것이다. JDK = JRE + 컴파일러 + 디버거 +…
© 2009 인피니티북스 All rights reserved
다운로드
최근 버전은 JDK6.0 Update 10 최근 버전은 JDK6.0 Update 10
© 2009 인피니티북스 All rights reserved
JDK의 구조
© 2009 인피니티북스 All rights reserved
중간 점검 문제 JDK 1. 자바 프로그램을 개발하는 데 개발 도구를 ______________라고 한 다.
2. JDK와 JRE의 차이점은 무엇인가? JRE는 자바 프로그램을 실행만 시킬 수 있는 환경이고 JDK는 개발 도 할 수 있는 환경이다.
© 2009 인피니티북스 All rights reserved
자바 프로그램 개발 단계
© 2009 인피니티북스 All rights reserved
자바 프로그램 개발 단계 • 소스 파일의 생성 • 에디터를 사용 • 소스 파일은 .java 확장자 • 메모장 메모장,, 이클립스 (www.eclipse.org), 넷빈 넷빈(www.netbeans.org), (www.netbeans.org), JBuilder ((www.borland.com www.borland.com)) 사용 가능 • 컴파일 • 컴파일러로 컴파일 • 컴파일러는 자바 소스 코드를 바이트 코드로 변환 • 바이트 코드는 확장자가 .class .class로 로 끝나는 파일에 저장 • 클래스 적재 • 바이트 코드 파일을 메모리로 적재 • 네트워크를 통하여 적재될 수도 있다 있다..
© 2009 인피니티북스 All rights reserved
자바 프로그램 개발 단계 • 바이트 코드 검증 • 바이트 코드들이 이상이 없으며 자바의 보안 규칙을 위배하지 않 는지를 검사 • 실행 • 자바 가상 기계가 바이트 코드를 실행 • 가장 빈번하게 실행되는 부분 부분(HotSpot) ((HotSpot)에서는 p )에서는 JIT 컴파일러가 바 이트 코드를 실제 컴퓨터의 기계어로 직접 변환하여 빠르게 실행
© 2009 인피니티북스 All rights reserved
JDK 사용하기 • 어디에서나 컴파일러를 실행할 수 있도록 경로(path) 설정하기
© 2009 인피니티북스 All rights reserved
소스 파일 작성 • 윈도우 보조 프로그램의 메모장 사용 • 파일의 확장자는 .java로 한다.
© 2009 인피니티북스 All rights reserved
컴파일
C:\java\examples>javac Hello.java C:\java\examples>
C:\java\examples>dir ... 2009 06 05 오후 04:06 2009-06-05 04 06 454 Hello.class H ll l 2009-06-05 오후 02:53 144 Hello.java 2개 파일 598 바이트
© 2009 인피니티북스 All rights reserved
실행
C:\java\examples>java Hello 안녕하세요 자바 프로그래머 여러분! 안녕하세요. C:\java\examples>
java 명령어가 바로 “자 바 가상 기계”를 구현한 것입니다. 것입니다
© 2009 인피니티북스 All rights reserved
통합 개발 환경 • 통합 개발 환경(integrated development environment): 소스 에디터, 컴파일러, 디버거가 결합 • 비주얼 컴포넌트를 마우스로 드래그하고 드롭하여 응용 프로그램을 생성할 수 있는 비주얼 개발 도구를 포함하는 것도 있다. • (예) 이클립스(Eclipse), 넷빈(NetBeans) • 통합 개발 환경도 내부적으로는 명령어 도구들을 이용
© 2009 인피니티북스 All rights reserved
중간 점검 문제 javac 1. 컴파일하는 명령어 버전 이름은 __________이다. Hello.class 파일이 생성된다. 2. Hello.java를 컴파일하면 ________ java 3. 자바 가상 기계는 ____________ 프로그램으로 구현한다.
© 2009 인피니티북스 All rights reserved
자바 문서 참조 하기 • 자바 API 문서 • 자바 라이브러리에 대하여 설명하는 문서 • 자바 튜토리얼 • 자바 언어에 대한 강좌
© 2009 인피니티북스 All rights reserved
자바 API 문서
© 2009 인피니티북스 All rights reserved
자바 API 문서
© 2009 인피니티북스 All rights reserved
자바 튜토리얼
© 2009 인피니티북스 All rights reserved
중간 점검 문제 자바 API 1. 자바에서 제공하는 기본적인 클래스 라이브러리를 __________라고 한다. 자바 튜토리얼 2. Sun사에서 제공하는 자바 초보자를 위한 문서를 _______________라 고 한다. 3. 자바 API 문서에서 System 클래스를 찾아서 어떤 내용들이 포함되어 있는지를 조사하여 보자.
© 2009 인피니티북스 All rights reserved
System y 클래스에 대한 설명
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제3장 이클립스 사용하기
© 2009 인피니티북스 All rights reserved
자바를 위한 에디터 • TextPad • 자바, HTML, JSP, C, C++를 위한 강력한 프로그래밍 에디터 • 스펠링 검사 기능 • UltraEdit. Ult Edit • 우수한 자바 모드를 가지는 에디터 • 문법 하이라이팅 기능 • 스펠링 검사 기능
© 2009 인피니티북스 All rights reserved
자바를 위한 통합 개발 환경 • Eclipse • 다중 언어 소프트웨어 개발 도구로서 IDE 와 plug-in 으로 구성 • 자바로 작성되었다. • 자바 애플리케이션을 개발하는데 사용할수도 있다. 있다 • C, C++, COBOL, Python, Perl, PHP도 지원 • free and open source software. • NetBeans • 자바를 위한 cross-platform open source IDE • 문법 하이라이팅 기능, 코드 완결 기능 • 비주얼 디자인 도구 포함 • free f and d open source software. ft
© 2009 인피니티북스 All rights reserved
이클립스
© 2009 인피니티북스 All rights reserved
이클립스의 구조 • 여러 개의 플러그인(plug-in)으로 구성
© 2009 인피니티북스 All rights reserved
이클립스의 용도 • 이클립스의 워크벤치 기능을 포함시켜서 자신의 프로그램을 작성할 수 있다. • 자세한 내용은 웹사이트 www.eclipse.org의 기술 문서를 참조
© 2009 인피니티북스 All rights reserved
이클립스 설치
© 2009 인피니티북스 All rights reserved
이클립스 설치
© 2009 인피니티북스 All rights reserved
이클립스 실행 • 작업 공간을 물어본다 -> 자신이 사용하는 디렉토리로 변경
© 2009 인피니티북스 All rights reserved
이클립스이 첫화면
© 2009 인피니티북스 All rights reserved
이클립스의 사용 • 몇 가지의 개념을 이해하여야 한다. • 워크벤치(workbench) • 퍼스펙티브(perspective) • 뷰(view) 뷰( i )
© 2009 인피니티북스 All rights reserved
워크벤치 • 워크 벤치 == 작업 공간
© 2009 인피니티북스 All rights reserved
퍼스펙티브 • 퍼스펙티브는 특정한 자원을 가지고 특정한 작업을 수행하기 위한 기능들의 집합을 제공 • 자바 퍼스펙티브(Java Perspective))는 자바 소스 파일을 편집할 때 필요한 뷰들을 제공 • 디버그 퍼스펙티브(Debug Perspective)는 자바 프로그램을 디버 깅할 때 필요한 뷰들을 제공
© 2009 인피니티북스 All rights reserved
디버그 퍼스펙티브
© 2009 인피니티북스 All rights reserved
뷰 • 뷰는 에디터를 지원하고 파일이나 클래스, 콘솔 등의 자원들을 표시 하며 워크벤치에서 정보의 리스트나 계층 구조를 보여주는 데 사용 된다.
© 2009 인피니티북스 All rights reserved
에디터
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 이클립스에서 특정한 자원을 가지고 특정한 작업을 수행하기 위한 기 능들의 집합을 ____________이라고 한다. 2. 파일이나 클래스, 콘솔 등의 자원들을 표시하고 정보의 리스트나 계 층 구조를 보여주는데 사용되는 것을 ___________이라고 이라고 한다.
© 2009 인피니티북스 All rights reserved
간단한 프로그램의 작성 1. 2. 3. 4 4.
프로젝트의 생성 클래스 생성 소스 코드 입력 실행 컴파일은 자동으로 됩니다.
© 2009 인피니티북스 All rights reserved
프로젝트의 생성 • File->Java Project 메뉴 사용
© 2009 인피니티북스 All rights reserved
클래스의 생성 • File->New->Class 메뉴 사용
© 2009 인피니티북스 All rights reserved
소스 코드 입력
© 2009 인피니티북스 All rights reserved
프로그램의 실행 • Run->Run As->Java Application 메뉴 사용
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 사용자로부터 값을 입력받으려면 _______________클래스를 사용하 는 것이 편리하다. 2. Scanner 클래스에서 사용자로부터 정수를 입력받는 메소드의 이름은 _____________이다. 이다. 3. 자바 API 문서에서 Scanner 클래스의 메소드 중에서 앞에 next가 붙 은 메소드들을 조사하여 보자.
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제4장 자바 프로그래밍 기초
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용 • •
자바 프로그램에 대한 기초 사항을 학습 자세한 내용들은 추후에….
© 2009 인피니티북스 All rights reserved
HelloWorld.java j 프로그램
© 2009 인피니티북스 All rights reserved
주석 • 주석(comment): 프로그램에 대한 설명을 적어 넣은 것
© 2009 인피니티북스 All rights reserved
3가지 타입의 주석
© 2009 인피니티북스 All rights reserved
클래스 • 클래스(class): 객체를 만드는 설계도(추후에 학습) • 자바 프로그램은 클래스들로 구성된다.
© 2009 인피니티북스 All rights reserved
클래스 정의
• public 키워드는 Hello 클래스가 다른 클래스에서도 사용가능함을 나 타낸다.
© 2009 인피니티북스 All rights reserved
메소드 • 클래스 = 필드(변수) + 메소드(함수) • 메소드(method)는 메소드는 입력을 받아서 작업을 수행하고 결과를 내보내는 작은 기계 • 메소드는 안에 들어 있는 문장들을 차례대로 실행한 후에 작업의 결 과를 외부로 반환
© 2009 인피니티북스 All rights reserved
메소드의 정의
• • • • •
public: 누구나 이용할 수 있음 static: t ti 정적 메소드(9장 부근에서 학습) void: 반환값이 없음 Main: 메소드 이름 String args[]: 매개 변수(메소드가 외부에서 받는 데이터)
© 2009 인피니티북스 All rights reserved
용어 설명
© 2009 인피니티북스 All rights reserved
문장 • • • •
문장(statement)은 사용자가 컴퓨터에게 작업을 지시하는 단위이다. 문장들은 메소드 안에 들어 있다. 보통 프로그램의 한 줄이 하나의 문장이 된다. 문장의 끝은 항상 세미콜론(;)으로 세미콜론( )으로 끝나게 된다. 된다
… main(…) { 문장; 문장; 문장; …. }
© 2009 인피니티북스 All rights reserved
문장은 순차적으로 실행
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 자바 프로그램의 개발 단위는 ___________이다. 2. ___________은 프로그램에 대한 설명이다. 3. 입력을 받아서 작업을 수행하고 결과를 내보내는 작은 기계로 생각할 수 있는 것은 __________이다. 이다 4. 모든 자바 소스 파일의 확장자는 ___________이다.
© 2009 인피니티북스 All rights reserved
Add 예제
변수
© 2009 인피니티북스 All rights reserved
변수 • 변수(variable)란 프로그램이 사용하는 데이터를 일시적으로 저장할 목적으로 사용하는 메모리 공간
© 2009 인피니티북스 All rights reserved
변수에도 여러 가지 타입이 있다. • 변수는 타입과 이름을 가지고 있다.
© 2009 인피니티북스 All rights reserved
상수 • 상수(constant)란 그 값이 프로그램이 실행하는 동안 변하지 않는 수 • (예) 3.14, 1000, “Hello World!”
© 2009 인피니티북스 All rights reserved
변수의 초기화
© 2009 인피니티북스 All rights reserved
수식 • 수식(expression): 피연산자와 연산자로 이루어진다. • 수식의 결과값을 가진다. x = 100; y = 200; sum = x + y;
© 2009 인피니티북스 All rights reserved
대입 연산자 • 대입 연산자 == 할당 연산자 == 배정 연산자 • 변수에 값을 저장하는 연산자 • (예) x = 100;
© 2009 인피니티북스 All rights reserved
산술 연산자
© 2009 인피니티북스 All rights reserved
산술 연산의 과정 • (예) sum = x + y;
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 프로그램에서 데이터를 저장하는 공간은 ____________이다. 2. 변수에 값을 저장하는 연산을 _____________이라고 한다. 3. 실행 도중에 값이 변하지 않는 수를 ___________이라고 한다.
© 2009 인피니티북스 All rights reserved
Add2 예제 • 사용자로부터 두 개의 정수를 받아서 더하는 문제
• 사용자로부터 숫자를 받을 수 있어야 한다.
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
import p 문장 • import java.util.Scanner; // Scanner 클래스 포함
• Scanner S 클래스를 포함시키는 문장 • Scanner는 자바 클래스 라이브러리(Java Class Library)의 일종 • Scanner는 입력을 받을 때 사용
© 2009 인피니티북스 All rights reserved
객체 생성 • • • • •
input은 타입이 Scanner인 변수 new Scanner(System.in)은 ( y ) Scanner 클래스의 객체(object)를 ( j ) 생성 input은 생성된 객체를 가리킨다. 상세한 설명은 차후에…. 일단 입력을 받으려면 이 문장이 필요하다고 알아두자.
Scanner 객체 © 2009 인피니티북스 All rights reserved
사용자로부터 입력 • Scanner 객체인 input을 이용하여 사용자로부터 정수를 읽어 들이는 문장 • input을 통하여 nextInt()라고 하는 메소드를 호출하게 된다. 된다 • nextInt()에서 반환된 값은 변수 x에 대입된다. • 추후에 자세히….
10
nextInt()
Scanner 객체 © 2009 인피니티북스 All rights reserved
print() p () 출력 메소드 • println()은 문자열을 출력한 후에 줄을 바꾸는 메소드 • print()는 문자열 출력 후에 줄을 바꾸지 않는 메소드
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 자바 프로그램의 개발 단위는 ___________이다. 2. ___________은 프로그램에 대한 설명이다. 3. 입력을 받아서 작업을 수행하고 결과를 내보내는 작은 기계로 생각할 수 있는 것은 __________이다. 이다 4. 모든 자바 소스 파일의 확장자는 ___________이다.
© 2009 인피니티북스 All rights reserved
연봉 계산 문제 • 10년 동안 월급을 모두 저금할 경우, 얼마나 모을 수 있을까?
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
원의 면적 구하기 • 사용자로부터 원의 반지름을 입력받고 이 원의 면적을 구한 다음, 화 면에 출력한다.
© 2009 인피니티북스 All rights reserved
원의 면적 구하기
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 사용자가 입력하는 원화를 달러화로 계산하는 프로그램은 작성하여 보자. 달러에 대한 원화 환율(예를 들어 1달러는 1392.83원)은 실수 형 변수에 저장하고 사용자로부터는 받는 원화는 정수 변수에 저장 한다. 원화를 환율로 나누어서 사용자가 입력한 원화가 몇 달러에 해 당하는지를 계산한다.
© 2009 인피니티북스 All rights reserved
오류 • 컴파일 오류(compile-error) • 실행 오류(run-time error) • 논리 오류(logical error)
© 2009 인피니티북스 All rights reserved
컴파일 오류 • 컴파일 오류는 컴파일시에 발견되는 오류 • 문법 규칙에 따르지 않으면 구문 오류(syntax error) • 계산식에서 호환이 되지 않는 서로 다른 타입의 데이터가 포함된 계 산을 시도하는 경우에는 의미 오류(semantic error)
© 2009 인피니티북스 All rights reserved
실행 오류 • 실행 오류는 프로그램이 실행되는 도중에 발생하는 오류 • (예) 0으로 나누려고 시도 • 자바에서는 많은 실행 오류들을 예외(exception)를 사용하여 처리
© 2009 인피니티북스 All rights reserved
논리 오류 • 논리 오류는 컴파일되고 실행도 되지만 의도하지 않는 결과를 발생 하는 경우 • (예) 값이 예상과는 다르게 잘못 계산되는 경우 • 디버깅(debugging): 논리 오류를 찾고 고치는 과정
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 컴파일시에 오류가 없는데도 원하는 결과가 나오지 않는다면 _________오류가 있는 것이다. 2. 만약 실행 도중에 0으로 나누었다면 _____________오류가 발생한다.
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제5장 변수, 연산자, 수식
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용 • • • •
변수 선언 기초 자료형과 참조 자료형 각종 연산자 수식의 계산
© 2009 인피니티북스 All rights reserved
변수 • 변수(variable) : 데이터 값들이 저장되는 메모리 공간
© 2009 인피니티북스 All rights reserved
자료형 • 자료형(data type)은 자료의 타입 • 기초형과 참조형으로 나누어진다.
© 2009 인피니티북스 All rights reserved
변수의 선언과 초기화
© 2009 인피니티북스 All rights reserved
변수의 이름 • 변수의 이름은 식별자(identifier)의 일종 • 변수 이름의 규칙 • 식별자는 유니코드 문자와 숫자의 조합 • 식별자의 첫 문자는 일반적으로 유니코드 문자 • 두 번째 문자부터는 문자, 숫자, _,, $ 등이 가능하다. • 대문자와 소문자는 구별된다. • 식별자의 이름으로 키워드(keyword)를 사용해서는 안 된다.
© 2009 인피니티북스 All rights reserved
변수 이름의 예
© 2009 인피니티북스 All rights reserved
식별자 관례
© 2009 인피니티북스 All rights reserved
예제 한글 변수 이름도 가능합니 다.
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 변수에 새로운 값이 대입되면 기존의 값은 어떻게 되는가? 2. days와 Days는 동일한 변수인가 아닌가? 3. 다음 중에서 올바르지 않은 변수이름은? x, 8items, march09, sales sales_report, report, theProfit2009, #ofPlayer
© 2009 인피니티북스 All rights reserved
기초형
© 2009 인피니티북스 All rights reserved
정수형 • • • •
int는 32비트를 이용하여 약 -21억에서 21억 정도의 정수를 표현 long은 64비트를 이용 short는 16비트를 이용하여 -32,768에서 +32767사이의 정수를 표현 b t 는 8비트 정수로서 -128에서 byte는 128에서 +127까지의 127까지의 정수를 표현
(Q) 만약 다음과 같이 정수형의 변수에 범위를 벗어나는 값을 대입하면 어떻게 될까? byte number = 300;// 오류!! (A) 컴파일 오류가 발생한다. 발생한다
© 2009 인피니티북스 All rights reserved
정수형 상수 • 상수 또는 리터럴 리터럴(literal) (literal)이란 이란,, x = 100;에서 100;에서 100 100과 과 같이 소스 코드에 쓰여 있는 값 • 여러 진법 사용 가능 • 10진수(Decimal): 14, 16, 17 • 8진수(Octal): ( ) 016,, 018,, 019 • 16진수(hexadecimal):0xe, 0x10, 0x11
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
기호 상수 • 상수에 이름을 주어서 변수처럼 사용 final double PI = 3.141592; • 숫자보다 이해하기 쉽고, 값의 변경이 용이하다.
© 2009 인피니티북스 All rights reserved
논리형 • 논리형(boolean type)은 true 아니면 false만을 가질 수 있다.
b l boolean condition diti = true t true;
© 2009 인피니티북스 All rights reserved
실수형 • float는 32비트를 이용하여 실수를 표현 • double은 64비트를 이용하여 실수를 표현 • float는 fl t는 약 7개 정도의 유효 숫자 • double은 약 15개 정도의 유효 숫자 • 대부분의 경우에는 double을 사용하는 것이 바람직
© 2009 인피니티북스 All rights reserved
특수한 실수값 • 양의 무한대(positive infinity): 오버플로우 • 음의 무한대(negative infinity): 언더플로우 • NaN(Not a Number): 유효하지 않은 연산
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
실수형 상수
double형 상수(64비트) float형 상수(32비트) 지수표기법
© 2009 인피니티북스 All rights reserved
문자형 • 아스크 코드가 아니라 유니 코드(unicode)를 사용
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 변수가 36에서 5000정도의 값을 저장하여야 하다면 어떤 자료형이 최적인가? 2. 변수가 -3000에서 +3000까지의 값을 저장하여야 하다면 어떤 자료형 이 최적인가? 3 0 3. 0.025를 025를 지수 표기법으로 표기하여 보라. 보라 4. 어떤 리터럴(상수)이 더 많은 메모리 공간을 차지하는가? 28.9 28.9F 5. booelan 자료형이 가질 수 있는 값을 전부 쓰시오.
© 2009 인피니티북스 All rights reserved
연산자와 피연산자 • 연산자(operator)는 특정한 연산을 나타내는 기호 • 피연산자(operand)는 연산의 대상
© 2009 인피니티북스 All rights reserved
자바에서 지원하는 연산자
© 2009 인피니티북스 All rights reserved
수식 • 수식이란 상수나 변수, 함수와 같은 피연산자들과 연산자의 조합
© 2009 인피니티북스 All rights reserved
대입 연산자 • 대입 연산자(=)는 왼쪽 변수에 오른쪽 수식의 값을 계산하여 저장 • 대입 연산자 == 할당 연산자 == 배정 연산자라고도 한다. x = 10 10; // 상수 10을 변수 x에 에 대입한다. 대입한다
© 2009 인피니티북스 All rights reserved
산술 연산자
© 2009 인피니티북스 All rights reserved
1
© 2009 인피니티북스 All rights reserved
+ 연산자는 문자열을 결합
© 2009 인피니티북스 All rights reserved
단항 연산자
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
복합 대입 연산자
© 2009 인피니티북스 All rights reserved
관계 연산자
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
논리 연산자
마차 > 2대 그리고 시종 > 10명 그리고 …
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
삼항 연산자 condition ? exp1 : exp2
• condition이 참이면 exp1이 선택되고 그렇지 않으면 exp2가 선택된 다. • (예) max_value = (x > y) x : y;// 최대값 계산
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 다음의 각 변수의 값을 적어보라. int x = 1; int y = 1; int a = ++x * 2;// // a a의 의 값은 ___________ i t b = y++ * 2 int 2; // b의 b의 값은 ___________ 2. 다음 수식의 값을 쓰시오. 12/5 - 3 5 + 19%3
© 2009 인피니티북스 All rights reserved
연산자의 우선 순위 • 어떤 연산자를 먼저 계산할 것인가?
• 괄호 안은 먼저 계산된다.
© 2009 인피니티북스 All rights reserved
연산자의 결합 규칙 • 만약 같은 우선 순위를 가지는 연산자들이 여러 개가 있으면 어떤 것 을 먼저 수행하여야 하는가?
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1.
다음의 수식에서 연산의 순서를 적으시오.
(1) x = y = 3 / 5 * 2 % 6; (2) y = a * x * x + b * x + c;
© 2009 인피니티북스 All rights reserved
비트 연산자
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 변수 y, z, a, b의 값은? int x = 0xff0f; i t y = x << 4 int 4; int z = x >> 4; int a = x & 0xf0ff; int b = x | 0xf0ff;
© 2009 인피니티북스 All rights reserved
형변환 • 형변환(cast)는 어떤 자료형의 값을 다른 자료형의 값으로 바꾸어 주 는 연산
© 2009 인피니티북스 All rights reserved
축소 변환 • i = (int int) 12.5;// i에는 12만 저장 • (주의) 위의 예에서는 소수점 이하는 사라진다.
데이터의 일부를 잃을 수 있음
© 2009 인피니티북스 All rights reserved
확대 변환 • 더 큰 크기의 변수로 값을 이동하는 변환 • double d = (double double) 100;// 정수 100이 변수 d에 100.0으로 형변환 되어서 저장
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제6장 선택과 반복
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•조건문이란? •if 문 •if, else 문 •중첩 if 문 •switch 문 •break문 •continue문
© 2009 인피니티북스 All rights reserved
지금까지는 문장들이 순차적으로 실행된다고 하였다. 실행된다 하지만 필요에 따라서 조건이 만족되면 문장의 실행 순서를 변경할 수 있는 기능이 제공된다.
3가지의 제어 구조
© 2009 인피니티북스 All rights reserved
조건문 조건에 따라서 여러 개의 실행 경 경로 가운데 하나를 선택 문장이 실행되는 순서에 영향을 주는 문장 조건에 따라서 여러 개의 같은 처리를 반복
© 2009 인피니티북스 All rights reserved
일상 생활에서의 조건문의 예 • • • • •
만약 비가 오지 않으면 테니스를 친다. 만약 결석이 1/3이상이면 F학점을 받는다. 만약 시간이 없는 경우에는 택시를 탄다. 만약 날씨가 좋고 공휴일이면 공원에 산책을 간다. 간다 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다. 조건문은 프로그램의 흐름을 변경합니다. 변경합니다
© 2009 인피니티북스 All rights reserved
if-else 문
날씨가 좋은가? ?
거짓
참
테니스를 친다.
if( 조건식 ) 문장1; else l 문장2;
© 2009 인피니티북스 All rights reserved
공부를 한다.
조건식이 참이면 실행된다.
조건식 거짓이면 조건식이 짓 면 실행된다. 실행된
복합문 • 복합문(compound statement) • 중괄호를 사용하여 문장들을 그룹핑하는 것, • 블록(block)이라고도 한다. • 단일문 대신 들어 갈 수 있다. 있다 if(( score >= 60 ) { printf("합격입니다.\n"); printf("장학금도 printf( 장학금도 받을 수 있습니다.\n 있습니다 \n"); ); }
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
조건식이 참이면 2개의 문장이 묶여서 실행된다.
중첩 if • if 문에 다시 if 문이 포함 if( 조건식1 ) if(( 조건식2 건식 ) 문장;
© 2009 인피니티북스 All rights reserved
중첩 if if( score > 80 ) if( score > 90 ) System.out.println("당신의 학점은 A입니다."); If 문안의 문장자리에 if문이 들어간 경우
if( score > 80 ) if( score > 90 ) System.out.println("당신의 학점은 A입니다."); else System.out.println("당신의 학점은 B입니다."); If 문안 문안의 문장 문장자리에 if-else 문이 들어간 경우 © 2009 인피니티북스 All rights reserved
if와 else의 매칭 문제 else 절은 가장 가까 운 if절과 매치된다.
if(score > 80) if( score > 90) System.out.println(“당신의 학점은 A입니다”); O X else System out println(“당신의 System.out.println( 당신의 학점은 B입니다 B입니다”)) if( score > 80 ) { if( score > 90 )
만약 다른 if절과 else 절을 매치시키려면 중괄호를 사용하여 블록으로 묶는다.
System out println(("당신의 System.out.println 당신의 학점은 A입니다. A입니다 "); ); } else
System.out.println("당신의 학점은 A나 B가 아닙니다."); © 2009 인피니티북스 All rights reserved
연속적인 if
if( 조건식1 ) 문장1; 문장1 else if( 조건식2 ) 문장2; else l if( 조건식3 ) 문장3; else 문장4; © 2009 인피니티북스 All rights reserved
학점 부여 예제
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 변수 n의 값이 100보다 크거나 같으면 “large", 100보다 작으면 ”small"을 출 력하는 if-else if else 문을 작성하라. 작성하라 2. k의 값이 각각 3, 0, -1인 경우에 다음의 코드에 의하여 생성되는 출력은 무엇 인가? if( k != 0 ) System.out.println("A"); else l if( k > 3 ) System.out.println("B"); else System.out.println("C"); 3. 컵의 사이즈를 받아서 100ml미만은 small, 100ml이상 200ml미만은 medium, 200ml 이상은 large라고 출력하는 연속적인 if-else 문을 작성하시오.
© 2009 인피니티북스 All rights reserved
switch 문 • 여러 가지 경우 중에서 하나를 선택하는데 사용
© 2009 인피니티북스 All rights reserved
switch 문의 예
사용자가 1을 입력하는 경우
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. case 절에서 break 문을 생략하면 어떻게 되는가? 2. 변수 fruit의 값이 각각 1, 2, 5일 때, 다음의 코드의 출력을 쓰시오. switch(fruit) { case 1: System.out.println("사과"); b k break; case 2: System.out.println("배"); case 3: System.out.println("바나나"); y p ( 바나나 ); break; default:System.out.println("과일"); }
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용 반복 구조는 일련의 처리를 반복할 수 있게 한다. 반복의 개념을 먼저 이해하고 3가지의 반복 구조에 대하여 학습한다.
•반복의 개념 이해 •while 반복문 •do-while 반복문 •for 반복문 •break와 continue문 문
© 2009 인피니티북스 All rights reserved
반복문 Q) 반복 구조는 왜 필요한가? A) 같은 같 처리 과정을 과정 되풀이하는 되 것이 필요하기 필 때 때문이다. 학생 30명의 평균 성적을 구하려면 같은 과정을 30번 반복하여야 한다.
© 2009 인피니티북스 All rights reserved
반복문의 종류
© 2009 인피니티북스 All rights reserved
while 문 • 주어진 조건이 만족되는 동안 문장들을 반복 실행한다. while( 조건식 ) 문장;
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제 • 두수의 최대 공약수 구하기 • 유클리드 알고리즘 ① 두 수 가운데 큰 수를 x, x 작은 수를 y라 한다. 한다 ② y가 0이면 공약수는 x와 같다. ③r←x%y ④x←y ⑤y←r ⑥ 단계 ②로 되돌아간다.
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
if 문과 while 문의 비교 • if문은 while 문으로 변경할 수 있다. • while 문도 if문으로 변경할 수 있다. if( 조건 ) { ... ... }
조건이 건 만족 만족되 면 한번만 실행 된다.
while( 조건 ) { ... ... }
© 2009 인피니티북스 All rights reserved
do...while문 •
반복 조건을 루프의 끝에서 검사
do 문장 while(조건) ① 문장들이 실행된다. ② 조건식이 계산된다. ③ 결과가 참이면 ①로 돌아간 다. ④ 결과가 거짓이면 종료된다.
© 2009 인피니티북스 All rights reserved
조건이 만족되면 여러 번 반복 실 행된다.
예제
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
for 루프 • 정해진 횟수만큼 반복하는 구조
© 2009 인피니티북스 All rights reserved
for 문의 구조 for ( 초기화; 조건식; 증감식) 문장; ① 초기화를 실행한다. ② 반복 조건을 나타내는 조건식을 계산한다. ③ 수식의 값이 거짓이면 for 문의 실행이 종 료된다. ④ 수식의 값이 참이면 문장이 실행된다. ⑤ 증감을 실행하고 ②로 돌아간다.
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
팩토리얼 예제
© 2009 인피니티북스 All rights reserved
while 루프와 for 루프와의 관계
© 2009 인피니티북스 All rights reserved
중첩 반복문 • 중첩 반복문(nested loop): 반복문 안에 다른 반복문이 위치
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 다음 코드의 출력을 쓰시오. for(int i = 1; i < 5; i++) System.out.print(2 * i + " "); 2. 다음 코드의 출력을 쓰시오. for(int i = 10; i > 0; i = i - 2) S System.out.println("Student" i l ("S d " + n); ) 의 출력을 쓰시오. 시 3. 다음 코드의 for(int i = 1; i < 6; i++) for(int j = 5; j >= 1; i--) S t System.out.println(i t i tl (i + "곱하기“ "곱하기 + j + "은 ” + i*j); i*j)
© 2009 인피니티북스 All rights reserved
break 문
© 2009 인피니티북스 All rights reserved
coninue 문
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 다음 코드의 출력을 쓰시오. int n = 12; while (n > 0) { n = n - 2; 2 if( n == 6 ) break; System.out.println(n); } 2. 1번 문제에서 break를 continue로 변경하면 어떻게 되는가?
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제7장 객체지향소개
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•객체지향이란? •객체 •메시지 •클래스 •객체 지향의 장점 •String 클래스
© 2009 인피니티북스 All rights reserved
객체 지향 개념을 완벽하게 이해해야만 객체 지향 설계의 이점을 활용할 수 있다.
객체 지향이란? • 실제 세계를 모델링하여 소프트웨어를 개발하는 방법
© 2009 인피니티북스 All rights reserved
절차 지향과 객체 지향
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 객체 지향 프로그래밍은 ________들을 조합하여서 프로그램을 작성 하는 기법이다. 2 객체 지향 프로그래밍의 시작은 __________년대에 2. 년대에 개발된 ________ 언어이다.
© 2009 인피니티북스 All rights reserved
객체란? • 객체(Object)는 상태와 동작을 가지고 있다. • 객체의 상태(state)는 객체의 특징값(속성)이다. • 객체의 동작(behavior) 또는 행동은 객체가 취할 수 있는 동작
9800km
© 2009 인피니티북스 All rights reserved
중간 점검 문제
© 2009 인피니티북스 All rights reserved
메시지 • 소프트웨어 객체는 메시지(message)를 통해 다른 소프트웨어 객체 와 통신하고 서로 상호 작용한다.
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 객체들은 ________전달을 통해서 서로 간에 상호 작용을 한다. 2. 자동차 객체에서 생각할 수 있는 메시지와 매개 변수에 대하여 나열 하여 보라. 보라
© 2009 인피니티북스 All rights reserved
클래스 • 클래스(class): 객체를 만드는 설계도 • 클래스로부터 만들어지는 각각의 객체를 특별히 그 클래스의 인스턴 스(instance)라고도 한다.
© 2009 인피니티북스 All rights reserved
자동차 클래스
9800km
© 2009 인피니티북스 All rights reserved
소프트웨어 작성이 쉽다 • 부품을 구입하여 컴퓨터를 조립하듯이 소프트웨어를 작성할 수 있다.
© 2009 인피니티북스 All rights reserved
객체 지향의 장점 • • • •
신뢰성있는 소프트웨어를 쉽게 작성할 수 있다. 코드를 재사용하기 쉽다. 업그레이드가 쉽다. 디버깅이 쉽다. 쉽다
© 2009 인피니티북스 All rights reserved
코드의 재사용
© 2009 인피니티북스 All rights reserved
업그레이드가 쉽다. • 라이브러리가 업그레이드되면 쉽게 바꿀 수 있다. • 정보 은닉이 가능하기 때문에 업그레이드 가능
© 2009 인피니티북스 All rights reserved
쉬운 디버깅 • 예를 들어서 절차 지향 프로그램에서 하나의 변수를 1000개의 함수 가 사용하고 있다고 가정해보자. -> 하나의 변수를 1000개의 함수에 서 변경할 수 있다. • 객체 지향 프로그램에서 100개의 클래스가 있고 클래스당 10개의 메 소드를 가정해보자. -> 하나의 변수를 10개의 메소드에서 변경할 수 있다. 있다 • 어떤 방법이 디버깅이 쉬울까?
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 자 바 에 서 코 드 재 사 용 이 쉬 운 이 유 는 관 련 된 ________ 와 ___________이 하나의 덩어리로 묶여 있기 때문이다. 2 정보 은닉이란 ________을 2. 을 외부로부터 보호하는 것이다. 것이다 3. 정보를 은닉하면 발생하는 장점은 무엇인가?
© 2009 인피니티북스 All rights reserved
문자열 객체
String 객체
© 2009 인피니티북스 All rights reserved
클래스에서 객체를 생성하는 방법 • 단 하나의 방법만이 존재한다. • String s = new String("Hello World");
new 연산자만이 객체를 생성합니다.
© 2009 인피니티북스 All rights reserved
기초 변수와 참조 변수
© 2009 인피니티북스 All rights reserved
기초 변수와 참조 변수의 비교
© 2009 인피니티북스 All rights reserved
객체의 메소드의 호출 • String s = "Hello World!"; • int size = s.length(); // size는 12가 된다.
© 2009 인피니티북스 All rights reserved
.(도트) 연산자를 사용하여서 메소드를 호출합니다.
String g 클래스의 메소드
© 2009 인피니티북스 All rights reserved
메소드 사용의 예
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 변수를 크게 두 가지로 나누면 __________변수와 ___________변수 로 분류할 수 있다. 2. 객체를 생성하는 키워드는 ___________이다. 3 문자열은 클래스 ___________의 3. 의 객체이다. 객체이다 4. 문자열의 길이를 반환하는 메소드는 _____________이다. 5. 변수 i의 값을 문자열로 변환하는 가장 간단한 방법은 ___ 연산자를 사용하는 것이다.
© 2009 인피니티북스 All rights reserved
랩퍼 클래스 • 기초 자료형을 객체로 포장하여 주는 클래스
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제8장 클래스와 객체 I
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•클래스와 객체 •객체의 일생 •메소드 •필드 •UML
© 2009 인피니티북스 All rights reserved
직접 클래스를 작성해 봅시다.
Q QUIZ
속성 동작 1. 객체는 ________과 _________을 가지고 있다. 2. 자동차가 객체라면 클래스는 ________이다. 설계도 이다
먼저 앞장에서 학습한 클래스와 객체의 개념을 복습해봅시다.
© 2009 인피니티북스 All rights reserved
클래스의 구성
•
클래스(class)는 객체의 설계도라 할 수 있다.
•
클래스는 필드와 메소드로 이루어 진다. 진다 필드(field)는 객체의 속성을 나타 낸다. 메소드(method)는 객체의 동작을 나타낸다.
• •
© 2009 인피니티북스 All rights reserved
클래스 정의의 예 class Car { // 필드 정의 public int speed; // 속도 public int mileage; // 주행거리 public String color; // 색상 // 메소드 정의 public void speedUp() { // 속도 증가 메소드 speed += 10; }
필드 정의!
메소드 정의!
public void speedDown() { // 속도 감소 메소드 speed -= 10; }
}
public String toString() { // 객체의 상태를 문자열로 반환하는 메소드 return "속도: " + speed + " 주행거리: " + mileage + " 색상: " + color; }
© 2009 인피니티북스 All rights reserved
테스트 클래스 public class CarTest { public static void main(String[] args) { Car myCar = new Car(); // 첫번째 객체 생성 Car yourCar = new Car(); // 두번째 객체 생성 myCar.speed = 60; // 객체의 필드 변경 myCar.mileage = 0; // 객체의 필드 변경 myCar.color = "blue"; // 객체의 필드 변경 myCar.speedUp(); // 객체의 메소드 호출 System.out.println(myCar); yourCar.mileage = 10; // 객체의 필드 변경 yourCar.speed = 120; // 객체의 필드 변경 yourCar.color = "white"; // 객체의 필드 변경
}
}
yourCar.speedDown(); // 객체의 메소드 호출 System.out.println(yourCar);
© 2009 인피니티북스 All rights reserved
속도: 70 주행거리: 0 색상: blue 속도: 110 주행거리: 10 색상: white
© 2009 인피니티북스 All rights reserved
객체의 일생
Car c = new Car();
© 2009 인피니티북스 All rights reserved
c.speedUp();
c = null;
객체의 생성
© 2009 인피니티북스 All rights reserved
주의 Car
myCar;
위의 문장으로 객체가 생성되는 것은 아님!!! 객체를 가리키는 참조값을 담을 수 있는 변수만 생성됨.
© 2009 인피니티북스 All rights reserved
참조 변수와 대입 연산 • Car
car1 = new Car();
• Car
car2 = car1;
// 대입 연산의 의미
© 2009 인피니티북스 All rights reserved
객체의 사용 • 객체를 이용하여 필드와 메소드에 접근할 수 있다.
© 2009 인피니티북스 All rights reserved
객체의 소멸
객체는 참조가 없어지면 소멸!!
© 2009 인피니티북스 All rights reserved
객체의 소멸
© 2009 인피니티북스 All rights reserved
메소드
© 2009 인피니티북스 All rights reserved
매개 변수
© 2009 인피니티북스 All rights reserved
값에 의한 전달
© 2009 인피니티북스 All rights reserved
매개 변수가 객체인 경우
아주 중요!!
© 2009 인피니티북스 All rights reserved
메소드 호출
© 2009 인피니티북스 All rights reserved
메소드 호출의 예제 import java.util.*; class DiceGame { int diceFace; int userGuess; private void RollDice() { diceFace = (int)(Math. (int)(Math random() * 6) + 1; } private int getUserInput(String prompt) { System.out.println(prompt); Scanner s = new Scanner(System.in); return s.nextInt(); }
© 2009 인피니티북스 All rights reserved
메소드 호출의 예제 private void checkUserGuess() { if( diceFace == userGuess ) System.out.println("맞았습니다"); else System.out.println("틀렸습니다"); } public void startPlaying() { int userGuess = getUserInput("예상값을 입력하시오: "); RollDice(); checkUserGuess(); } } public class DiceGameTest { public static void main(String[] args) { DiceGame game = new DiceGame(); game.startPlaying(); } } © 2009 인피니티북스 All rights reserved
결과 화면 예상값을 입력하시오: 3 틀렸습니다
© 2009 인피니티북스 All rights reserved
중복 메소드 • 메소드 오버라이딩(method overriding)
• 메소드 호출시 매개 변수를 보고 일치하는 메소드가 호출된다. • 만약 square(3.14)와 s (3 14)와 같이 호출되면 컴파일러는 매개 변수의 개수, 개수 타입, 순서 등을 봐서 두 번째 메소드를 호출한다.
© 2009 인피니티북스 All rights reserved
중복 메소드 예제 class Car { // 필드 선언 private int speed; // 속도 // 중복 메소드: 정수 버전 public void setSpeed(int s) { speed = s; System out.println( System. println("정수 정수 버전 호출 호출"); ); }
}
// 중복 메소드: 실수 버전 public void setSpeed(double s) { speed = (int)s; System.out.println("실수 버전 호출"); }
© 2009 인피니티북스 All rights reserved
중복 메소드 예제 public class CarTest1 { public static void main(String[] args) { Car myCar = new Car(); // 첫번째 객체 생성
}
}
myCar.setSpeed(100); // 정수 버전 메소드 호출 myCar.setSpeed(79.2); // 실수 버전 메소드 호출
정수 버전 호출 실수 버전 호출
© 2009 인피니티북스 All rights reserved
자바에서의 변수의 종류 • 필드(field) 또는 인스턴스 변수: 클래스 안에서 선언되는 멤버 변수 • 지역 변수(local variable): 메소드나 블록 안에서 선언되는 변수 필드 Class Car { i t speed; int s d … void speedUp(int s){ int limit=100; … } }
© 2009 인피니티북스 All rights reserved
지역 변수
필드의 선언
© 2009 인피니티북스 All rights reserved
필드의 사용 범위
© 2009 인피니티북스 All rights reserved
설정자와 접근자 • 설정자(mutator) • 필드의 값을 설정하는 메소드 • setXXX() 형식 • 접근자(accessor) 접근자( ) • 필드의 값을 반환하는 메소드 • getXXX() 형식
© 2009 인피니티북스 All rights reserved
설정자와 접근자의 예
© 2009 인피니티북스 All rights reserved
설정자와 접근자의 사용
© 2009 인피니티북스 All rights reserved
설정자와 접근자는 왜 사용하는가? • 설정자에서 매개 변수를 통하여 잘못된 값이 넘어오는 경우, 이를 사 전에 차단할 수 있다. • 필요할 때마다 필드값을 계산하여 반환할 수 있다. • 접근자만을 제공하면 자동적으로 읽기만 가능한 필드를 만들 수 있 다.
© 2009 인피니티북스 All rights reserved
필드의 초기화 •
• 생성자를 사용하는 방법 ->> 다음 장에서 학습
© 2009 인피니티북스 All rights reserved
주의
© 2009 인피니티북스 All rights reserved
변수와 변수의 비교 • “변수1 == 변수2”의 의미
• 참조형 변수의 경우, 경우 객체의 내용이 같다는 의미가 아니다. 아니다
© 2009 인피니티북스 All rights reserved
UML • UML(Unified Modeling Language)
© 2009 인피니티북스 All rights reserved
클래스와 클래스의 관계
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제 class DeskLamp { // 인스턴스 변수 정의 private boolean isOn; // 켜짐이나 꺼짐과 같은 램프의 상태 // 메소드 정의 public void turnOn() // 램 램프를 를 켠다. { isOn = true; } public void turnOff() // 램프를 끈다. { isOn = false; }
}
public String toString() { return "현재 상태는 " + (isOn == true ? "켜짐" : "꺼짐"); }
© 2009 인피니티북스 All rights reserved
예제 public class DeskLampTest { public static void main(String[] args) { // 역시 객체를 생성하려면 new 예약어를 사용한다. DeskLamp myLamp = new DeskLamp(); // 객체의 메소드를 호출하려면 도트 연산자인 .을 사용한다. myLamp.turnOn(); System out println(myLamp); System.out.println(myLamp); myLamp.turnOff(); System.out.println(myLamp); } } 현재 상태는 켜짐 현재 상태는 꺼짐
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제9장 클래스와 객체 II
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•생성자 •정적 변수 •정적 메소드 •접근제어 •this •클래스간의 관계
© 2009 인피니티북스 All rights reserved
객체가 생성될 때 초기화를 담당하는 생성자에 대하여 살펴봅니다.
생성자 • 생성자(contructor): 객체가 생성될 때에 필드에게 초기값을 제공하 고 필요한 초기화 절차를 실행하는 메소드
© 2009 인피니티북스 All rights reserved
생성자의 예제
© 2009 인피니티북스 All rights reserved
생성자의 예제
© 2009 인피니티북스 All rights reserved
디폴트 생성자 • 만약 클래스 작성시에 생성자를 하나도 만들지 않는 경우에는 자동 적으로 메소드의 몸체 부분이 비어있는 생성자가 만들어진다.
© 2009 인피니티북스 All rights reserved
생성자에서 메소드 호출
© 2009 인피니티북스 All rights reserved
예제: Date 클래스
© 2009 인피니티북스 All rights reserved
예제: Date 클래스
© 2009 인피니티북스 All rights reserved
Time 클래스
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
Circle 클래스
점을 나타내는 Point 클래스를 먼저 정의
© 2009 인피니티북스 All rights reserved
Circle 클래스
© 2009 인피니티북스 All rights reserved
Circle 클래스
© 2009 인피니티북스 All rights reserved
정적 변수 • 인스턴스 변수(instance variable): 객체마다 하나씩 있는 변수 • 정적 변수(static variable): 모든 객체를 통틀어서 하나만 있는 변수
© 2009 인피니티북스 All rights reserved
정적 변수의 예
© 2009 인피니티북스 All rights reserved
정적 메소드 • 정적 메소드(static method): 객체를 생성하지 않고 사용할 수 있는 메소드 • (예) Math 클래스에 들어 있는 각종 수학 메소드 들 double value = Math.sqrt(9.0);
© 2009 인피니티북스 All rights reserved
정적 메소드의 예
© 2009 인피니티북스 All rights reserved
정적 메소드의 예
© 2009 인피니티북스 All rights reserved
상수 • 공간을 절약하기 위하여 정적 변수로 선언된다.
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 정적 변수는 어떤 경우에 사용하면 좋은가? 2. 정적 변수나 정적 메소드를 사용할 때, 클래스 이름을 통하여 접근하 는 이유는 무엇인가? 3. main() () 안에서 인스턴스 메소드를 호출할 수 없는 이유는 무엇인가?
© 2009 인피니티북스 All rights reserved
접근 제어 • 접근 제어(access control): 다른 클래스가 특정한 필드나 메소드에 접근하는 것을 제어하는 것
© 2009 인피니티북스 All rights reserved
접근 제어의 종류 • 클래스 수준에서의 접근 제어 • 멤버 수준에서의 접근 제어
© 2009 인피니티북스 All rights reserved
클래스 수준에서의 접근 제어 • public: 다른 모든 클래스가 사용할 수 있는 공용 클래스 • package: 수식자가 없으면: 같은 패키지 안에 있는 클래스들만이 사 용 패키지(package)는 관련된 클래스를 모 아둔 것
public class myClass { … }
© 2009 인피니티북스 All rights reserved
class myClass { … }
멤버 수준에서의 접근 제어
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
this • 자기 자신을 참조하는 키워드 • this.member = 10; • 생성자를 호출할 때도 사용된다. • this(10, thi (10 20) 20);
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. this의 주된 용도는 무엇인가? 2. this()와 같이 표기하면 무엇을 의미하는가??
© 2009 인피니티북스 All rights reserved
클래스와 클래스 간의 관계 • 사용(use): 하나의 클래스가 다른 클래스를 사용한다. • 집합(has-a): 하나의 클래스가 다른 클래스를 포함한다. • 상속(is-a): 하나의 클래스가 다른 클래스를 상속한다.
© 2009 인피니티북스 All rights reserved
사용 관계 • 클래스 A의 메소드에서 클래스 B의 메소드들을 호출한다.
© 2009 인피니티북스 All rights reserved
집합 관계 • 클래스 A안에 클래스 B가 포함된다.
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제10장 배열
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•배열의 선언 •배열의 사용 •배열과 메소드 •객체들의 배열 •2차원 배열 •정렬과 탐색
© 2009 인피니티북스 All rights reserved
자바에서 배열은 객체로 취급됩니다.
배열의 개념 • 배열(array): 같은 타입의 변수들의 모임
© 2009 인피니티북스 All rights reserved
배열을 만드는 절차 1. 먼저 배열 참조 변수부터 선언 int[] numbers; int // 배열 참조 변수 선언
2. 배열을 new 연산자를 사용하여서 생성 numbers = new int[6]; int // 배열 객체 생성
©2009인피니티북스 All rights reserved
배열 예제
© 2009 인피니티북스 All rights reserved
또 다른 배열 선언 방법 • int int[] [] values;// ① 자바 방식 • int values[];// ② C언어 유사 방식
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. int형의 100개의 원소를 가지고 array로 참조되는 배열을 생성하는 문장을 써라. 2 10개의 원소를 가지는 배열에서 올바른 인덱스 값의 범위는? 2. 3. 만약 배열의 인덱스가 올바르지 않으면 어떻게 되는가? 4. { 1.2, 3.1, 6.7 }의 값으로 초기화되는 double형 배열을 생성하는 문 장을 작성하시오. 작성하시오
© 2009 인피니티북스 All rights reserved
배열의 사용
© 2009 인피니티북스 All rights reserved
배열의 사용
© 2009 인피니티북스 All rights reserved
배열의 크기 for(int i=0; i < numbers.length; i++) numbers[i] = (int)(Math.random()*1000);
© 2009 인피니티북스 All rights reserved
배열의 크기는 length라는 필 필드로 알수 있습니다.
for-each 루프
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
사용자가 배열의 크기를 지정
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. int형 정수를 저장하고 있는 배열 array의 모든 원소의 값을 두배로 만드는 반복 루프를 작성하라. 2 사용자에게 배열의 크기를 받아서 double형 배열을 생성하는 문장을 2. 작성하라. 3. for-each와 전통적인 for 루프를 비교하라. 4 하나의 배열을 다른 배열로 복사하는 반복 루프를 작성하라. 4. 작성하라
© 2009 인피니티북스 All rights reserved
배열을 메소드의 매개 변수로 전달
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
메소드의 반환값으로 배열 반환
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 배열이 메소드로 전달되면 어떤 값이 전달되는 것인가? 2. 배열 원소가 전달되는 경우와 배열 전체가 전달되는 경우를 비교하여 차이점을 설명하라. 설명하라 3. int형 배열을 전달받아서 배열의 각 원소를 하나 증가시키는 메소드 를 작성하시오.
© 2009 인피니티북스 All rights reserved
객체들의 배열 • 객체들의 배열에서는 객체에 대한 참조값만을 저장 Car[] cars = new Car[5];
© 2009 인피니티북스 All rights reserved
객체들의 배열 • 각 원소에 들어가는 객체는 따로 생성하여야 한다. cars[0] = new Cars(); cars[1] = new Cars();
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 은행 계좌를 나타내는 클래스 BankAccount를 가정하자. BankAccount는 잔액만을 가지고 있다. 3개의 원소를 가지는 BankAccount의 배열을 생성하고 각 배열 원소를 BankAccount 객체 로 초기화하라. 2. 객체들의 배열을 메소드로 전달하면 무엇이 전달되는가?
© 2009 인피니티북스 All rights reserved
2차원 배열
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
2차원 배열의 초기화와 크기
© 2009 인피니티북스 All rights reserved
2차원 배열 매개 변수
© 2009 인피니티북스 All rights reserved
배열의 응용: 정렬 • 선택 정렬: 최소값을 정렬되지 않은 첫번째 원소와 교환
© 2009 인피니티북스 All rights reserved
선택 정렬 코드
© 2009 인피니티북스 All rights reserved
배열의 응용: 이진 탐색
© 2009 인피니티북스 All rights reserved
이진 탐색
© 2009 인피니티북스 All rights reserved
이진 탐색
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 선택 정렬에서 가장 작은 값은 몇 번이나 교환되는가? 2. 1024개의 원소가 있는 배열을 이진 탐색할 때 최대 몇 번의 비교가 필 요한가? 3. 순차 탐색과 이진 탐색을 비교하라. 순차 탐색이란 배열의 첫 번째 원 소부터 순차적으로 비교하여 탐색하는 알고리즘이다.
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제11장 상속
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•상속이란? •상속의 사용 •메소드 재정의 •접근 지정자 •상속과 생성자 •Object 클래스 •종단 클래스
© 2009 인피니티북스 All rights reserved
상속을 코드를 재사용하기 위한 중요한 기법입니다.
상속이란? • 상속의 개념은 현실 세계에도 존재한다.
© 2009 인피니티북스 All rights reserved
상속의 장점 • 상속의 장점 • 상속을 통하여 기존 클래스의 필드와 메소드를 재사용 • 기존 클래스의 일부 변경도 가능 • 상속을 이용하게 되면 복잡한 GUI 프로그램을 순식간에 작성 • 상속은 이미 작성된 검증된 소프트웨어를 재사용 • 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수 • 코드의 중복을 줄일 수 있다.
© 2009 인피니티북스 All rights reserved
상속 class Car { int speed; } class SportsCar extends Car { int turbo; }
상속한다는 의미
© 2009 인피니티북스 All rights reserved
수퍼 클래스는 서브 클래스를 포함
© 2009 인피니티북스 All rights reserved
상속의 예
© 2009 인피니티북스 All rights reserved
상속의 계층 구조
© 2009 인피니티북스 All rights reserved
상속은 중복을 줄인다.
상속
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 사자, 호랑이, 개, 고양이, 여우, 악어, 도마뱀들을 상속 계층 구조를 이용하여 표현하여 보자.
© 2009 인피니티북스 All rights reserved
상속의 구체적인 예
© 2009 인피니티북스 All rights reserved
상속의 예
© 2009 인피니티북스 All rights reserved
상속의 사용 • 서브 클래스는 수퍼 클래스의 필드와 메소드를 마치 자기 것처럼 사 용할 수 있다.
© 2009 인피니티북스 All rights reserved
메소드 재정의 • 메소드 재정의(method overriding): 서브 클래스가 필요에 따라 상속 된 메소드를 다시 정의하는 것
© 2009 인피니티북스 All rights reserved
메소드 재정의의 예
Animal
© 2009 인피니티북스 All rights reserved
메소드를 재정의하려면 • 메소드의 이름, 반환형, 매개 변수의 개수와 데이터 타입이 일치하여 야 한다. public class Animal { p public void makeSound() { } };
오버라이드가 아님 public class Dog extends Animal { public int makeSound() { } };
© 2009 인피니티북스 All rights reserved
중복 정의와 재정의
© 2009 인피니티북스 All rights reserved
super p 키워드
수퍼클래스 객체를 가리킨다. 가리킨다
© 2009 인피니티북스 All rights reserved
접근 지정자
© 2009 인피니티북스 All rights reserved
접근 지정자의 예
Manager
Employee
© 2009 인피니티북스 All rights reserved
접근 지정자의 예
Manager
Employee
© 2009 인피니티북스 All rights reserved
상속과 생성자
© 2009 인피니티북스 All rights reserved
묵시적인 호출
© 2009 인피니티북스 All rights reserved
Object j 클래스
© 2009 인피니티북스 All rights reserved
Object의 j 메소드
© 2009 인피니티북스 All rights reserved
equals() q () 메소드
Object의 equals()를 재정의
© 2009 인피니티북스 All rights reserved
equals() q () 메소드
재정의된 equals() q () 호출
© 2009 인피니티북스 All rights reserved
toString() g() • Object 클래스의 toString() 메소드는 객체의 문자열 표현을 반환 public class Car { private String model; public Car(String model) { this.model = model; } public String toString() { return “모델: “ + model; } }
© 2009 인피니티북스 All rights reserved
Object의 tostring()를 재정의
종단 클래스 와 종단 메소드 • 키워드 final을 붙이면 상속이나 재정의할 수 없다.
재정의할 수 없도록 한다.
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제12장 인터페이스와 다형성
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•추상 클래스 •인터페이스 •다형성 •내부클래스 •무명클래스
© 2009 인피니티북스 All rights reserved
인터페이스는 클래스와 클래스를 연결하는 기법입니다.
추상 클래스 • 추상 클래스(abstract class): 몸체가 구현되지 않은 메소드를 가지고 있는 클래스 • 추상 클래스는 추상적인 개념을 표현하는데 적당하다.
© 2009 인피니티북스 All rights reserved
추상 클래스의 예
© 2009 인피니티북스 All rights reserved
추상 클래스의 예
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 추상 클래스의 주된 용도는 무엇인가? 2. 추상 클래스는 일반 메소드를 포함할 수 있는가? 3. 추상 클래스를 상속받으면 반드시 추상 메소드를 구현하여야 하는가?
© 2009 인피니티북스 All rights reserved
인터페이스 • 인터페이스(interface): 추상 메소드들로만 이루어진다.
© 2009 인피니티북스 All rights reserved
인터페이스의 필요성 • 인터페이스는 객체와 객체 사이의 상호 작용을 위한 인터페이스이다.
© 2009 인피니티북스 All rights reserved
인터페이스의 예 • 홈 네트워킹 예제
© 2009 인피니티북스 All rights reserved
홈네트워킹 예제 인터페이스를 구현
© 2009 인피니티북스 All rights reserved
홈네트워킹 예제 Television 객체를 생성하여 메소드들을 호출
© 2009 인피니티북스 All rights reserved
인터페이스와 타입 • 인터페이스는 하나의 타입으로 간주된다.
인터페이스로 참조 변수를 만들 수 있다. 있다
© 2009 인피니티북스 All rights reserved
다중 상속 • 다중 상속이란 여러 개의 수퍼 클래스로부터 상속하는 것 • 자바에서는 다중 상속을 지원하지 않는다. • 다중 상속에는 어려운 문제가 발생한다.
© 2009 인피니티북스 All rights reserved
다중 상속 • 인터페이스를 이용하면 다중 상속의 효과를 낼 수 있다.
© 2009 인피니티북스 All rights reserved
상수 공유
상수를 공유하려면 인터페이스를 구현하면 된다.
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 인터페이스로 참조 변수를 정의할 수 있는가? 2. 인터페이스를 이용하여서 상수를 공유하는 방법에 대해서 설명하라. 3. 자바에서는 어떻게 다중 상속을 도입하지 않고서도 다중 상속의 효과 를 내는가?
© 2009 인피니티북스 All rights reserved
다형성이란?
© 2009 인피니티북스 All rights reserved
상속과 객체 참조
Shape 타입 변수로 Rectangle 객체 참조하니 객체를 참 하니 틀린 거 같지만 올바른 문장!!
Shape s = new Rectangle();// OK!
© 2009 인피니티북스 All rights reserved
왜 그럴까? • 서브 클래스 객체는 수퍼 클래스 객체를 포함하고 있기 때문이다.
© 2009 인피니티북스 All rights reserved
동적 바인딩
Shape의 draw()가 호출되는 것이 아니라 Rectangle의 draw()가 호출된다. 다 s의 의 타 타입은 Shape이지만 p 이지 s가 가 실제로 제 가리키고 있 가리키 있는 객체의 타입이 Rectangle이기 때문이다. © 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제
어떤 draw()가 어 ()가 호출되는가? 되 가
© 2009 인피니티북스 All rights reserved
다형성의 장점 • 만약 새로운 도형 클래스를 작성하여 추가한다고 해보자.
• drawAll() 메소드는 수정할 필요가 없다.
© 2009 인피니티북스 All rights reserved
객체의 실제 타입을 알아내는 방법 • instanceof 연산자를 사용한다.
© 2009 인피니티북스 All rights reserved
메소드의 매개 변수 • 메소드의 매개 변수로 수퍼 클래스 참조 변수를 이용한다. -> 다형성을 이용하는 전형적인 방법
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
형변환 • Shape s = new Rectangle(); • s를 통하여 Rectangle 클래스의 필드와 메소드를 사용하고자 할 때는 어떻게 하여야 하는가? ((Rectangle) (( g ) s).setWidth(100); ) ( );
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 수퍼 클래스 참조 변수는 서브 클래스 객체를 참조할 수 있는가? 역은 성립하는가? 2 instanceof 연산자가 하는 연산은 무엇인가? 2. 3. 다형성은 어떤 경우에 유용한가? 4. 어떤 타입의 객체라도 받을 수도 있게 하려면 메소드의 매개 변수를 어떤 타입으로 정의하는 것이 좋은가?
© 2009 인피니티북스 All rights reserved
내부 클래스 • 내부 클래스(inner class): 클래스 안에 다른 클래스를 정의
© 2009 인피니티북스 All rights reserved
내부 클래스의 사용 목적 • 특정 멤버 변수를 private로 유지하면서 자유롭게 사용할 수 있다. • 특정한 곳에서만 사용되는 클래스들을 모을 수 있다. • 보다 읽기 쉽고 유지 보수가 쉬운 코드가 된다.
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 내부 클래스와 일반 클래스의 차이점은 무엇인가? 2. 내부 클래스는 정의된 클래스의 전용 필드에 접근할 수 있는가?
© 2009 인피니티북스 All rights reserved
무명 클래스 • 무명 클래스(anonymous class): 클래스 몸체는 정의되지만 이름이 없는 클래스
부모 클래스 이름이나 인터페이스 이름
© 2009 인피니티북스 All rights reserved
무명 클래스의 예
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 무명 클래스 작성 시에 new 다음에는 적어야 하는 것은? 2. 무명 클래스를 사용하는 경우의 이점은 무엇인가? 3. Object 클래스를 상속받는 무명 클래스를 하나 정의하여 보자.
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power J Java
13ⷵ 㥸㛴【
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㢨ⶼ 㣙㜄㉐ 䚍㏩䚔 ⇨㟝
•䑜䇘㫴㢌 ᵐ⊄ •䑜䇘㫴⦐ ⱪ⏈ ⵝⷉ •䑜䇘㫴 ㇠㟝 •ὤ⸬ 䑜䇘㫴 •㡔䐬⫠䐤 䑜䇘㫴
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
䑜䇘㫴⏈ 㜤Ḵ═ 䆨⣌㏘☘㡸 ⱪ⏈ ὤⷉ㢹⏼␘.
䑜䇘㫴⢴? x 䑜䇘㫴(package) : 䆨⣌㏘☘㡸 ⱪ㡴 ᶷ x 㣄ⵈ ⢰㢨⽀⤠⫠⓸ 䑜䇘㫴⦐ Ạ㉥ x (㜼) java.net 䑜䇘㫴– ≘䏬㠀䆠 Ḵ⥜ ⢰㢨⽀⤠⫠
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
䑜䇘㫴㢌 㣙㥄 ྙ Ḵ⥜═ 䆨⣌㏘☘㡸 ㎱᷀ 䑀㙹 ྚ 㠄䚌⏈ 䆨⣌㏘☘㡸 ㎱᷀ 㵲㡸 ㍌ 㢼␘. ྛ 䑜䇘㫴⫼␘ 㢨⪸ ḩᴸ㡸 ♤⦐ ᵊὤ ⚀ⱬ㜄 ᵍ㡴 䆨⣌㏘ 㢨⪸㡸 㜠⤠ 䑜䇘㫴ᴴ ㇠㟝 ྜ 䑜䇘㫴ⷸ⦐ 㥅ἰ㜄 㥐㚱㡸 ᴴ䚔 ㍌ 㢼␘.
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
䑜䇘㫴 ㈑㉥䚌ὤ package business; public bli class l Od { Order ... }
// 䑜䇘㫴 ㉔㛬
Order ⢰⏈ 䆨⣌㏘⏈ business 䑜䇘㫴㜄 ㋁䚐␘.
Q: ⬀㚱 䑜䇘㫴 ⱬ㡸 ㇠㟝䚌㫴 㙾㡴 ᷱ㟤㜄⏈ 㛨⛯᷀ ╌⏈ᴴ? A: ♈䔨䏬 䑜䇘㫴(default package)㜄 ㋁䚌᷀ ═␘.
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
䑜䇘㫴㢌 㢨⪸ x 㢬䉤≫ ⓸⮈㢬 㢨⪸㡸 㜡㍐㡰⦐ ㇠㟝䚐␘. 㜼⪰ ☘⮨ com.company.test⢰⏈ 䑜䇘㫴 㢨⪸㡴 ⓸⮈㢬 㢨⪸ company.com㜄 ㉐㢌 test⢰⏈ 䘸⦐㥑䏬⪰ 㢌䚐␘.
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㋀㏘ 䑀㢰Ḱ 䆨⣌㏘ 䑀㢰㢌 㠸㾌 Q: ⬀㚱 䑜䇘㫴ⱬ㢨 㢼⏈ ᷱ㟤㜄 ㋀㏘ 䑀㢰Ḱ 䆨⣌㏘ 䑀㢰㢌 㠸㾌⏈? A:䑜䇘㫴 㢨⪸㢨 ♈⤽䋔⫠ᴴ ╌Ḕ Ἤ 㙸⣌㜄 㤴㣙═␘.
p package g business;; public class Order { ... }
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
䆨⣌㏘ ᷱ⦐ Q: 㟤⫠ᴴ 㐘䚽㐐䇘Ḕ 㐪㡴 䆨⣌㏘ 䑀㢰㢨 ␘⪬ ♈⤽䋔⫠㜄 㢼⏈ ᷱ㟤㜄⓸ 㐘䚽㐐䇠 ㍌ 㢼㡸ᾀ? A: 㐘䚽㢨 ᴴ⏙䚌␘. ᴴ⏙䚌␘ ␘⬀ 䆨⣌㏘ ᷱ⦐⪰ ㉘㥉䚌㜠㚰 䚐␘. 䚐␘ 㣄ⵈ ᴴㇵ ὤ᷸ᴴ 䆨⣌㏘ 䑀㢰 㡸 㵲⏈ ᷱ⦐⪰ 䆨⣌㏘ ᷱ⦐(class path)⢰Ḕ 䚐␘.
㜠✙ ⡬❬
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㩅ᴸ 㥄ᶴ ⱬ㥐 1. 䑜䇘㫴⪰ ㇠㟝䚌⏈ 㢨㥄㡴 ⱨ㛻㢬ᴴ? 2. 䑜䇘㫴 㢨⪸㡸 㬇⏈ 㢰ⵌ㤵㢬 Ḵ⥴⏈ ⱨ㛻㢬ᴴ? 3. 㢬䉤≫ ⓸⮈㢬 㢨⪸㢨 hu.ac.kr㢨⢰⮨ Ề㣙╌⏈ 䑜䇘㫴 㢨⪸㡴? 4. ⬀㚱 䑜䇘㫴㢌 㢨⪸㢨 company.project㝴 ᵍ␘⮨ ㋀㏘ 䑀㢰㢨 㤴㣙 ╌⏈ ♈⤽䋔⫠⏈? 5. ⬀㚱 Server⢰⏈ 䆨⣌㏘⪰ project.server 䑜䇘㫴⦐ ⬀☘Ḕ 㐪㡰⮨ 㛨 ⛘ ⱬ㣙㡸 Server.java㜄 㻈ᴴ䚌㜠㚰 䚌⏈ᴴ? 6. ㋀㏘ 䑀㢰Ḱ 䆨⣌㏘ 䑀㢰㡸 ⺸⫠䚌⥘⮨ 㛨⛯᷀ 䚌⮨ ╌⏈ᴴ? © 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
䑜䇘㫴⪰ ㇠㟝䚌⏈ ⵝⷉ 1. 䆨⣌㏘㜄 䑜䇘㫴 㢨⪸㡸 ⻍㜠㉐ 㵬㦤䚐␘. 2. ᵐⷸ 䆨⣌㏘⪰ import䚐␘. 3. 㤸㷨 䑜䇘㫴⪰ import䚐␘.
1. business.Order myOrder = new business.Order(); 2. import business.Order; // business 䑜䇘㫴 㙼㢌 Order 䆨⣌㏘ 䔠䚜 3. import business. business.*;
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
// 䑜䇘㫴 㤸㷨 䔠䚜
㨰㢌䚔㥄!! Q:
java awt * ⱬ㣙㡴 java.awt.font java.awt. java awt font 䑜䇘㫴⪰ 䔠䚜䚌⏈ᴴ?
java.awt.font 䑜䇘㫴⏈ java.awt 䑜䇘㫴 㙼㜄 䔠䚜╌㫴 㙾⏈␘. ⬀㚱 java.awt.font㢌 ⮘ⶸ㝴 java.awt㢌 ⮘ⶸ⪰ ┍㐐㜄 ㇠㟝䚌⥘⮨ ␘ 㢀Ḱ ᵍ㢨 ♤⦐ ♤⦐ 䔠䚜䚌㜠㚰 䚐␘. A:
iimportt java.awt.*; j t* import java.awt.font.*;
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㩅ᴸ 㥄ᶴ ⱬ㥐 1. graphics 䑜䇘㫴 㙼㜄 䔠䚜═ Rectangle㢨⢰⏈ 䆨⣌㏘⪰ ㇠㟝䚌ὤ 㠸 䚐 3ᴴ㫴㢌 ⵝⷉ㡸 ⬄䚌⢰.
2. 䑜䇘㫴 㢨⪸㡴 㛨⛯᷀ 㫴㛨㚰 䚌⏈ᴴ??
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㣄ⵈ㜄㉐ 㫴㠄䚌⏈ 䑜䇘㫴
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Java.lang g 䑜䇘㫴 x Import ⱬ㡸 ㇠㟝䚔 䙸㟈ᴴ 㛺㢨 ὤ⸬㤵㡰⦐ 䔠䚜═␘. x Object 䆨⣌㏘: ὤ㸼㤵㢬 ⮈㋀☐⪰ 㥐ḩ䚌⏈ ⯜☔ 䆨⣌㏘㢌 㦤ㇵ 䆨⣌㏘ x Math 䆨⣌㏘: ᴵ㦹 ㍌䚍 䚜㍌☘㡸 䔠䚜䚌⏈ 䆨⣌㏘ x Wrapper 䆨⣌㏘: Integer㝴 ᵍ㢨 ὤ㸼 㣄⨀䝉㡸 ᵄ㐬㉐ 㥐ḩ䚌⏈ ⣝䒰 䆨⣌㏘☘ x String g 䆨⣌㏘,, StringBuffer g 䆨⣌㏘: ⱬ㣄㜨㡸 ␘⨜⏈ 䆨⣌㏘ x System 䆨⣌㏘: 㐐㏘䊐 㥉⸨⪰ 㥐ḩ䚌ᶤ⇌ 㢹㻐⥙㡸 㥐ḩ䚌⏈ 䆨 ⣌㏘ x Thread 䆨⣌㏘: ㏘⤼☐ ὤ⏙㡸 㥐ḩ䚌⏈ 䆨⣌㏘ x Class 䆨⣌㏘: 䆨⣌㏘㜄 䚐 㥉⸨⪰ 㛯ὤ 㠸䚐 䆨⣌㏘
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Math 䆨⣌㏘
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Math 䆨⣌㏘
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㜼㥐
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Class 䆨⣌㏘ x Class ᵑ㷨⏈ 㐘䚽 㩅㢬 䆨⣌㏘⪰ ⇌䇴⇬␘. x Class ᵑ㷨⏈ 㣄ⵈ ᴴㇵ ὤ᷸㜄 㢌䚌㜠 㣄┍㤵㡰⦐ ㈑㉥═␘. x Class ᵑ㷨⪰ 㢨㟝䚌⮨ ᵑ㷨㢌 䆨⣌㏘ 㢨⪸㡸 㻐⥙䚔 ㍌ 㢼␘.
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
System y 䆨⣌㏘ x System 䆨⣌㏘⏈ 㐘䚽 㐐㏘䊐Ḱ Ḵ⥜═ ㋁㉥Ḱ ⮈㋀☐⪰ 㥐ḩ
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
System y 䆨⣌㏘
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Wrapper pp 䆨⣌㏘ x ὤ㸼 㣄⨀䝉㡸 ᵑ㷨⦐ 䔠㣙㐐䁐㨰⏈ 䆨⣌㏘ x (㜼) Integer obj = new Integer(10);
⣝䒰 䆨⣌㏘⏈ ὤ㸼 㣄⨀䝉㡸 ᵑ㷨⦐ 䔠㣙䚐 ᶷ㢹⏼␘U
10
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Integer g 䆨⣌㏘ᴴ 㥐ḩ䚌⏈ ⮈㋀☐
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
ⱬ㣄㜨 <-> ὤ㸼 㣄⨀䝉
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㝘䋔 ⵉ㐥(auto-boxing) ( g) x Wrapper ᵑ㷨㝴 ὤ㸼 㣄⨀䝉 ㇠㢨㢌 ⷴ䞌㡸 㣄┍㡰⦐ ㍌䚽䚐␘. Integer box = new Integer(10); S t System.out.println(box t i tl (b + 1) 1);
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
// box⏈ b ⏈ 㣄┍㡰⦐ int䝉㡰⦐ i t䝉㡰⦐ ⷴ䞌
StringBuffer g 䆨⣌㏘ x String 䆨⣌㏘⏈ 㨰⦐ ㇵ㍌ ⱬ㣄㜨, 㪽 ⷴᷱ㢨 ⺼ᴴ⏙䚐 ⱬ㣄㜨㡸 ⇌ 䇴⇬␘. x StringBuffer㝴 StringBuilder 䆨⣌㏘⏈ ⷴᷱ ᴴ⏙䚐 ⱬ㣄㜨㡸 ⇌䇴⇬ ␘. StringBuffer sb = new StringBuffer(); // ὤ⸬㤵㡰⦐ 16ⵈ㢨䏬㢌 ḩᴸ㢨 䚔═␘. 䚔═␘ sb.append("Hello");
// 6ⵈ㢨䏬ᴴ ㇠㟝═␘.
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
StringBuffer㢌 g ⮈㋀☐
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㩅ᴸ 㥄ᶴ ⱬ㥐 1. 㣄ⵈ㜄㉐ 㥉㍌ 10Ḱ Integer(10)㡴 㛨⛯᷀ ␘⪬ᴴ? 2. StringBuffer㝴 String㡴 㛨⛯᷀ ␘⪬ᴴ?
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
jjava.util 䑜䇘㫴 x 㜠⤠ ᴴ㫴 㡔䐬⫠䐤 䆨⣌㏘ ☘㡸 㥐ḩ䚐␘.
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Random 䆨⣌㏘
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㜼㥐
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Arrays y 䆨⣌㏘
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㜼㥐
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Date 䆨⣌㏘
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Calendar 䆨⣌㏘
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㜼㥐
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
StringTokenizer g 䆨⣌㏘ x ⱬ㣄㜨㡸 ⺸㉑䚌㜠㉐ 䋔䆤㡰⦐ ⺸⫠㐐䁐 㨰⏈ ὤ⏙㡸 㥐ḩ
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㜼㥐
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
㩅ᴸ 㥄ᶴ ⱬ㥐 1. 1㜄㉐ 1000㇠㢨㢌 ⇐㍌⪰ ⵐ㈑䚌ὤ 㠸䚐 ⱬ㣙㡸 㣅㉥䚌⢰. 2. 䜸㣠 ⇔㬐⪰ 㛯ὤ 㠸䚐 ⱬ㣙㡸 㣅㉥䚌⢰.
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Q&A
© 2009 㢬䙰⏼䐤⺵㏘ All rights reserved
Power JJava
제14장 제네릭과 컬렉션
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•제네릭 클래스 •제네릭 메소드 •컬렉션 •ArrayList •LinkedList •Set •Queue •Map •Collections 클래스
© 2009 인피니티북스 All rights reserved
일반적인 하나의 코드로 다양한 자료형을 처리하는 기법을 살펴봅시다.
제네릭이란? • 제네릭 프로그래밍(generic programming) • 일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 대하 여 재사용하는 프로그래밍 기법 • 제네릭은 컬렉션 라이브러리에 많이 사용
© 2009 인피니티북스 All rights reserved
기존의 방법 • 일반적인 객체를 처리하려면 Object 참조 변수를 사용 • Object 참조 변수는 어떤 객체이던지 참조할 수 있다. • 예제로 하나의 데이터를 저장하는 Store 클래스를 살펴보자.
© 2009 인피니티북스 All rights reserved
기존의 방법(코드) ( )
문제점 발생!! © 2009 인피니티북스 All rights reserved
제네릭을 이용한 버전
• 문자열을 저장하려면 다음과 같이 선언 • Store<String> store = new Store<String>(); • 정수를 저장하려면 다음과 같이 선언 • Store<Integer> store = new Store<Integer>();
© 2009 인피니티북스 All rights reserved
제네릭 버전의 사용
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 왜 데이터를 Object 참조형 변수에 저장하는 것이 위험할 수 있는가? 2. Store 객체에 Rectangle 객체를 저장하도록 제네릭을 이용하여 생성 하여 보라. 3 타입 매개 변수 T를 가지는 Point 클래스를 정의하여 보라. 3. 보라 Point 클 래스는 2차원 공간에서 점을 나타낸다.
© 2009 인피니티북스 All rights reserved
제네릭 메소드 • 메소드에서도 타입 매개 변수를 사용하여서 제네릭 메소드를 정의할 수 있다. • 타입 매개 변수의 범위가 메소드 내부로 제한된다.
배열의 마지막 원소를 반환하는 메소드
© 2009 인피니티북스 All rights reserved
제네릭 메소드의 사용 • String[] language= { "C++", "C#", "JAVA" }; • String last = Array.<String>getLast(language);// last는 “JAVA" • 또는 • String last = Array.getLast(language);
© 2009 인피니티북스 All rights reserved
// last는 “JAVA"
중간 점검 문제 1. 제네릭 메소드 sub()에서 매개 변수 d를 타입 매개 변수를 이용하여 서 정의하여 보라. 2 displayArray()라는 메소드는 배열을 매개 변수로 받아서 반복 루프를 2. 사용하여서 배열의 원소를 화면에 출력한다. 어떤 타입의 배열도 처 리할 수 있도록 제네릭 메소드로 정의하여 보라.
© 2009 인피니티북스 All rights reserved
컬렉션 • 컬렉션(collection)은 자바에서 자료 구조를 구현한 클래스 • 자료 구조로는 리스트(list), 스택(stack), 큐(queue), 집합(set), 해쉬 테이블(hash table) 등이 있다.
© 2009 인피니티북스 All rights reserved
자바에서의 컬렉션
컬렉션 인터페이스
컬렉션
컬렉션 클래스
© 2009 인피니티북스 All rights reserved
컬렉션 인터페이스
© 2009 인피니티북스 All rights reserved
컬렉션의 역사 • 초기 버전: Vector, Stack, HashTable, Bitset, Enumeration이 그것이 다. • 버전 1.2부터는 풍부한 컬렉션 라이브러리가 제공 • 인터페이스와 구현을 분리 • (예) List 인터페이스를 ArrayList와 LinkedList 클래스가 구현
© 2009 인피니티북스 All rights reserved
컬렉션 인터페이스
© 2009 인피니티북스 All rights reserved
인터페이스가 제공하는 메소드
© 2009 인피니티북스 All rights reserved
List 인터페이스
© 2009 인피니티북스 All rights reserved
ArrayList y • ArrayList를 배열(Array)의 향상된 버전 또는 가변 크기의 배열이라고 생각하면 된다. • ArrayList의 생성 • ArrayList<String> list = new ArrayList<String>(); • 원소 추가 • list.add(( "MILK" ); • list.add( "BREAD" ); • list.add( "BUTTER" );
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
반복자 • 반복자(iterator): 반복자는 컬렉션의 원소들을 하나씩 처리하는데 사용
© 2009 인피니티북스 All rights reserved
LinkedList • 빈번하게 삽입과 삭제가 일어나는 경우에 사용
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
배열을 리스트로 변환하기 • List<String> list = Arrays.asList(new String[size]); • 일반적인 배열을 리스트로 변환한다.
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. ArrayList와 LinkedList의 차이점은 무엇인가? 2. 어떤 경우에 LinkedList를 사용하여야 하는가?
© 2009 인피니티북스 All rights reserved
Set • 집합(Set)은 원소의 중복을 허용하지 않는다.
© 2009 인피니티북스 All rights reserved
Set 인터페이스를 구현하는 방법 • HashSet • HashSet은 해쉬 테이블에 원소를 저장하기 때문에 성능면에서 가 장 우수하다. 하지만 원소들의 순서가 일정하지 않은 단점이 있 다. • TreeSet • 레드-블랙 트리(red-black tree)에 원소를 저장한다. 따라서 값에 따라서 순서가 결정되며 하지만 HashSet보다는 느리다. • LinkedHashSet • 해쉬 테이블과 연결 리스트를 결합한 것으로 원소들의 순서는 삽 입되었던 순서와 같다.
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
대량 연산 메소드
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
Q Queue • 큐는 먼저 들어온 데이터가 먼저 나가는 자료 구조 • FIFO(First-In First-Out)
© 2009 인피니티북스 All rights reserved
Queue 인터페이스 Q
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
우선 순위큐 • 우선순위큐(priority queue): 우선순위를 가진 항목들을 저장 하는 큐 • FIFO 순서가 아니라 우선 순위가 높은 데이터가 먼저 나가게 된다. • 가장 일반적인 큐: 스택이나 FIFO 큐를 우선순위큐로 구현할 수 있다.
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
Map p • 사전과 같은 자료 구조 • 키(key)에 값(value)이 매핑된다.
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved
Power JJava
제15장 예외 처리
© 2009 인피니티북스 All rights reserved
이번 장에서 학습할 내용
•예외 처리란? •예외처리기의 개요 •예외의 종류 •예외와 메소드 •예외 생성하기
© 2009 인피니티북스 All rights reserved
예외는 오류가 발생하더라도 오류를 우아하게 처리하게 합니다.
예외란? • 예외(exception): 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의하여 발생하는 오류 • (예) 0으로 나누는 것과 같은 잘못된 연산이나 배열의 인덱스가 한계를 넘을 수도 있고, 디스크에서는 하드웨어 에러가 발생할 수 있다.
© 2009 인피니티북스 All rights reserved
예외의 예 실행되지 않음!
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 예외는 어떤 경우에 발생하는가? 2. 예외를 처리하는 경우와 처리하는 않은 경우를 비교하여 보라. 장점 은 무엇인가?.
© 2009 인피니티북스 All rights reserved
예외 처리기의 개요
© 2009 인피니티북스 All rights reserved
try/catch y 블록에서의 실행 흐름
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
finallyy 블록 • 오류가 발생하였건 발생하지 않았건 항상 실행되어야 하는 코드는 finally 블록에 넣을 수 있다.
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. 배열에서 인덱스가 범위를 벗어나도 예외가 발생된다. 크기가 10인 배열을 생성하고 11번째 원소에 0을 대입하여 보라. 이 예외를 처리 하는 try-catch 블록을 만들어 보라. 2. 1번 문제에 배열 참조 변수에 null을 대입하여 배열을 삭제하는 문장 을 finally 블록으로 만들어서 추가하여 보라.
© 2009 인피니티북스 All rights reserved
예외의 종류
© 2009 인피니티북스 All rights reserved
Error와 Exception p Error : 시스템에서 발생하는 심각한 에러이다.
예외 RunTimeException Exception IOException
© 2009 인피니티북스 All rights reserved
RunTimeException p
© 2009 인피니티북스 All rights reserved
IOException p • 입출력과 관련된 오류
© 2009 인피니티북스 All rights reserved
체크 예외와 비체크 예외
© 2009 인피니티북스 All rights reserved
다형성과 예외 • 다음과 같은 예외 상속 계층도를 가정하자.
© 2009 인피니티북스 All rights reserved
다형성과 예외
© 2009 인피니티북스 All rights reserved
다형성과 예외
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. Error와 Exception은 어떻게 다른가? 2. 자바 코드에서 반드시 처리하여야 하는 예외는 어떤 것들인가? 어떤 클래스에서 상속되는가? 3. RuntimeException을 p 처리했는지를 왜 컴파일러에서는 검사하지 않 는가?
© 2009 인피니티북스 All rights reserved
예외가 발생하는 메소드 •
예외를 발생하는 메소드
•
처리 방법 • 예외를 try/catch로 처리하는 방법 • 예외를 상위 메소드로 전달하는 방법 © 2009 인피니티북스 All rights reserved
try/catch y 블록 이용
© 2009 인피니티북스 All rights reserved
상위 메소드로 전달
© 2009 인피니티북스 All rights reserved
예외 생성하기 • 예외는 throw 문장을 이용하여 생성한다.
© 2009 인피니티북스 All rights reserved
중간 점검 문제 •
1. 만약 호출한 메소드가 예외를 발생할 가능성이 있다면 어떻게 하 여야 하는가?
•
2 예외를 발생할 가능성이 있는 메소드는 어떻게 정의되는가? 2.
•
3. throws가 의미하는 것은 무엇인가?
© 2009 인피니티북스 All rights reserved
예외 생성의 예
예외 객체 생성
© 2009 인피니티북스 All rights reserved
사용자 정의 예외 • 사용자 정의 예외: Exception 클래스의 서브 클래스를 생성시켜서 만 든다.
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
여러 개의 예외를 주고 받는 방법
© 2009 인피니티북스 All rights reserved
예제
© 2009 인피니티북스 All rights reserved
중간 점검 문제 1. DiskFailureException을 정의하여 보라. 이 클래스는 매개 변수가 없 는 생성자를 가져야 한다. 만약 예외가 매개 변수가 없는 생성자를 이용하여 발생되면 getMessage()는 “Disk Failure!"를 반환하여야 한 다.
2. 사용자로부터 성적을 입력받아서 평균을 계산하는 프로그램을 작성 하여 보자. 만약 사용자가 음수를 입력하면 g p 발생한다. 이 예외를 catch 블록으로 NegativeNumberException을 잡아서 처리하는 코드도 추가하라.
© 2009 인피니티북스 All rights reserved
Q&A
© 2009 인피니티북스 All rights reserved