Java의 기본 소개 및 환경
설정




               1
Introductions
   Name
   Company affiliation
   Title, function, and job responsibility
   Programming experience
   ...
자바언어의 특징


   단순(simple)
     자바는 C++ 언어를 기반으로 탄생하였지만, C나 C++에서 프로그래
      머에게 많은 혼란을 주는 요소들을 제거
     자바는 C++의 preproce...
   인터프리터(Interpreted)에 의해 실행
         자바는 독특한 실행 방식을 취하고 있다. 자바 소스는 자바 가상
                  기계에서 실행될 수 있는 바이트 코드로 번역되며, ...
자바의 OS에 대한 독립성
                      자바 프로그램



                       컴파일러

                                             ...
JDK환경 설정 및 설치(1)
   JDK란?
     Java Development Kit의 약자
     일반적으로 Sun/ IBM사의 jdk사용
     2007년 현재 JDK1.6버전 발표
     jd...
Java SE(Standard Edition)
   Java SE 플랫폼
      자바 언어를 이용하여 응용프로그램, 애플릿 프로그램, 컴포넌트
       등을 개발하고 실행할 수 있는 환경을 제공
      ...
Java EE(Enterprise Edition)
Java SE를 확장하여 구성한 자바 서버측 기술로서, 다중 구조(Multi-
   tier)의 응용 프로그램을 개발하고 실행할 수 있는 환경을 제공
   Servle...
Java ME
핸드폰이나 PDA 등 소형의 내장(Embeded) 기기에서 실행될 자바 플랫
 폼
 - J2ME 플랫폼은 KVM(Kilobytes Virtual Machine)이라는 작은 규모
 의 자바 가상 기계를 제공...
JDK환경 설정 및 설치(2)
   JDK의 설치확인
     java –version
     java
     javac

   JDK의 다운로드
     http://java.sun.com 사이트이용

...
Eclipse와 편집기환경
   Eclipse
     Open Source로 개발되는 IDE
     일반적으로 실무 개발자들이 거의 사용
     http://www.eclipse.org이용
   NetBe...
자바 프로그램 만드는 순서
   확장자가 .java인 소스 파일 작
    성
   컴파일을 통해 .class파일 만들
    기
   실행




                          12
HelloWorld.java
public class HelloWorld{

    public static void main(String[] arg){
         System.out.println("Hello Wo...
About HelloWorld(1)
   1단계 자바코드만들기
     HelloWorld.java

   2단계 컴파일
     javac HelloWorld.java

   3단계 실행
     java ...
Compile
   소스코드를 javac 명령어를 사용하여 bytecode를 생성하는 단계를 의미 합
    니다. bytecode 란 인간이 아닌 기계가 알아 들을 수 있는 기계어 코드를 의
    미.




  ...
Load Java class file
     모든 프로그램은 실행 되기 전에 우선적으로 메모리상으로 올라옵니다.
     이 과정은 실제 디스크에선 메모리상으로 올려주는 클래스로더(ClassLoader)란 것에 의...
17
바이트 코드 검증기
    The code adheres to the JVM specification
    The code does not violate system integrity
    The code ca...
Applets and Applications
   Application – Runs in the operating system
   Applet – Runs in a browser, does smaller tasks...
Common Problems 1
   Compiler Problems Not compiled. No .class file.
       'javac' is not recognized as an internal or...
Common Problems 2
   Runtime Problems  Not Run
     Exception in thread "main" java.lang.NoClassDefFoundError:
       H...
WelcomeJava.java
//code WelcomeJava.java
1 ://이 프로그램은 WelcomJava 입니다.
2 :
3 :public class WelcomeJava
4 :{
5 : public stat...
Applet과 Java프로그램
import java.applet.*;
import java.awt.*;

public class HelloApplet extends Applet {

        public void ...
Java 주석처리
   주석이란 자신이나 다른 사람들이 보기 편하도록 프로그램에 달아두
    는 설명.
   자바에서 지원하는 주석 처리 방법은 세 가지가 있다.
        1. //     한 라인만을 주석...
클래스의 선언
 Basic syntax of a Java class:
<modifiers> class <class_name> {
    [<attribute_declarations>]
    [<constructor_...
main()메쏘드(1)
   라인 5는 main 메쏘드라고 부르는 부분
   main() 메쏘드는 쉽게 생각해서 interpreter 인 java 명령
    어를 실행하는 동안 가장 먼저 실행 되는 부분
   만...
main()메쏘드(2)
   public : 영어 사전에 있는 의미 그대로 해석하시면 됩니다.
          자바 프로그램에서는 범위(Scope)를 나타내는 단어 입니다.
   static : 사전적인 의미로 ...
기본 자료형과 연산자/제어
문




            28
식별자와 예약어
 식별자(Identifier)
   프로그래머가 직접 만들어줘야 하는 이름
   예: 변수명, 클래스명, 메쏘드명 등
   대문자, 소문자, 숫자, _, $등, 숫자는 식별자의 첫 문자로 사용될
...
java keywords




                30
변수(Variable)와 상수(Constant)
 값(Value)
     데이터(Data) 자체
     예: 1, 0, 20.5, true, ‘a’


   자료형(Type)
     데이터(Data)의 종...
   변수(Variable)
     데이터를 저장할 메모리의 위치를 나타내는 이름  데이터 자체는 아님
     변수의 선언 (Declaration)
      •    변수를 사용하기 위해서는 사용 전에 미리...
변수(Variable)와 상수(Constant)
 상수(Constant)
   변경될 수 없는 고정된 데이터  常數
   코드의 이해와 변경이 쉬움
   분산된 상수로 인한 에러를 방지
   정의
    • ...
문자열 상수
   n : 새로운 라인으로 이동한다.
   t : tab 간격만큼 건너뛴다.
   ” : “(쌍따옴표)를 표시할 때 사용
   b : Backspace 를 의미한다.
   r : Carriage ...
자바의 자료형
 기본 자료형(primitive data type)
   최소 단위의 자료형
   다른 자료형으로 분해되지 않음
   메쏘드가 없이 값만 가짐
   int, fload, double, char 등...
자바의 자료형 – 기본 자료형




                   36
자바의 자료형 – 기본자료형 VS 참조자료형




                           37
자료형 변환
   자료형 변환
     하나의 자료형을 다른 자료형으로 바꾸는 행위
     자료형의 변화없이 하나의 변수에서 다른 변수로 값 할당 불가
        Boolean isHoliday = 1; /...
연산자
   연산자의 우선순위
     최우선 연산자 . [] () ; ,
     단항 연산자: +/-,++/--
     산술 연산자: +,-,*,/,%
     Shift 연산자: <<, >>, <<<  ...
40
41
연산자(1)
    수학적인 연산
    + (더하기), - (빼기) , * (곱셈) , / (나눗셈) , % (나머
    지)
    %는 나머지를 구할 때 사용할 수 있습니다. int a =
    9%2 로...
관계 연산자(2)
   >, >= , < , <=, ==, !=
   앞의 넷과는 달리 ‘== ‘이나 ‘!= ’는 생소한 연산자 입
    니다.
   ‘A == B‘는 A 와 B 가 같은 가를 판단합니다. 만약 ...
정수의 사칙연산
//code NumberEx.java
1 :public class NumberEx
2 :{
3 :public static void main(String[] args)
4 :{
5 :       int n...
char 하나의 글자
1 :public class CharEx
2 :{
3 : public static void main(String[] args)
4 : {
5 :           char a='J';
6 :    ...
boolean 참과 거짓
//소스 BooleanEx.java
1 :class BooleanEx
2 :{
3 : public static void main(String[] args)
4 : {
5 :           b...
문자로 자료형을 구분하는법
   long 타입의 숫자 2 를 선언 할 때는 뒤에 ‘L’혹은 ‘l’을
    붙여 줍니다.
       long v = 2L;
   float 타입의 숫자 2 를 선언 할 때에는 뒤에...
//code RelationTest.java
1 :public class RelationTest
2 :{
3 : public static void main(String[] args)
4 : {
5 :           ...
조건연산


연산자 의미     사용법




&&   and   A && B   A 가 true 이고 B 역시 true 일때만 true
                    (만약 A 가 false 이면 B는 계산하지 ...
조건연산의 사용처
   각종 제어문(if)처리
   데이터의 검사
   로직의 처리




                   50
If문을 통한 조건 처리




                if(조건){
if(조건){
                }else if(다른 조건1){
}else{
                }else if(다른 조건2...
// code IfExample.java
1 :public class IfExample
2 :{
3 : public static void main(String[] args)
4 : {
5 :            int ...
switch(좀더 간단한 분기)
                     switch(int 호환가능변수){
                              case (값1) :
                     ...
//code SwitchEx.java
1 :public class SwitchEx
2 :{
3 : public static void main(String[] args)
4 : {
5 :             //0에서 ...
for루프

        for (초기화 조건 ; 조건문 ; 변환 조건)
        {

            // your code goes here


        }




                  ...
자동증감연산
1 :public class AutoOperator
2 :{
3 : public static void main(String[] args)
4 : {
5 :              int a =0;
6 :  ...
루프연습(1)
//code ForEx.java
1 :public class ForEx
2 :{
3 : public static void main(String[] args)
4 : {
5 :            //10번...
for 루프의 다양한 형태

    int i=0;
    for( ; i < 10 ; i = i+1){
               System.out.println("Hello World "+ i);
    }



...
while
While 구문                 for 구문


int a =0;                for(int a=0; a<10; a++){
while( a< 10){               ---...
//code WhileEx.java
1 :public class WhileEx
2 :{
3 : public static void main(String[] args)
4 : {
5 :              int a=0...
do~ while
   //code DoWhileEx.java
   1 :public class DoWhileEx
   2 :{
   3 : public static void main(String[] args)
...
break와 continue
   break
     루프의 중간에 벗어나는 방법
     특정 조건에 맞으면 루프를 벗어나게 설정



   continue
     건너뛰게 하는 방법
     특정조건일 ...
1 :public class BreakEx
2 :{
3 : public static void main(String[] args)
4 : {
5 :               //10번 동안 반복하겠다는 의미의 for 루프...
   1 :public class ContinueEx
   2 :{
   3 : public static void main(String[] args)
   4 :{
   5 :          //10번 동안 ...
break와 continue
   break
     루프의 중간에 벗어나는 방법
     특정 조건에 맞으면 루프를 벗어나게 설정



   continue
     건너뛰게 하는 방법
     특정조건일 ...
1 :public class BreakEx
2 :{
3 : public static void main(String[] args)
4 : {
5 :               //10번 동안 반복하겠다는 의미의 for 루프...
   1 :public class ContinueEx
   2 :{
   3 : public static void main(String[] args)
   4 :{
   5 :          //10번 동안 ...
Java의문자열과 API사용법




              68
자바의 간단한 문자계산
1 :class AddString
2 :{
3 : public static void main(String[] args)
4 : {
5 :               String a = "Hello ...
문자열연산

  1 :class StringEx
  2 :{
  3 : public static void main(String[] args)
  4 : {
  5 :           String a = "안녕 A입니다...
new를 이용한 문자열 생성

    1 :class StringEx2
    2 :{
    3 : public static void main(String[] args)
    4 : {
    5 :         ...
API문서
   프로그램 작성시점에 참고하는 문서
   자료구조 혹은 Sun에서 제공하는 여러기능을 설명한 문
    서
   각 버전별로 작성
   필요한 경우에 javadoc명령어를 통해서 생성가능




 ...
73
문자열 주요 메쏘드(함수)
 String concat(String target)           문자열을 연결시켜서 새로운 문자열을 만들 수 있다.


 String substring(int start,int leng...
문자열 메쏘드 연습
//code StringMethods.java
1 :public class StringMethods
2 :{
3 : public static void main(String[] args)
4 : {
5...
문자열의 순서
   String에서는 문자의 순서(index)를 따질때 0 에서 부터 시작합니다.
    H e l l o (공백) W o r l d !
    0 1 2 3 4 5 6 7 8 9 10
   라인...
Java의 배열




           77
배열이란?
   특정한 자료들을 담을 수 있는 바구니
   동일한 형태의 자료만 들어갈 수 있다.
   처음 초기화 할 때 미리 크기를 지정한다.




                              78
배열과 서랍장의 공통점
   1. 서랍장에는 순서가 있다.
    -- 다만 배열에는 0 에서 부터 시작한다.
   2. 서랍장에는 특정물건만 수납한다.
   -- 배열에는 같은 형의 자료만 들어간다.
   3...
배열의 선언
   int[] array = …

   int array[] = …

   []는 배열이라는 것을 의미




                      80
배열을 초기화 하는 방법(1)
   직접 초기화 하기
     {}; 를 이용해서 선언
     String[] array = { “속옷 “, “양말 “, “바지”} ; - 뒤에 ; 이
     붙습니다.
   ...
배열을 초기화 하는 방법(2)
String[] array = new String[3]; --- 크기가 3 단으로 된 옷장
   ….
array[0] = “속옷 “;
array[1] = “양말 “;
array[2] = ...
   1 :public class ArrayEx
   2 :{
   3 : public static void main(String[] args)
   4 : {
   5 :              //숫자 배열...
배열의 길이를 구하는 방법
   int array = array.length;
   n번째 배열의 요소를 꺼내는 법
     array[n-1]




다차원배열



   [][]과 같이 다차원배열선언 가능
...
public class ArrayEx1 {
           public static void main(String[] args){

                      int[] arr = new int[10];...
배열의 복사
   System.arrayCopy()를 통해 복사

       System.arraycopy(
       원본배열,복사를 시작할 원본 요소위치(숫자),복사할 배열 ,
       복사를 받을 때 위치...
   public class ArrayEx2 {
          public static void main(String[] args){
                      String[] arr = {"봄옷"...
   public class ArrayEx4 {
          public static void main(String[] args) {
                      int[][] arr = new i...
OOP 클래스 만들기




              89
OOP프로그래밍
   모든 것을 객체로 추상화해서 생각
   현실세계를 객체라는 것으로 프로그램상으로 반영하는
    방식
   각 객체간의 통신을 통해서 결과를 처리하는 방식
   현재 및 미래의 프로그래밍 언...
객체지향 프로그래밍의 절차
   1. 우선 프로그램이 쓰이는 목적을 생각하여 어떤 객체들을 만들어
    야 하는지 결정한다.
   2. 각 객체들이 어떤 특징(속성과 동작)을 가지고 있을 지를 결정한
    다.
...
OOP를 위해 필요한 능력
   필요한 프로그램의 적절한 표현능력
   각 객체와의 관계를 정의하는 능력
   객체와 객체를 연결해 나가는 능력
   현실적인 상황을 프로그램으로 옮기는 추상화 능력




   ...
객체의 구성
   속성(Attribute)
   동작(Behavior)

   모든 객체는 자신의 책임(Responsibility)을 가진다.
   모든 객체는 서로 메시지(Message)를 주고 받는다.



...
추상화와 클래스
   내가 필요한 객체를 설계해서 프로그램이 인식하게 하는
    방법
     클래스를 설계한다.
     클래스로 부터 객체를 생성한다.
     생성된 객체는 클래스에 정의한 속성과 동작을 ...
클래스 = 객체를 생성하는 틀
   추상화 를 통한 객체모델링
   JVM이 인식하는 단위
   모든 객체들의 생산처

A class is the blueprint from which individual objec...
클래스로 부터 객체를 생성하는 것의 의미
   JVM이 프로그래머가 선언한 자료를 자신의 것으로 인정
    하는 것
   프로그래머가 선언한 모든 동작,속성을 프로그램상에서
    실행 가능하게 하는 것
   n...
클래스의 선언
 접근제한 (public, default, protected, private)
 클래스의 타입 (static, nonstatic)
 클래스의 이름
 {
 }
<modifiers> class <cl...
   Access Levels

      Modifier    Class Package Subclass World
      public      Y    Y        Y        Y
      protect...
클래스와 객체의 관계




              99
객체(object/instance)
   클래스로부터 생성
   지정된 속성의 값은 각 객체마다 다르게 만들 수 있다.
   모든 객체는 클래스에 지정된 동작을 동일하게 수행한다.
   각 객체의 속성 = 인스턴...
인스턴스변수
   각 객체마다 고유하게 가질 수 있는 속성들 의미
   자료형 + 레퍼러스로 선언
   클래스 선언시점에 초기화할 수도 있다.
   동작에 의해서 변경되는 것이 바람직함




          ...
인스턴스 변수(instance variables)
   추상화해서 클래스에 선언
   객체의 속성을 의미
   객체가 살아있는 동안 같이 유지될 속성
   다양한 방식으로 초기화 가능
     생성시점에 객체의...
메쏘드(method)
   프로그램상으로 동작할 방법을 정의
   접근제한을 통해서 내부/외부에서 접근 가능
   객체와 객체간의 통신 = 메쏘드 호출
   모든 OOP프로그램은 객체와 객체간의 메시지 전송이므
...
메쏘드의 선언구조
   접근제한
   리턴타입(넘겨줄 결과가 없으면 void)
   메쏘드의 이름 (주로 동사로 표현)
   메쏘드가 가공한 데이터(파라미터)
   {
   로직
   리턴 타입이 있는 경우...
메쏘드(Method)
   메쏘드
     객체의 행동을 정의하는 procedure or function
     적용대상: 특정 객체(object) or 전체 클래스(class)
     구문:
       ...
메쏘드(Method)




선언 예                                 호출 예
class Car {                          public class CarTest {
    ...
메쏘드(Method) – 유형 및 예제




                        107
메쏘드(Method)-유형 및 예제
3. Return값과 매개변수가 있는 method



 class intOp {                  public class intOpTest {
 …            ...
객체(Object) 생성
 객체(Object)의 생성
 1. UML Diagram 등을 이용하여 클래스를 디자인한다
 2. Editor 를 사용하여 Source 코드를 작성한 후 .java 파일로
   저장한다.
 3...
객체(Object) 생성 – Class 디자인




                            110
객체(Object) 생성 – Source 코드 생성




                               111
객체생성 – main() method 생성
class Car {
     String name;
     int speed;
     public void setName(String n) {
          name ...
객체생성 – main() method 생성

 class Car {
     String name;
     int speed;
     public void setName(String n) {
          nam...
실습 – Car.java
Main 함수에 아래와 같이 Hudson, carrera, master 객체를 추가 생성하고
각 객체의 이름과 스피드를 출력해 보십시오.




                           ...
실습 – TV.java
               /*****************************************
               * 아래 WatchTV 클래스의 main 메쏘드를 실행할 수 있도...
객체(Object) 생성 – Source 코드 생성




                               116
객체의 초기화




          117
레퍼런스와 객체
   String a = “aaa”라는 관계에서 a를 레퍼런스라고 한다.
   객체와 레퍼런스의 관계
     풍선과 연결끈과 같은 관계




키워드 new
   클래스로 부터 객체를 생성
 ...
new로 만드는 두 개의 객체
   ‘==‘혹은 ‘!=‘연산의 차이
   기본자료형은 무조건 같은 값을 가지면 true를 리턴
   객체형 데이터(레퍼런스형 자료)는 가르키고 있는 객체
    의 hashcode의...
참고- null
   참조하고 있는 객체가 없음을 의미
   객체생성을 하지 않은 상태에서 레퍼런스만 준비해둔 상
    태
   String a = null;
     a라는 레퍼런스만 준비해둔 상태
    ...
인스턴스변수 vs 지역변수
   인스턴스변수 = 전역변수
     객체 전반에 걸쳐 영향력을 발휘하는 변수
     객체의 메쏘드내에서 사용하는 변수
     선언시점에는 null로 해도 상관없음

   지역변...
static 키워드
   변수와 같은 영역으로 저장되는 메쏘드와 변수를 선언할 때 사용
   main()함수
   변수 – 상수를 선언할 때 사용
   메쏘드 – 객체 생성없이 바로 접근하고 싶을 경우에 사용

...
static의 특징
   객체의 생성없이 사용하므로 편하다.
   별도의 메모리 관리를 안하므로 항상 메모리를 차지하게 된다.
   여러 객체에서 static으로 선언된 변수를 공유해서 쓴다.
   상수로 선언해...
참고 - Overloading
   생성자 메쏘드(함수)처럼 메쏘
    드의 형태가 동일하지만, 입려
    되는 파라미터들(parameter,
    arguments)의 값들이 다른 경
    우에 overloa...
생성자함수(Constructor) overloading
   new 를 호출할때 파라미터(arguments)를 같이 전달해서
    각 객체 생성시점에 정보를 같이 제공하는 방법
   아무것도 없는 경우 기본생성자(...
this()를 이용한 생성자함수
   하나의 클래스에 여러 개의 생성자 함수를 정의할 수 있
    다.
   같은 이름의 다른 파라미터를 가진 함수를 호출하고자
    할때 this()를 사용
   this라는 ...
127
참고 - instanceof
   연산자 중에 객체단위에 적용되는 연산자
   A instanceof B 는 A레퍼런스가 B타입의 객체를 가르키고 있는
    가를 의미
   객체의 타입을 검사하기 위해 사용


...
참고- this
   객체형 변수(레퍼런스 자료형)에서 현재의 객체를 일컫
    는 용어
   String str = new String(“aaa”) 인 경우에는 현재 하나의
    변수가 선언되어 그 변수를 이용...
자바의 상속




         130
상속(Inheritance)
   부모의 속성과 동작을 자식에서 물려받을 수 있음
   자바에서는 단일 상속만을 지원
   extends키워드를 통해서 사용
   일반적으로 ~ is a relationship 관...
상속의 사용
   클래스 선언 뒤에 extends 키워드를 적는다.
   부모가 되는 클래스를 superclass 혹은 부모클래스라고 한다.
   상속을 통해 확장된 클래스를 subclass 혹은 자식클래스라고 부...
상속의 특징
   타입으로 본 상속
       부모 타입(클래스)는 자식 타입을 포함한다.
   기능으로 본 상속
       자식클래스는 부모클래스보다 많은 기능을 가질 수 있다.




           ...
상속의 실습




         134
상속의 용어
   extends
   super
   this
   override




상속과 overriding
   override: 올라타다, 덮어쓰다의 의미
   자바에서는 method의 재정의를 ...
상속의 실습 – 핸드폰의 상속
public class HandPhone {

           public void send(String otherPhoneNum){
                        Syst...
Override의 실습
  public class MP3Phone extends CellPhone {

            public void get() {
                       System.ou...
추상클래스(Abstract class)
   abstract키워드사용
   new로 객체를 만들 수 없는 클래스
   반드시 추상 메쏘드가 하나이상 존재
   사용시점
     객체생성을 할 필요는 없으나 상속...
추상클래스의 실습
   Shape
     draw(): 추상메쏘드


   Circle

   Rectangle

   Triangle




                      139
java.lang.Object
   자바의 모든 객체들의 부모 클래스
   모든 클래스 선언시에는 묵시적으로 extends Object라
    는 구문이 같이 존재
   고유의 메쏘드를 가지고 있음
     t...
toString()/equals()
   toString(): System.out.println()을 통해서 객체의 레퍼런
    스 값을 의미할 때 동작
   equals(): 필요한 경우에 다른 객체와 같은 데이...
Upcasting(Promotion)과 DownCasting
   casting 실제 객체와 선언된 자료형(클래스/타입)간의 관
    계를 명확히 하는 것
   Object a = new HelloWorld();
...
   Down은 반드시 앞에 ()로 처리해서 명시적으로 선언한
    다.
   기본자료형도 동일하게 적용된다.
   int a = 10;
   byte b = (byte)a;




               ...
상속을 막는 final
   클래스 선언의 final
     하위 상속 금지

   메쏘드 선언의 final
     overriding 금지

   변수 선언의 final
     상수선언




    ...
인터페이스 – 다중 상속과 세상을 보는 창
   interface의 의미 – 어떤
    객체들끼리 통신하는 하나
    의 통신 창 (ex> USB, 키
    패드, 키보드..)
   자바에서의 인터페이스의
  ...
추상클래스 VS 인터페이스
   인터페이스는 여러 경로의 수퍼타입 계층을 허용한다.
     인터페이스는 다중 상속이 가능하다.

   인터페이스는 public 상수나 구현이 없는 메쏘드만 포함
    할 수 있다...
인터페이스의 생성 문법
접근제한자 + interface + 인터페이스명 + (extends super
 타입 인터페이스들)

 인터페이스간의 상속
public interface JobA{ … }
public inter...
인터페이스의 활용 예
 인터페이스간의 상속
public interface JobA{ … }
public interface JobB{ … }
public interface JobC extends JobA, JobB{ …...
인터페이스 필드, 메쏘드
   필드
     public static final 로 선언
     선언된 필드는 무조건 public static final로 인식한다.

   메쏘드
     인터페이스 자체가 ...
중첩(inner) 클래스




                150
Inner Class




              151
152
153
중첩클래스
   클래스 선언 내부에 또 다른 클래스의 선언
       1 :public class Outer1
       2 :{
       3 :         String name;
       4 :
   ...
static 중첩 클래스
   클래스 내부에 static으로 선언된 중첩 클래스의 선언
      1 : public class Outer {
      2:
      3 : private String name = ...
지역 중첩 클래스
1 : public class LocalInner {
2:
3 : private String name = "LocalInner";
4:
5 : public void print(){
6:
7:      ...
익명클래스(Anonymous 클래스)
   필요한 곳 어디서나 선언가능
   클래스 선언뒤에 반드시 ; 필요
   클래스나 인터페이스를 재정의 해서 사용
      1   : interface Eatable {
 ...
//code Outer2.java

1 :public class Outer2
2 :{
3 :         String foodName;
4 :
5 :         public Outer2(String name){
6...
Package, jar, 접근제한




                     159
자바의 패키지
   클래스의 묶음 단위
   일종의 네이밍룰
   접근제한과 같이 쓰여 프로그램상에서 클래스들간의 관
    계를 정리할 때 사용




                               160
패키지의 선언
   클래스 선언 바깥쪽
     package 패키지명

   일반적으로 도메인이름의 역순으로 쓴다.
     www.yahoo.co.kr
     package kr.co.yahoo

   ...
패키지의 사용
   다른 패키지내의 클래스를 사용할 때는 import라는 키워
    드 사용
   import 패키지명.클래스명;
   여러 개의 클래스들을 쓸 때는 *로 표시
   패키지를 import하더라도...
접근제한자(Access Modifier)
   외부에서 특정 클래스에 접근하거나, 객체변수에 접근하
    거나, 메쏘드에 접근하려고 할 때 제약을 둘 수 있는 방
    법
   가장 기본적인 제어
     pu...
jar파일
   zip, tar와 같이 자바 클래스 파일들을 압축파일 형태로
    보관
   별도의 위치에 두고 JVM이 참조할 수 있도록 사용
   jar –cvf
   jar –xvf
   한글 파일이름은...
날짜와 시간, StringBuffer




                  165
날짜관련 클래스
   Calendar
   Date
   DateFormat
   SimpleDateFormat




                       166
자주쓰는 기능
   년/월/일의 다양한 문자열 형태 표현
   시간차 구하기
   해당요일 혹은 마지막 날짜 구하기
   특정일에 대한 요일 구하기




                           167
숫자 포맷
   NumberFormat
   DecimalFormat




                    168
Wrapper 클래스
   JDK1.5버전 이전까지 기본자료형과 객체형 자료형간의
    변환을 처리 위한 클래스들
   JDK1.5버전 이후에는 Auto boxing/unboxing개념이 도
    입되어 필요하지...
기본자료형     Wrapper 클래스

byte      Byte클래스

short     Short클래스

int       Integer 클래스

long      Long 클래스

double    Double ...
문자를 기본 자료형으로 바꿀 때                      기본 자료형을 문자형으로 바꿀 때

byte b = Byte.parseByte(문자열);          Byte.toString(byte 값);

...
StringBuffer
   String과 StringBuffer의 차이
     String은 연산이 일어날때 마다 새로운 객체를 만들어서 사용하
      기 때문에 객체생성이 많다.
     StringBuf...
java의 Collections




                    173
Collection의 종류
   java.util.Collection: 순서에 관
    계없는 객체들의 단순한 모임
   java.util.Set: 중복되지 않는 수
    학적인 의미의 객체들의 집합,
    C...
175
Stack
 1 : import java.util.*;
 2:
 3 : public class StackEx {
 4:
 5:          Stack st = new Stack();
 6:
 7:          p...
1 : import java.util.*;
2:
3 : public class HashMapEx {
4:
5 : public void test(){
6 : HashMap map = new HashMap();
7:
8 :...
JDK1.5에서의 변화 - 제네릭기능
   Collection<>로 변화
   다운캐스팅을 줄일 수 있는 구조로 변화
   속도에서 개선을 이루며, 개발자들의 오류를 미리 방지
    하는 기능




      ...
Exception 처리




               179
예외의 개요
   예외 : 프로그램 실행 중에 발생하는 예기치 않은 사건
   예외가 발생하는 예
       정수를 0으로 나누는 경우
       배열의 첨자가 음수 또는 범위를 벗어나는 경우
       ...
181
182
예외의 개요 - 예외가 발생되는 예

class Error {
  public static void main(String[] args) {
    x();       // x() 메소드 호출
  }
  static vo...
예외 관련 클래스

   자바는 예외를 객체로 취급
   예외 관련 클래스를 java.lang 패키지에서 제공
       예외 관련 클래스 : 그림 9-1 참조
   자바 프로그램에서는 Error, Runtim...
예외 관련 클래스 - Exception 클래스




 Exception 클래스의 하위 클래스

NoSuchMethodException         메소드가 존재하지 않을 때
ClassNotFoundException...
예외 관련 클래스 - RuntimeException 클래스


  RuntimeException 클래스의 하위 클래스
ArithmeticException          0으로 나누는 등의 산술적인 예외
Negativ...
예외 처리

   Error 와 RuntimeException 클래스 관련 예외는 처리 효율보다는 처리에 드
    는 노력이 너무 커 자바 프로그램에서 처리하지 않고 JVM에게 처리를 맡긴
    다
   Erro...
예외 처리 - 예외의 발생
   import java.io.*;
   class IOExceptionError {
    public static void main(String args[]) {
       FileRe...
예외처리 – 예외의 발생


   컴파일러는 앞의 프로그램에 대해 다음과 같은 에러 메시지를
    나타낸다


    IOExceptionError.java:7: Exception java.io.FileNotFoun...
190
191
예외 처리 - try, catch, finally 블록 사용



    예외 처리 방법중 예외가 발생한 메소드 내에서 직접 처리하는 방법 : try, catch,
     finally 블록 사용
        tr...
예외 처리 - try, catch, finally 블록 사용 - 예



         import java.io.*;
         class IOExceptionError {
           public st...
예외의 인위적인 발생


   프로그램에서 인위적으로 예외를 발생시킬 수 있다
   예외를 발생시키기 위해 throw 문 사용
    throw 예외객체;
    또는
    throw new 예외객체타입(매개변수)...
호출메쏘드에 의한 예외의 전달


   예외를 직접 처리하지 않고 자신을 호출한 메소드에게 예외를 넘겨주는
    방법(throws 절 사용)
   메소드 선언시 다음과 같은 방법으로 지정


    public v...
사용자 정의 예외

   사용자는 새로운 예외를 정의하여 사용할 수 있다
   새로운 예외는 Exception 클래스로부터 상속되어 생성되어야 한다

         class UserException1 extend...
Java를 이용한 UI 만들기




               197
AWT/Swing/Applet
   자바를 이용해서 실행되는 UI를 가지는 프로그램 개발시
    에 사용
   AWT – (Abstract Windows Toolkits)
   SWING – JDK1.1이후에 U...
MyFrame.java
1 : package gui1;
2 : import java.awt.*;
3 : import java.awt.event.*;
4:
5 : public class MyFrame {
6:
7 : pu...
AWT 패키지의 기본 구조와 Frame




Component 라는 최상위 클래스에서 부터 시작
Container계열의 객체는 주로 컴포넌트들을 추가하기 위해서 사용한다.
Container계열의 객체중에서 단독으로 실...
AWT 프로그램의 구조




               201
Frame객체
   Frame 이라는 것은 하나의 프로그램을 실행하는 것처럼
    실행되는 하나의 창(window)를 의미한다.
   AWT를 이용하는 프로그램을 만들 때 자신의 컴퓨터에서
    실행하고 싶다면 ...
   Frame 의 생성
     Frame 을 생성하는 것은 보통의 경우 두 가지 방식으로 사용.
     Frame f = new Frame( );
     Frame f = new Frame(String n...
void setBackground(Color c)      Frame 의 색깔을 지정한다.


void setTitle(String title)      타이틀 바(화면 가장 위의 활성 버튼들이 있는 바)
       ...
1 : package gui1;
2 : import java.awt.*;
3 : import java.awt.event.*;
4:
5 : public class FrameEx1 extends Frame {
6:
7 : ...
화면에서의 좌표




           206
1 : package gui1;
2 : import java.awt.*;
3 : import java.awt.event.*;
4:
5 : public class PanelEx1 {
6:
7 : Panel p1;
8:
9...
컴포넌트와 레이아웃




             208
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Java기초 합본
Upcoming SlideShare
Loading in …5
×

Java기초 합본

4,804 views
4,660 views

Published on

자바 자료 2

2 Comments
3 Likes
Statistics
Notes
No Downloads
Views
Total views
4,804
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
110
Comments
2
Likes
3
Embeds 0
No embeds

No notes for slide

Java기초 합본

  1. 1. Java의 기본 소개 및 환경 설정 1
  2. 2. Introductions  Name  Company affiliation  Title, function, and job responsibility  Programming experience  Reasons for enrolling in this course  Expectations for this course 2
  3. 3. 자바언어의 특징  단순(simple)  자바는 C++ 언어를 기반으로 탄생하였지만, C나 C++에서 프로그래 머에게 많은 혼란을 주는 요소들을 제거  자바는 C++의 preprocessor, 포인터, 다중상속, 구조체, 전역변수, goto문, 연산자 중복 등의 기능을 제외하여 언어의 복잡성을 제거  자동적인 쓰레기 수집(garbage collection) 기능을 제공  객체지향(Object-Oriented)  자바는 객체지향 언어이다. 자바 프로그램의 모든 요소들은 객체로 표현된다. 객체지향은 소프트웨어의 재사용과 정보의 캡슐화 같은 많은 장점을 제공한다. 객체지향은 우리의 실세계와 유사한 프로그 램 방식이다. 3
  4. 4.  인터프리터(Interpreted)에 의해 실행  자바는 독특한 실행 방식을 취하고 있다. 자바 소스는 자바 가상 기계에서 실행될 수 있는 바이트 코드로 번역되며, 번역된 바이트 코드는 바이트 코드 해석기가 있는 어떠한 기종의 컴퓨터 환경에 서도 실행될 수 있다. Java program 인터프리터 01 s las M 00 00 m.c yP 10 ro 11 gra gr 10 am Pro .ja My va 컴파일러 My Program Tip : 자바는 compiled interpreted language 4
  5. 5. 자바의 OS에 대한 독립성 자바 프로그램 컴파일러 개발환경 바이트 코드 인터프리터 인터프리터 인터프리터 실행환경 Sun Ultra Solaris Mac 시스템 PC 호환 System Windows NT 5
  6. 6. JDK환경 설정 및 설치(1)  JDK란?  Java Development Kit의 약자  일반적으로 Sun/ IBM사의 jdk사용  2007년 현재 JDK1.6버전 발표  jdk1.3이후에는 Java2라는 명칭 사용  jdk15  Java5.0 명칭사용  JRE , JVM  Java의 분야  J2EE  J2SE  J2ME 6
  7. 7. Java SE(Standard Edition)  Java SE 플랫폼  자바 언어를 이용하여 응용프로그램, 애플릿 프로그램, 컴포넌트 등을 개발하고 실행할 수 있는 환경을 제공  Java HotSpot Performance Engine  Java Foundation Class(JFC)  Java2 Security Model  Java Plug-In  JavaBeans Component API  JDBC(Java DataBase Connectivity)  Java RMI(Remote Method Invocation)  Java IDL(Interface Definition Language) 7
  8. 8. Java EE(Enterprise Edition) Java SE를 확장하여 구성한 자바 서버측 기술로서, 다중 구조(Multi- tier)의 응용 프로그램을 개발하고 실행할 수 있는 환경을 제공  Servlets  JSP(Java Server Page)  EJB(Enterprise JavaBeans)  JNDI(Java Naming and Directory Interface)  Java IDL & CORBA  RMI over IIOP  Java Connector for EIS(Enterprise Information System)  JDBC(Java DataBase Connectivity)  Message Service  Transaction Service  JavaMail 8
  9. 9. Java ME 핸드폰이나 PDA 등 소형의 내장(Embeded) 기기에서 실행될 자바 플랫 폼 - J2ME 플랫폼은 KVM(Kilobytes Virtual Machine)이라는 작은 규모 의 자바 가상 기계를 제공하고 있으며, 소규모의 기계에 적합한 API 셋(Configuration)과 프로파일 등으로 구성되어 있다 9
  10. 10. JDK환경 설정 및 설치(2)  JDK의 설치확인  java –version  java  javac  JDK의 다운로드  http://java.sun.com 사이트이용  JDK설치와 환경설정  JAVA_HOME 설정  PATH 의 설정 %JAVA_HOME%bin 10
  11. 11. Eclipse와 편집기환경  Eclipse  Open Source로 개발되는 IDE  일반적으로 실무 개발자들이 거의 사용  http://www.eclipse.org이용  NetBeans  Sun에서 중점적으로 개발하는 IDE  JDK번들로 같이 포함해서 사용  기타  Editplus  UltraEdit  Notepad  etc 11
  12. 12. 자바 프로그램 만드는 순서  확장자가 .java인 소스 파일 작 성  컴파일을 통해 .class파일 만들 기  실행 12
  13. 13. HelloWorld.java public class HelloWorld{ public static void main(String[] arg){ System.out.println("Hello World!"); } } 13
  14. 14. About HelloWorld(1)  1단계 자바코드만들기  HelloWorld.java  2단계 컴파일  javac HelloWorld.java  3단계 실행  java HelloWorld 14
  15. 15. Compile  소스코드를 javac 명령어를 사용하여 bytecode를 생성하는 단계를 의미 합 니다. bytecode 란 인간이 아닌 기계가 알아 들을 수 있는 기계어 코드를 의 미. 15
  16. 16. Load Java class file  모든 프로그램은 실행 되기 전에 우선적으로 메모리상으로 올라옵니다.  이 과정은 실제 디스크에선 메모리상으로 올려주는 클래스로더(ClassLoader)란 것에 의해 수행  클래스로더는 디스크,네트워크 상에 있는 어플리케이션과 애플릿을 실행가능한 상태로 만듭니다. 자바에서 는 Class, ClassLoader라는 API 를 사용해서 메모리상에 올라와 있는 자바프로그램을 제어할 수도 있다  Each Java class must be loaded by a class loader. When the JVM is started, three class loaders are used:-  Bootstrap class loader  loads the core Java libraries, i.e. core.jar, server.jar etc. in the <JAVA_HOME>/lib directory. This class loader, which is part of the core JVM  Extensions class loader  loads the code in the extensions directories (<JAVA_HOME>/lib/ext or any other directory specified by the java.ext.dirs system property  System class loader  loads code found on java.class.path, which maps to the system CLASSPATH variable.  all user classes are loaded by the default system class loader 16
  17. 17. 17
  18. 18. 바이트 코드 검증기  The code adheres to the JVM specification  The code does not violate system integrity  The code causes no operand stack overflows or underflows  The parameter types for all operational code are correct  No illegal data conversions (the conversion of integers to pointers) have occurred 18
  19. 19. Applets and Applications  Application – Runs in the operating system  Applet – Runs in a browser, does smaller tasks  "Programs" – Applies to applications and applets 19
  20. 20. Common Problems 1  Compiler Problems Not compiled. No .class file.  'javac' is not recognized as an internal or external command, operable program or batch file ->Update the PATH variable  Errors ->verify the program, fix any errors that you detect, and try again  testing.java:14: `;' expected. System.out.println("Input has " + count + " chars.") ^ 1 error  while (System.in.read() != -1) count++ System.out.println("Input has " + count + " chars."); testing.java:13: Invalid type expression. count++ ^ testing.java:14: Invalid declaration. System.out.println("Input has " + count + " chars."); ^ 2 errors  Greeting.java:4: cannot resolve symbol symbol : method printl (java.lang.String)  the compiler warns you each time you use a variable that has not been initialized testing.java:13: Variable count may not have been initialized. count++ ^ testing.java:14: Variable count may not have been initialized. System.out.println("Input has " + count + " chars."); ^ 2 errors  TestGreet.java:4: Public class TestGreeting must be defined in a file called "TestGreeting.java 20
  21. 21. Common Problems 2  Runtime Problems  Not Run  Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp -> change your CLASSPATH variable  Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class -> the argument is the name of the class  Can’t find class XXX -> ex) public class TestGreet{ … =>TestGreet.class java TestGreeting  Exception in thread "main" java.lang.NoSuchMethodError: main -> every application must contain a main method, right main signature  The Java VM requires that the class you execute with it have a main method at which to begin execution of your application. 21
  22. 22. WelcomeJava.java //code WelcomeJava.java 1 ://이 프로그램은 WelcomJava 입니다. 2 : 3 :public class WelcomeJava 4 :{ 5 : public static void main(String[] args) 6 :{ 7 : System.out.println("Welcome to Java World ^^ "); 8 : System.out.println("자바 세상에 오신걸 환영합니다. ^^ "); 9 :} 10 :}  the most basic form of a class definition is: class name { . . . }  a main method signature public static void main(String[] args) {}  Use semicolon at the end of an action 22
  23. 23. Applet과 Java프로그램 import java.applet.*; import java.awt.*; public class HelloApplet extends Applet { public void paint(Graphics g){ g.drawString("Hello World", 100, 100); } } <html> <body> <applet codebase="." code="HelloApplet.class" name="HelloApplet" width="320" height="240"> </applet> </body> </html> 23
  24. 24. Java 주석처리  주석이란 자신이나 다른 사람들이 보기 편하도록 프로그램에 달아두 는 설명.  자바에서 지원하는 주석 처리 방법은 세 가지가 있다.  1. // 한 라인만을 주석으로 처리하는 경우  2. /* … */ 여러 라인 혹은 한 라인을 주석으로 처리하는 경우  3. /** … */ Document 생성시 사용하는 주석 =>javadoc tool 24
  25. 25. 클래스의 선언  Basic syntax of a Java class: <modifiers> class <class_name> { [<attribute_declarations>] [<constructor_declarations>] [<method_declarations>] } 예제: Elevator.java  {, }의 쌍은 정확히 일치해야 한다.  eclipse의 자동 검사 기능  모든 자바 프로그램의 가장 기본 요소 a class is a description of an object 25
  26. 26. main()메쏘드(1)  라인 5는 main 메쏘드라고 부르는 부분  main() 메쏘드는 쉽게 생각해서 interpreter 인 java 명령 어를 실행하는 동안 가장 먼저 실행 되는 부분  만약 Application 에서 main() 메쏘드가 없다면 Application은 절대로 실행 될 수 없음  Application의 시작 = 특정 클래스의 main()실행 26
  27. 27. main()메쏘드(2)  public : 영어 사전에 있는 의미 그대로 해석하시면 됩니다.  자바 프로그램에서는 범위(Scope)를 나타내는 단어 입니다.  static : 사전적인 의미로 정적인, 움직이지 않는 이라는 의미를 가지고 있습니다.  static은 객체에 대한 개념이 완성된 후에 자세히 살펴 볼 것입니다.  void : ‘텅 빈’이라는 의미로 리턴 값을 나타냅니다.  리턴 값이라는 것은 메쏘드의 실행결과로 어떤 결과를 출력하는 가를 의미합니다.  main() 메쏘드의 경우는 무조건 구문이 public static void main(String[] args){… }와 같이  고정되어 있으므로 신경 쓰지 않아도 됩니다.  String[] args : String 은 프로그램 상에서 나오는 문자열을 칭하는 단어 입니다.  [] 는 배열을 의미합니다. 27
  28. 28. 기본 자료형과 연산자/제어 문 28
  29. 29. 식별자와 예약어  식별자(Identifier)  프로그래머가 직접 만들어줘야 하는 이름  예: 변수명, 클래스명, 메쏘드명 등  대문자, 소문자, 숫자, _, $등, 숫자는 식별자의 첫 문자로 사용될 수 없음 =>식별자 예  예약어(Keyword)  프로그래밍 언어에 미리 정의된 의미있는 단어  예약어는 식별자로 사용하지 않음 29
  30. 30. java keywords 30
  31. 31. 변수(Variable)와 상수(Constant)  값(Value)  데이터(Data) 자체  예: 1, 0, 20.5, true, ‘a’  자료형(Type)  데이터(Data)의 종류  예: 정수(Integer), 실수(Float, Double), 문자(Character), 논리 (Boolean – True/False), 문자열(String) 등  Java의 모든 데이터 값들은 타입을 가짐  저장될 메모리와 저장 공간 결정  해당 값에 적용될 연산을 결정  프로그램의 에러 점검 31
  32. 32.  변수(Variable)  데이터를 저장할 메모리의 위치를 나타내는 이름  데이터 자체는 아님  변수의 선언 (Declaration) • 변수를 사용하기 위해서는 사용 전에 미리 선언해야 함 • Type Variable1, Variable2, … ; • int numberOfItems, numberOfTitles; • Boolean isHoliday;  초기화(Initialization) • 변수에 최초의 값을 할당하는 것 1. numberOfItems = 0; // 오른쪽 표현의 값을 왼쪽 변수에 할당 2. isHoliday = false; • 보통 변수의 선언과 동시에 초기화를 함 1. float averageOfScores = 65.4; 2. String companyName = “Bit Academy”; • 초기화 후에 값이 변할 수도 있음  變數  같은 타입의 데이터만 저장할 수 있음 • isHoliday = 1; // COMPILE TIME ERROR 32
  33. 33. 변수(Variable)와 상수(Constant)  상수(Constant)  변경될 수 없는 고정된 데이터  常數  코드의 이해와 변경이 쉬움  분산된 상수로 인한 에러를 방지  정의 • “final”키워드를 사용해서 대문자로 표현함  Final double PI = 3.1416;  Final int MAXIMUM_SPEEN = 240; 33
  34. 34. 문자열 상수  n : 새로운 라인으로 이동한다.  t : tab 간격만큼 건너뛴다.  ” : “(쌍따옴표)를 표시할 때 사용  b : Backspace 를 의미한다.  r : Carriage 리턴을 의미한다.  ’ : ‘(Single quote )를 의미  : BackSlash 의미 34
  35. 35. 자바의 자료형  기본 자료형(primitive data type)  최소 단위의 자료형  다른 자료형으로 분해되지 않음  메쏘드가 없이 값만 가짐  int, fload, double, char 등  참조 자료형(reference data type)  여러 자료형들의 집합으로 구성된 클래스의 객체를 참조  데이터와 메쏘드를 가짐  String, Vector, Integer 등 35
  36. 36. 자바의 자료형 – 기본 자료형 36
  37. 37. 자바의 자료형 – 기본자료형 VS 참조자료형 37
  38. 38. 자료형 변환  자료형 변환  하나의 자료형을 다른 자료형으로 바꾸는 행위  자료형의 변화없이 하나의 변수에서 다른 변수로 값 할당 불가  Boolean isHoliday = 1; // COMPILE TIME ERROR  변환규칙  암묵적 자료 유형 변환(implicit casting) : 자료의 범위가 좁은 자료형에 서 넓은 자료형으로의 변환은 시스템이 자동으로 행함  명시적 자료 유형 변환(explicit casting) : 자료의 범위가 넓은 자료형에 서 좁은 자료형으로의 변환은 시스템에서 자동으로 수행할 수 없으며 프 로그래머가 강제로 변환해야 함 int i = 101; long l = 101L; l = i; // No Problem i = l; // Compiler ERROR i = (int) l; // Now, it’s OK. 38
  39. 39. 연산자  연산자의 우선순위  최우선 연산자 . [] () ; ,  단항 연산자: +/-,++/--  산술 연산자: +,-,*,/,%  Shift 연산자: <<, >>, <<<  >>, >>>, <<  관계연산자: >,<,<=, ==, !=  비트연산자: &, ^, |  논리연산자: &&, ||  삼항연산자: 조건항? 항1: 항2  배정대입연산자: = , += - > sun 275 4-7 39
  40. 40. 40
  41. 41. 41
  42. 42. 연산자(1)  수학적인 연산  + (더하기), - (빼기) , * (곱셈) , / (나눗셈) , % (나머 지)  %는 나머지를 구할 때 사용할 수 있습니다. int a = 9%2 로 하면 a 의 값은 1 이 됩니다. 42
  43. 43. 관계 연산자(2)  >, >= , < , <=, ==, !=  앞의 넷과는 달리 ‘== ‘이나 ‘!= ’는 생소한 연산자 입 니다.  ‘A == B‘는 A 와 B 가 같은 가를 판단합니다. 만약 A 와 B 가 같다면 boolean 의 값으로 true 값을 가지게 됩 니다.  ‘A != B ‘는 A와 B 가 서로 다른 가를 검사합니다. 이것 은 A와 B 가 다른 값을 갖는 경우에 true 값을 가지게 됩 니다. 43
  44. 44. 정수의 사칙연산 //code NumberEx.java 1 :public class NumberEx 2 :{ 3 :public static void main(String[] args) 4 :{ 5 : int num1 = 10; 6 : int num2 = 3; 7 : 8 : int num3 = num1 + num2; 9 : int num4 = num1 - num2; 10 : int num5 = num1 * num2; 11 : int num6 = num1 / num2; 12 : 13 : System.out.println("num1 과 num2 의 합 : "+num3); 14 : System.out.println("num1 과 num2 의 차 : "+num4); 15 : System.out.println("num1 과 num2 의 곱 : "+num5); 16 : System.out.println("num1 과 num2 의 나눗셈 : "+num6); 17 : 18 : } 19 :} 44
  45. 45. char 하나의 글자 1 :public class CharEx 2 :{ 3 : public static void main(String[] args) 4 : { 5 : char a='J'; 6 : char b='A'; 7 : 8 : System.out.println(a + "AV" + b); 9 : 10 : } 11 :} 45
  46. 46. boolean 참과 거짓 //소스 BooleanEx.java 1 :class BooleanEx 2 :{ 3 : public static void main(String[] args) 4 : { 5 : boolean a = true; 6 : boolean b = false; 7 : 8 : System.out.println(a); 9 : System.out.println(b); 10 : } 11 :} 46
  47. 47. 문자로 자료형을 구분하는법  long 타입의 숫자 2 를 선언 할 때는 뒤에 ‘L’혹은 ‘l’을 붙여 줍니다.  long v = 2L;  float 타입의 숫자 2 를 선언 할 때에는 뒤에 ‘F’혹은 ‘f’ 를 붙여줍니다.  float v = 2F;  double 타입의 숫자 2 를 표현할 때에는 ‘D’혹은 ‘d’를 붙여 줍니다.  double v = 2D; 47
  48. 48. //code RelationTest.java 1 :public class RelationTest 2 :{ 3 : public static void main(String[] args) 4 : { 5 : int a = 3; 6 : int b = 5; 7 : int c = 3; 8 : 9 : System.out.println("a 와 b 가 같은 값인가?"); 10 : boolean value= (a==b); //구분을 위해서 ( ) 사용 11 : System.out.println(value); 12 : 13 : System.out.println("b와 c는 다른 값인가?"); 14 : boolean value2 = (b!= c); 15 : System.out.println(value2); 16 : } 17 :} 48
  49. 49. 조건연산 연산자 의미 사용법 && and A && B A 가 true 이고 B 역시 true 일때만 true (만약 A 가 false 이면 B는 계산하지 않는다) & and A&B A 가 true 이고 B 역시 true 일 때만 true ( A 값에 상관없이 B값이 true 인지 항상 검사한다.) || or A || B A 나 B 둘 중에 하나만 true 면 true (A 값이 true 이면 B값은 검사하지 않는다.) | or A|B A 나 B 둘 중에 하나만 true 면 true (A 값에 관계없이 B 값도 검사한다.) 49
  50. 50. 조건연산의 사용처  각종 제어문(if)처리  데이터의 검사  로직의 처리 50
  51. 51. If문을 통한 조건 처리 if(조건){ if(조건){ }else if(다른 조건1){ }else{ }else if(다른 조건2){ } }else{ } 51
  52. 52. // code IfExample.java 1 :public class IfExample 2 :{ 3 : public static void main(String[] args) 4 : { 5 : int a = 10; 6 : int b = 20; 7 : int c= 20; 8 : 9 : if(a > b) 10 : System.out.println("a가 b 보다 큰 수입니다"); 11 : 12 : if(a < b ) 13 : System.out.println("a가 b 보다 작은 수 입니다"); 14 : 15 : if(b <= c) 16 : System.out.println("b는 c 보다 작거나 같은 수 입니다"); 17 : 18 : if(c >= a) 19 : System.out.println("c는 a 보다 크거나 같은 수 입니다"); 20 : } 21 :} 52
  53. 53. switch(좀더 간단한 분기) switch(int 호환가능변수){ case (값1) : statement; . . break; case (값2) : statement; . . break; . . . default : break; } 숫자 혹은 문자로 분기문을 제어하는 방법 53
  54. 54. //code SwitchEx.java 1 :public class SwitchEx 2 :{ 3 : public static void main(String[] args) 4 : { 5 : //0에서 10미만의 수를 임의로 (random)하게 생성한다. 6 : int target = (int)(Math.random()*10); 7 : 8 : System.out.println("나눌 대상 : "+target); 9 : 10 : int odd = target%3; 11 : 12 : switch(odd){ 13 : case 0 : 14 : System.out.println(" 나머지는 0 입니다"); 15 : break; 16 : case 1 : 17 : System.out.println(" 나머지는 1 입니다 "); 18 : break; 19 : case 2 : 20 : System.out.println(" 나머지는 2 입니다"); 21 : break; 22 : } 23 : } 54 24 :}
  55. 55. for루프 for (초기화 조건 ; 조건문 ; 변환 조건) { // your code goes here } 55
  56. 56. 자동증감연산 1 :public class AutoOperator 2 :{ 3 : public static void main(String[] args) 4 : { 5 : int a =0; 6 : int b=10; 7 : 8 : //자동 중가 연산 9 : // a 값은 0 이라고 출력하지만 값은 증가 됩니다. 10 : System.out.println("0에서 출력하고 증가하기 : "+ a++); 11 : // a 값 = 1 확인 하기 12 : System.out.println("증가한 결과 값 확인하기 : "+ a); 13 : // a 값을 일단 증가하고 출력하기 14 : System.out.println("1에서 증가 후에 값 출력하기 : "+ ++a); 15 : 16 : System.out.println("-------------------------------"); 17 : //자동 감소 연산 18 : //b 값은 10이라고 출력하고 값은 9 로 변한다. 19 : System.out.println("10에서 출력후 감소하기 : "+ b--); 20 : // 감소한 값 b= 9 로 출력하기 21 : System.out.println("감소한 값 확인하기 "+ b); 22 : // 우선 감소하고 출력하기 23 : System.out.println("9에서 감소한 후에 출력하기 : "+ --b); 24 : } 56 25 :}
  57. 57. 루프연습(1) //code ForEx.java 1 :public class ForEx 2 :{ 3 : public static void main(String[] args) 4 : { 5 : //10번 동안 반복하겠다는 의미의 for 루프 6 : for(int i=0; i < 10 ; i++){ 7 : 8 : //10번 동안 실행될 부분 9 : System.out.println("Hello World "+ i); 10 : } 11 : } 12 :} 57
  58. 58. for 루프의 다양한 형태 int i=0; for( ; i < 10 ; i = i+1){ System.out.println("Hello World "+ i); } int i=0; for( ; i < 10 ; ){ System.out.println("Hello World "+ i); i++; } 58
  59. 59. while While 구문 for 구문 int a =0; for(int a=0; a<10; a++){ while( a< 10){ ---doSomething--- ---doSomething---- } a++; } 59
  60. 60. //code WhileEx.java 1 :public class WhileEx 2 :{ 3 : public static void main(String[] args) 4 : { 5 : int a=0; 6 : 7 : while (a <= 10) 8 : { 9 : System.out.println("a 의 값 : "+ a); 10 : a++; 11 : } 12 : } 13 :} 60
  61. 61. do~ while  //code DoWhileEx.java  1 :public class DoWhileEx  2 :{  3 : public static void main(String[] args)  4 :{  5 : int age= 16;  6 :  7 : do{  8 : System.out.println("무조건 실행됩니다.");  9 : }while(age > 20);  10 :}  11 :} 61
  62. 62. break와 continue  break  루프의 중간에 벗어나는 방법  특정 조건에 맞으면 루프를 벗어나게 설정  continue  건너뛰게 하는 방법  특정조건일 경우에만 생략하고 싶을 때 쓰는 방법 62
  63. 63. 1 :public class BreakEx 2 :{ 3 : public static void main(String[] args) 4 : { 5 : //10번 동안 반복하겠다는 의미의 for 루프 6 : for(int i=0; i < 10 ; i = i+1){ 7 : 8 : if(i == 4) //i가 4가 되었을때 루프를 벗어난다. 9 : break; 10 : 11 : System.out.println("Hello World "+ i); 12 : } 13 : 14 : System.out.println(" 루프를 벗어 났습니다 "); 15 : } 16 :} 63
  64. 64.  1 :public class ContinueEx  2 :{  3 : public static void main(String[] args)  4 :{  5 : //10번 동안 반복하겠다는 의미의 for 루프  6 : for(int i=0; i < 10 ; i = i+1){  7 :  8 : if(i == 4){ //i가 4가 되었을때만 건너 뛴다.  9 : System.out.println("i 값이 4 이므로 건너 뜁니다.");  10 : continue;  11 : }  12 :  13 : System.out.println("Hello World "+ i);  14 : }  15 :  16 : System.out.println(" 루프를 벗어 났습니다 ");  17 : }  18 :} 64
  65. 65. break와 continue  break  루프의 중간에 벗어나는 방법  특정 조건에 맞으면 루프를 벗어나게 설정  continue  건너뛰게 하는 방법  특정조건일 경우에만 생략하고 싶을 때 쓰는 방법 65
  66. 66. 1 :public class BreakEx 2 :{ 3 : public static void main(String[] args) 4 : { 5 : //10번 동안 반복하겠다는 의미의 for 루프 6 : for(int i=0; i < 10 ; i = i+1){ 7 : 8 : if(i == 4) //i가 4가 되었을때 루프를 벗어난다. 9 : break; 10 : 11 : System.out.println("Hello World "+ i); 12 : } 13 : 14 : System.out.println(" 루프를 벗어 났습니다 "); 15 : } 16 :} 66
  67. 67.  1 :public class ContinueEx  2 :{  3 : public static void main(String[] args)  4 :{  5 : //10번 동안 반복하겠다는 의미의 for 루프  6 : for(int i=0; i < 10 ; i = i+1){  7 :  8 : if(i == 4){ //i가 4가 되었을때만 건너 뛴다.  9 : System.out.println("i 값이 4 이므로 건너 뜁니다.");  10 : continue;  11 : }  12 :  13 : System.out.println("Hello World "+ i);  14 : }  15 :  16 : System.out.println(" 루프를 벗어 났습니다 ");  17 : }  18 :} 67
  68. 68. Java의문자열과 API사용법 68
  69. 69. 자바의 간단한 문자계산 1 :class AddString 2 :{ 3 : public static void main(String[] args) 4 : { 5 : String a = "Hello "; 6 : String b = "JAVA "; 7 : 8 : System.out.println(a+b); 9 : } 10 :} 69
  70. 70. 문자열연산 1 :class StringEx 2 :{ 3 : public static void main(String[] args) 4 : { 5 : String a = "안녕 A입니다 "; 6 : 7 : String b = "이건 B입니다 "; 8 : 9 : String c = a + b; 10 : 11 : System.out.println(a); 12 : System.out.println(b); 13 : System.out.println(c); 14 : } 15 :} 70
  71. 71. new를 이용한 문자열 생성 1 :class StringEx2 2 :{ 3 : public static void main(String[] args) 4 : { 5 : String a = new String("Hello"); 6 : String b = new String("Hello"); 7 : 8 : System.out.println(a); 9 : System.out.println(b); 10 : } 11 :} 71
  72. 72. API문서  프로그램 작성시점에 참고하는 문서  자료구조 혹은 Sun에서 제공하는 여러기능을 설명한 문 서  각 버전별로 작성  필요한 경우에 javadoc명령어를 통해서 생성가능 72
  73. 73. 73
  74. 74. 문자열 주요 메쏘드(함수) String concat(String target) 문자열을 연결시켜서 새로운 문자열을 만들 수 있다. String substring(int start,int leng) 문자열을 start 위치에서부터 leng 길이 만큼 잘라낸다. int length() 문자열의 길의를 구할 때 사용한다. String toUpperCase() 문자열을 모두 대문자로 바꿔준다. String toLowerCase() 문자열을 소문자로 바꿔준다. char charAt(int I) 문자열중에 I 번째 있는 char 를 반환한다. int indexOf(String target) target 문자열이 있는 위치를 반환한다. boolean equals(String target) target 문자열의 내용과 같은지를 비교한다.( 매우 중요합니다.) void trim() 문자열 뒤의 공백을 제거한다. 74
  75. 75. 문자열 메쏘드 연습 //code StringMethods.java 1 :public class StringMethods 2 :{ 3 : public static void main(String[] args) 4 : { 5 : String str1 = new String("emailaddress@company.co.kr" ); 6 : String str2 = "123-4567" ; 7 : //결과로 사용할 빈 문자열 8 : String str3 = new String(""); 9 : 10 : //문자열 붙이기 11 : str3 = str1.concat(str2); 12 : 13 : System.out.println(str3); 14 : //문자열 자르기 맨 처음 부터 5 글자를 자르자 15 : System.out.println(str1.substring(0,5)); 75 16 : //문자열 길이
  76. 76. 문자열의 순서  String에서는 문자의 순서(index)를 따질때 0 에서 부터 시작합니다.  H e l l o (공백) W o r l d !  0 1 2 3 4 5 6 7 8 9 10  라인 15에서는 0에서부터 5 글자를 자르기 때문에 email 까지만 결 과가 나옵니다.  다만 length() 는 문자열의 길이를 세기 때문에 1에서부터 시작합니 다. 76
  77. 77. Java의 배열 77
  78. 78. 배열이란?  특정한 자료들을 담을 수 있는 바구니  동일한 형태의 자료만 들어갈 수 있다.  처음 초기화 할 때 미리 크기를 지정한다. 78
  79. 79. 배열과 서랍장의 공통점  1. 서랍장에는 순서가 있다.  -- 다만 배열에는 0 에서 부터 시작한다.  2. 서랍장에는 특정물건만 수납한다.  -- 배열에는 같은 형의 자료만 들어간다.  3. 옷장 내부는 비어 있을 수도 내용물이 있을 수도 있다.  -- 선언된 배열의 내부가 비어있을 수 있다.  4. 옷장은 자신만의 크기를 가지고 있다.  ---옷장이 3단이면 4번째 서랍은 없다. 79
  80. 80. 배열의 선언  int[] array = …  int array[] = …  []는 배열이라는 것을 의미 80
  81. 81. 배열을 초기화 하는 방법(1)  직접 초기화 하기  {}; 를 이용해서 선언  String[] array = { “속옷 “, “양말 “, “바지”} ; - 뒤에 ; 이 붙습니다.  int[] intArray = {1,2,3,4,5};  일단 선언하고 나중에 하기 81
  82. 82. 배열을 초기화 하는 방법(2) String[] array = new String[3]; --- 크기가 3 단으로 된 옷장 …. array[0] = “속옷 “; array[1] = “양말 “; array[2] = “바지 “; int[] intArray = new int[3]; intArray[0] = 1; intArray[1] = 2; intArray[2] = 3; 82
  83. 83.  1 :public class ArrayEx  2 :{  3 : public static void main(String[] args)  4 : {  5 : //숫자 배열 선언  6 : int[] intArray={ 1,3,5,7 };  7 :  8 : System.out.println("Array's 0 : "+intArray[0]);  9 : System.out.println("Array's 0 : "+intArray[1]);  10 : System.out.println("Array's 0 : "+intArray[2]);  11 : System.out.println("Array's 0 : "+intArray[3]);  12 :  13 : }  14 :} 83
  84. 84. 배열의 길이를 구하는 방법  int array = array.length;  n번째 배열의 요소를 꺼내는 법  array[n-1] 다차원배열  [][]과 같이 다차원배열선언 가능  [0][1]과 같은 인덱스 순서로 접근 84
  85. 85. public class ArrayEx1 { public static void main(String[] args){ int[] arr = new int[10]; arr[3] = 3; arr[4] = 4; for(int i = 0; i < 10 ; i++){ System.out.println(arr[i]); } System.out.println("------------------"); String[] arr2 = {"A","B","C","D","E"}; for(int i = 0; i < arr2.length; i++){ System.out.println(arr2[i]); } } } 85
  86. 86. 배열의 복사  System.arrayCopy()를 통해 복사 System.arraycopy( 원본배열,복사를 시작할 원본 요소위치(숫자),복사할 배열 , 복사를 받을 때 위치, 원본배열.length); public class ArrayEx2 { public static void main(String[] args){ String[] arr = {"봄옷","여름옷","가을옷"}; String[] arr2 = new String[arr.length + 1];//3+1 System.arraycopy(arr, 0, arr2, 0, arr.length); arr2[3] = "겨울옷"; System.out.println(arr + ":"+ arr.length); arr = arr2; System.out.println(arr + ":"+ arr.length); for(int i = 0; i < arr.length ; i++){ System.out.println(arr[i]); } } } 86
  87. 87.  public class ArrayEx2 {  public static void main(String[] args){  String[] arr = {"봄옷","여름옷","가을옷"};  String[] arr2 = new String[arr.length + 1];//3+1  System.arraycopy(arr, 0, arr2, 0, arr.length);  arr2[3] = "겨울옷";  System.out.println(arr + ":"+ arr.length);  arr = arr2;  System.out.println(arr + ":"+ arr.length);   for(int i = 0; i < arr.length ; i++){  System.out.println(arr[i]);  }  }  } 87
  88. 88.  public class ArrayEx4 {  public static void main(String[] args) {  int[][] arr = new int[6][];  arr[0] = new int[1];  arr[1] = new int[2];  arr[2] = new int[3];  arr[3] = new int[4];  arr[4] = new int[1];  arr[5] = new int[1];   int value = 0;   for(int i = 0 ; i < arr.length ; i++){  for(int j = 0;j < arr[i].length;j++){  arr[i][j] = value;  value++;  }  }  for(int i = 0 ; i < arr.length ; i++){  for(int j = 0;j < arr[i].length;j++){  System.out.println(arr[i][j]);  }  System.out.println("---------");  }  }  } 88
  89. 89. OOP 클래스 만들기 89
  90. 90. OOP프로그래밍  모든 것을 객체로 추상화해서 생각  현실세계를 객체라는 것으로 프로그램상으로 반영하는 방식  각 객체간의 통신을 통해서 결과를 처리하는 방식  현재 및 미래의 프로그래밍 언어의 패러다임 90
  91. 91. 객체지향 프로그래밍의 절차  1. 우선 프로그램이 쓰이는 목적을 생각하여 어떤 객체들을 만들어 야 하는지 결정한다.  2. 각 객체들이 어떤 특징(속성과 동작)을 가지고 있을 지를 결정한 다.  3. 객체들 사이에서 메시지를 주고 받도록 만들어 준다. 중요1*For each object that you see, ask yourself two questions: “What possible states can this object be in?" "What possible behavior can this object perform?".  Ex) Desktop Lamp , desktop radio Software objects are conceptually similar to real-world objects 중요2*data encapsulation ( Information Hiding ) 91
  92. 92. OOP를 위해 필요한 능력  필요한 프로그램의 적절한 표현능력  각 객체와의 관계를 정의하는 능력  객체와 객체를 연결해 나가는 능력  현실적인 상황을 프로그램으로 옮기는 추상화 능력 92
  93. 93. 객체의 구성  속성(Attribute)  동작(Behavior)  모든 객체는 자신의 책임(Responsibility)을 가진다.  모든 객체는 서로 메시지(Message)를 주고 받는다. 93
  94. 94. 추상화와 클래스  내가 필요한 객체를 설계해서 프로그램이 인식하게 하는 방법  클래스를 설계한다.  클래스로 부터 객체를 생성한다.  생성된 객체는 클래스에 정의한 속성과 동작을 가지고 동작한다. 94
  95. 95. 클래스 = 객체를 생성하는 틀  추상화 를 통한 객체모델링  JVM이 인식하는 단위  모든 객체들의 생산처 A class is the blueprint from which individual objects are created. 95
  96. 96. 클래스로 부터 객체를 생성하는 것의 의미  JVM이 프로그래머가 선언한 자료를 자신의 것으로 인정 하는 것  프로그래머가 선언한 모든 동작,속성을 프로그램상에서 실행 가능하게 하는 것  new 키워드를 통해 객체를 생성하고, 이것을 메모리 상 으로 옮겨서 모든 연산작업을 수행하게 준비하는 것 96
  97. 97. 클래스의 선언  접근제한 (public, default, protected, private)  클래스의 타입 (static, nonstatic)  클래스의 이름  {  } <modifiers> class <class_name> { [<attribute_declarations>] [<constructor_declarations>] [<method_declarations>] } 예제: Elevator.java 97
  98. 98.  Access Levels Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N private Y N N N 98
  99. 99. 클래스와 객체의 관계 99
  100. 100. 객체(object/instance)  클래스로부터 생성  지정된 속성의 값은 각 객체마다 다르게 만들 수 있다.  모든 객체는 클래스에 지정된 동작을 동일하게 수행한다.  각 객체의 속성 = 인스턴스 변수  각 객체의 동작 = 메쏘드(method) 100
  101. 101. 인스턴스변수  각 객체마다 고유하게 가질 수 있는 속성들 의미  자료형 + 레퍼러스로 선언  클래스 선언시점에 초기화할 수도 있다.  동작에 의해서 변경되는 것이 바람직함 101
  102. 102. 인스턴스 변수(instance variables)  추상화해서 클래스에 선언  객체의 속성을 의미  객체가 살아있는 동안 같이 유지될 속성  다양한 방식으로 초기화 가능  생성시점에 객체의 속성정의(생성자메쏘드)  메쏘드를 통한 속성변경 가능 102
  103. 103. 메쏘드(method)  프로그램상으로 동작할 방법을 정의  접근제한을 통해서 내부/외부에서 접근 가능  객체와 객체간의 통신 = 메쏘드 호출  모든 OOP프로그램은 객체와 객체간의 메시지 전송이므 로, 필요한 데이터를 넘기거나 결과 데이터를 받을 수 있 다. 103
  104. 104. 메쏘드의 선언구조  접근제한  리턴타입(넘겨줄 결과가 없으면 void)  메쏘드의 이름 (주로 동사로 표현)  메쏘드가 가공한 데이터(파라미터)  {  로직  리턴 타입이 있는 경우에는 return 구 문  } 104
  105. 105. 메쏘드(Method)  메쏘드  객체의 행동을 정의하는 procedure or function  적용대상: 특정 객체(object) or 전체 클래스(class)  구문:  public return_type methodName(0+ parameters){..}  호출방식: “dot(.)” 연산자  objectName.methodName(arguments)  매개변수(parameters)  메쏘드를 선언할 때 괄호 안에 표현된 Input 값을 나타내는 변수: (type1 name1, type2 name2, … )  메쏘드 호출에서 들어가는 구체적인 값은 인자(Argument)라고 함  반환값 자료형(return_type)  메쏘드는 0개 혹은 1개의 값을 Output으로 반환할 수 있음  반환값이 없을 때: void  반환값이 있을 때: int, boolean, Car, …  반환되는 값은 메쏘드 선언에서 정의된 반환값의 유형과 일치해야 함 105
  106. 106. 메쏘드(Method) 선언 예 호출 예 class Car { public class CarTest { … public static void main() public void setSpeed(int s) { { speed = s; Car mcqueen = new Car(); } … public int getSpeed() { mcqueen.setSpeed(300); return speed; System.out.println(mcqueen.name + } “ “ + mcqueen.getSpeed()); } } 106
  107. 107. 메쏘드(Method) – 유형 및 예제 107
  108. 108. 메쏘드(Method)-유형 및 예제 3. Return값과 매개변수가 있는 method class intOp { public class intOpTest { … … public int sum(int a, int b) public static void main() { { return a+b; intOp obj1 = new intOp(); } … … int sum = obj1.sum(3,9); … 108
  109. 109. 객체(Object) 생성  객체(Object)의 생성 1. UML Diagram 등을 이용하여 클래스를 디자인한다 2. Editor 를 사용하여 Source 코드를 작성한 후 .java 파일로 저장한다. 3. 위에서 작성한 클래스를 사용할 main() method를 작성한다. § main() method는 해당 클래스 내부 혹은 다른 클래스에서 정의한다. § main() method 내에서 “new”연산자를 사용하여 객체를 생성한다. 4. javac 명령어를 사용해서 해당 Source를 컴파일하여 .class 파일을 생성한다. 5. java 명령어를 사용하여 .class 파일을 실행한다. 109
  110. 110. 객체(Object) 생성 – Class 디자인 110
  111. 111. 객체(Object) 생성 – Source 코드 생성 111
  112. 112. 객체생성 – main() method 생성 class Car { String name; int speed; public void setName(String n) { name = n; } public void setSpeed(int s) { speed = s; } public int getSpeed() { return speed; public class CarTest { } public static void main(String[] args) } { Car mcqueen = new Car(); mcqueen.setName(“ Lightning Mcqueen” ); mcqueen.setSpeed(300); System.out.println(mcqueen.name + “ “ + mcqueen.getSpeed()); } } 112
  113. 113. 객체생성 – main() method 생성 class Car { String name; int speed; public void setName(String n) { name = n; } public void setSpeed(int s) { speed = s; } public int getSpeed() { return speed; } } public class CarTest { public static void main(String[] args) { Car mcqueen = new Car(); mcqueen.setName(“Lightning Mcqueen”); mcqueen.setSpeed(300); System.out.println(mcqueen.name + ““+ mcqueen.getSpeed()); } } 113
  114. 114. 실습 – Car.java Main 함수에 아래와 같이 Hudson, carrera, master 객체를 추가 생성하고 각 객체의 이름과 스피드를 출력해 보십시오. 114
  115. 115. 실습 – TV.java /***************************************** * 아래 WatchTV 클래스의 main 메쏘드를 실행할 수 있도록, * 우측의 UML 그림을 참조하여 TV 클래스를 정의하십시오. * channel, volume, power의 초기값은 각각 7, 20, false임. ******************************************/ public class WatchTV { public static void main(String[] args) { TV tv = new TV(); tv.powerOn(); System.out.println("현재 TV 볼륨 : " + tv.getVolume()); System.out.println("현재 TV 채널 : " + tv.getChannel()); System.out.println(“채널 36번으로 변경” ); tv.setChannel(36); System.out.println(“채널 증가” ); tv.channelUp(); System.out.println("현재 TV체널 : " + tv.getChannel()); System.out.println("TV 시청 종료"); tv.powerOff(); } } 115
  116. 116. 객체(Object) 생성 – Source 코드 생성 116
  117. 117. 객체의 초기화 117
  118. 118. 레퍼런스와 객체  String a = “aaa”라는 관계에서 a를 레퍼런스라고 한다.  객체와 레퍼런스의 관계  풍선과 연결끈과 같은 관계 키워드 new  클래스로 부터 객체를 생성  생성한 객체를 메모리상의 힙영역으로 로딩시킨다.  필요가 없어지면 자동적으로 메모리상에서 삭제(자바의 GC(가비지컬렉션)기능에 의해 자동삭제) 118
  119. 119. new로 만드는 두 개의 객체  ‘==‘혹은 ‘!=‘연산의 차이  기본자료형은 무조건 같은 값을 가지면 true를 리턴  객체형 데이터(레퍼런스형 자료)는 가르키고 있는 객체 의 hashcode의 값이 같아야 true를 리턴 119
  120. 120. 참고- null  참조하고 있는 객체가 없음을 의미  객체생성을 하지 않은 상태에서 레퍼런스만 준비해둔 상 태  String a = null;  a라는 레퍼런스만 준비해둔 상태  String 클래스 타입의 객체가 필요하다는 의미 120
  121. 121. 인스턴스변수 vs 지역변수  인스턴스변수 = 전역변수  객체 전반에 걸쳐 영향력을 발휘하는 변수  객체의 메쏘드내에서 사용하는 변수  선언시점에는 null로 해도 상관없음  지역변수 = 로컬변수  메쏘드 내에서만 살아 있는 변수  선언시점에 값을 지정해야 하는 변수  {}단위에서 생사가 결정 121
  122. 122. static 키워드  변수와 같은 영역으로 저장되는 메쏘드와 변수를 선언할 때 사용  main()함수  변수 – 상수를 선언할 때 사용  메쏘드 – 객체 생성없이 바로 접근하고 싶을 경우에 사용 122
  123. 123. static의 특징  객체의 생성없이 사용하므로 편하다.  별도의 메모리 관리를 안하므로 항상 메모리를 차지하게 된다.  여러 객체에서 static으로 선언된 변수를 공유해서 쓴다.  상수로 선언해서 공유해서 사용한다. 123
  124. 124. 참고 - Overloading  생성자 메쏘드(함수)처럼 메쏘 드의 형태가 동일하지만, 입려 되는 파라미터들(parameter, arguments)의 값들이 다른 경 우에 overloading이라고 한다.  즉 하나의 클래스에 여러 개의 overloading된 메쏘드들이 존 재가능하다.  Ex: print 메소드 124
  125. 125. 생성자함수(Constructor) overloading  new 를 호출할때 파라미터(arguments)를 같이 전달해서 각 객체 생성시점에 정보를 같이 제공하는 방법  아무것도 없는 경우 기본생성자(default)  만들지 않아도 제공됨  원칙  생성자함수이름은 클래스의 이름과 같다.  리턴(반환) 값이 없다. 125
  126. 126. this()를 이용한 생성자함수  하나의 클래스에 여러 개의 생성자 함수를 정의할 수 있 다.  같은 이름의 다른 파라미터를 가진 함수를 호출하고자 할때 this()를 사용  this라는 키워드 자체는 현재의 객체를 의미하고자 할 때 사용 126
  127. 127. 127
  128. 128. 참고 - instanceof  연산자 중에 객체단위에 적용되는 연산자  A instanceof B 는 A레퍼런스가 B타입의 객체를 가르키고 있는 가를 의미  객체의 타입을 검사하기 위해 사용 128
  129. 129. 참고- this  객체형 변수(레퍼런스 자료형)에서 현재의 객체를 일컫 는 용어  String str = new String(“aaa”) 인 경우에는 현재 하나의 변수가 선언되어 그 변수를 이용해서 객체를 언급하는 것을 의미한다.  반면에 this.name = new String(“aaa”)와 같은 경우에는 현재 만들어 지고 있는 객체(즉, 풍선의 끈이 내부로 향 하는 형상)의 name이라는 속성의 값이 “aaa”라는 것을 의미하게 된다. 129
  130. 130. 자바의 상속 130
  131. 131. 상속(Inheritance)  부모의 속성과 동작을 자식에서 물려받을 수 있음  자바에서는 단일 상속만을 지원  extends키워드를 통해서 사용  일반적으로 ~ is a relationship 관계 131
  132. 132. 상속의 사용  클래스 선언 뒤에 extends 키워드를 적는다.  부모가 되는 클래스를 superclass 혹은 부모클래스라고 한다.  상속을 통해 확장된 클래스를 subclass 혹은 자식클래스라고 부른다. 132
  133. 133. 상속의 특징  타입으로 본 상속  부모 타입(클래스)는 자식 타입을 포함한다.  기능으로 본 상속  자식클래스는 부모클래스보다 많은 기능을 가질 수 있다. 133
  134. 134. 상속의 실습 134
  135. 135. 상속의 용어  extends  super  this  override 상속과 overriding  override: 올라타다, 덮어쓰다의 의미  자바에서는 method의 재정의를 의미  부모와 자식클래스 사이에서 부모의 method를 자식이 다시 정의함 135
  136. 136. 상속의 실습 – 핸드폰의 상속 public class HandPhone { public void send(String otherPhoneNum){ System.out.println(otherPhoneNum +" 으로 전화를 건다."); } public void get(){ System.out.println("전화를 받는다."); } public static void main(String[] args){ HandPhone h = new HandPhone(); h.send("01010101010"); } } 136
  137. 137. Override의 실습 public class MP3Phone extends CellPhone { public void get() { System.out.println("음악이 나옵니다."); } public void send(String phoneNum) { System.out.println("음악을 들려줍니다."+phoneNum); } } public class InternetPhone extends CellPhone { public void get() { System.out.println("인터넷을 보면서 통화합니다."); } public void send(String phoneNum) { System.out.println("동영상 통화합니다."); } } 137
  138. 138. 추상클래스(Abstract class)  abstract키워드사용  new로 객체를 만들 수 없는 클래스  반드시 추상 메쏘드가 하나이상 존재  사용시점  객체생성을 할 필요는 없으나 상속하고 싶을때  상속받은 자식이 반드시 무언가 구현하도록 하고싶을때 138
  139. 139. 추상클래스의 실습  Shape  draw(): 추상메쏘드  Circle  Rectangle  Triangle 139
  140. 140. java.lang.Object  자바의 모든 객체들의 부모 클래스  모든 클래스 선언시에는 묵시적으로 extends Object라 는 구문이 같이 존재  고유의 메쏘드를 가지고 있음  toString()  equals()  hashcode() 140
  141. 141. toString()/equals()  toString(): System.out.println()을 통해서 객체의 레퍼런 스 값을 의미할 때 동작  equals(): 필요한 경우에 다른 객체와 같은 데이터를 가 지고 있는지 검사하는데 사용 141
  142. 142. Upcasting(Promotion)과 DownCasting  casting 실제 객체와 선언된 자료형(클래스/타입)간의 관 계를 명확히 하는 것  Object a = new HelloWorld();  타입이 더 큰 범위인 경우에는 자동적으로 Up  Animal a = new Dog();  Dog a = (Dog)a;  타입이 더 작은 경우에는 Down 142
  143. 143.  Down은 반드시 앞에 ()로 처리해서 명시적으로 선언한 다.  기본자료형도 동일하게 적용된다.  int a = 10;  byte b = (byte)a; 143
  144. 144. 상속을 막는 final  클래스 선언의 final  하위 상속 금지  메쏘드 선언의 final  overriding 금지  변수 선언의 final  상수선언 144
  145. 145. 인터페이스 – 다중 상속과 세상을 보는 창  interface의 의미 – 어떤 객체들끼리 통신하는 하나 의 통신 창 (ex> USB, 키 패드, 키보드..)  자바에서의 인터페이스의 의미  다중상속을 지원하는 방 법  추상 메쏘드를 통한 강제 구현의 수단 145
  146. 146. 추상클래스 VS 인터페이스  인터페이스는 여러 경로의 수퍼타입 계층을 허용한다.  인터페이스는 다중 상속이 가능하다.  인터페이스는 public 상수나 구현이 없는 메쏘드만 포함 할 수 있다.  추상 클래스는 메쏘드의 구현을 포함할 수 있고, protected나 static메쏘드를 가질 수 있다. 146
  147. 147. 인터페이스의 생성 문법 접근제한자 + interface + 인터페이스명 + (extends super 타입 인터페이스들)  인터페이스간의 상속 public interface JobA{ … } public interface JobB{ … } public interface JobC extends JobA, JobB{ … }  클래스에서의 구현 public class A implements JobA, JobB{… } 147
  148. 148. 인터페이스의 활용 예  인터페이스간의 상속 public interface JobA{ … } public interface JobB{ … } public interface JobC extends JobA, JobB{ … }  클래스에서의 구현 public class A implements JobA, JobB{… }  상속과 같이 사용 public class A {… } public interface JobA{… } public class B extends A implements JobA{… } 148
  149. 149. 인터페이스 필드, 메쏘드  필드  public static final 로 선언  선언된 필드는 무조건 public static final로 인식한다.  메쏘드  인터페이스 자체가 객체 생성이 불가능하며, 외부에서 바라보는 역할만 하기 때문에 자동적으로 abstract 가 붙는다고 생각하면 된다. 149
  150. 150. 중첩(inner) 클래스 150
  151. 151. Inner Class 151
  152. 152. 152
  153. 153. 153
  154. 154. 중첩클래스  클래스 선언 내부에 또 다른 클래스의 선언 1 :public class Outer1 2 :{ 3 : String name; 4 : 5 : private class Inner1{ 6 : 7 : public void print(){ 8 : System.out.println("이것은 "+name+" 의 Inner클래스 입니다. "); 9 : } 10 : } 11 : 12 : public void setName(String n){ 13 : name = n; 14 : Inner1 inner = new Inner1(); 15 : inner.print(); 16 : } 17 : 18 : public static void main(String[] args) 19 : { 20 : Outer1 outer = new Outer1(); 21 : outer.setName("홍길동"); 22 : } 23 :} 154
  155. 155. static 중첩 클래스  클래스 내부에 static으로 선언된 중첩 클래스의 선언 1 : public class Outer { 2: 3 : private String name = "AAAA"; 4: 5 : static class SInner{ 6 : public void print(){ 7 : System.out.println("PRINT SINNER"); 8: } 9: } 10 : 11 : public static void main(String[] args){ 12 : 13 : Outer.SInner inner = new Outer.SInner(); 14 : inner.print(); 15 : } 16 : } 155
  156. 156. 지역 중첩 클래스 1 : public class LocalInner { 2: 3 : private String name = "LocalInner"; 4: 5 : public void print(){ 6: 7: class Inner{ 8: public void print(){ 9: System.out.println(name); 10 : } 11 : } 12 : Inner inner = new Inner(); 13 : inner.print(); 14 : } 15 : 16 : public static void main(String[] args){ 17 : LocalInner test = new LocalInner(); 18 : test.print(); 19 : } 20 : } 21 : 156
  157. 157. 익명클래스(Anonymous 클래스)  필요한 곳 어디서나 선언가능  클래스 선언뒤에 반드시 ; 필요  클래스나 인터페이스를 재정의 해서 사용 1 : interface Eatable { 2 : public void doA(); 3 : public void doB(); 4 :} 157
  158. 158. //code Outer2.java 1 :public class Outer2 2 :{ 3 : String foodName; 4 : 5 : public Outer2(String name){ 6 : foodName = name; 7 : } 8 : 9 : public void cooking(){ 10 : System.out.println("내부 클래스 생성합시다"); 11 : 12 : new Eatable(){ 13 : 14 : public void doA(){ 15 : System.out.println(foodName+" 익혀 먹기"); 16 : } 17 : 18 : public void doB(){ 19 : System.out.println(foodName+" 조림으로 먹기"); 20 : } 21 : }.doA(); // - Eatable 한 익명 객체.doA() 의 의미 22 : } 23 : 24 : public static void main(String[] args) 25 : { 26 : Outer2 out = new Outer2("콩나물"); 27 : out.cooking(); 28 : 29 : 30 : } 31 :} 158
  159. 159. Package, jar, 접근제한 159
  160. 160. 자바의 패키지  클래스의 묶음 단위  일종의 네이밍룰  접근제한과 같이 쓰여 프로그램상에서 클래스들간의 관 계를 정리할 때 사용 160
  161. 161. 패키지의 선언  클래스 선언 바깥쪽  package 패키지명  일반적으로 도메인이름의 역순으로 쓴다.  www.yahoo.co.kr  package kr.co.yahoo  javac –d 옵션을 써서 컴파일 할 수 있다. 161
  162. 162. 패키지의 사용  다른 패키지내의 클래스를 사용할 때는 import라는 키워 드 사용  import 패키지명.클래스명;  여러 개의 클래스들을 쓸 때는 *로 표시  패키지를 import하더라도 접근제한에 따라 접근이 불가 능 할 수도 있음 162
  163. 163. 접근제한자(Access Modifier)  외부에서 특정 클래스에 접근하거나, 객체변수에 접근하 거나, 메쏘드에 접근하려고 할 때 제약을 둘 수 있는 방 법  가장 기본적인 제어  pubilc: 모든 외부에서 접근 가능  private: 모든 외부에서 접근 불가  default 제한: 같이 패키지에서 사용  protected 제한: 동일 패키지, 상속구조에서 사용 163
  164. 164. jar파일  zip, tar와 같이 자바 클래스 파일들을 압축파일 형태로 보관  별도의 위치에 두고 JVM이 참조할 수 있도록 사용  jar –cvf  jar –xvf  한글 파일이름은 사용할 수 없음 164
  165. 165. 날짜와 시간, StringBuffer 165
  166. 166. 날짜관련 클래스  Calendar  Date  DateFormat  SimpleDateFormat 166
  167. 167. 자주쓰는 기능  년/월/일의 다양한 문자열 형태 표현  시간차 구하기  해당요일 혹은 마지막 날짜 구하기  특정일에 대한 요일 구하기 167
  168. 168. 숫자 포맷  NumberFormat  DecimalFormat 168
  169. 169. Wrapper 클래스  JDK1.5버전 이전까지 기본자료형과 객체형 자료형간의 변환을 처리 위한 클래스들  JDK1.5버전 이후에는 Auto boxing/unboxing개념이 도 입되어 필요하지 않음  Auto Boxing Conversion From type boolean to type From type Boolean to type boolean Boolean From type Byte to type byte From type byte to type Byte From type Character to type char From type char to type From type Short to type short Character From type Integer to type int From type short to type Short From type Long to type long From type int to type Integer From type Float to type float From type long to type Long From type Double to type double From type float to type Float Boxing type double to type From Unboxing Double 169
  170. 170. 기본자료형 Wrapper 클래스 byte Byte클래스 short Short클래스 int Integer 클래스 long Long 클래스 double Double 클래스 float Float 클래스 boolean Boolean 클래스 char Character 클래스 170
  171. 171. 문자를 기본 자료형으로 바꿀 때 기본 자료형을 문자형으로 바꿀 때 byte b = Byte.parseByte(문자열); Byte.toString(byte 값); short s = Short.parseShort(문자열); Short.toString(short 값); int I = Integer.parseInt(문자열); Integer.toString(int 값); double d = Double.parseDouble(문자열); Double.toString(double 값); long l = Long.parseLong(문자열); Long.toString(long 값); float f = Float.parseFloat(문자열); Float.toString(float 값); boolean b = Boolean.toString(boolean 값); new Boolean(문자열).booleanValue(); char c = Character.toString(char 값); String 클래스의 메쏘드 이용 171
  172. 172. StringBuffer  String과 StringBuffer의 차이  String은 연산이 일어날때 마다 새로운 객체를 만들어서 사용하 기 때문에 객체생성이 많다.  StringBuffer는 하나의 객체로 처리  String보다 StringBuffer에서 처리할 수 있는 기능의 추가  문자열 연산이 많은 작업의 경우 반드시 StringBuffer를 이용 172
  173. 173. java의 Collections 173
  174. 174. Collection의 종류  java.util.Collection: 순서에 관 계없는 객체들의 단순한 모임  java.util.Set: 중복되지 않는 수 학적인 의미의 객체들의 집합, Collections를 상속  java.util.List: 순차적 나열에 의한 순서지정이 가능한 구조, Collections를 상속  java.util.Map: key와 value를 이루어진 구조  java.util.SortedSet: 값들이 정 렬된 Set  java.util.SortedMap: key가 정 렬된 Map 174
  175. 175. 175
  176. 176. Stack 1 : import java.util.*; 2: 3 : public class StackEx { 4: 5: Stack st = new Stack(); 6: 7: public void test(){ 8: 9: for(int i = 0; i < 10; i++){ 10 : st.push(String.valueOf(i)); 11 : } 12 : System.out.println("SIZE : "+st.size()); 13 : 14 : for(int i = 0; i < 10; i++){ 15 : System.out.println(st.pop()); 16 : } 17 : } 18 : 19 : public static void main(String[] args){ 20 : StackEx ex = new StackEx(); 21 : ex.test(); 22 : } 23 : } 176
  177. 177. 1 : import java.util.*; 2: 3 : public class HashMapEx { 4: 5 : public void test(){ 6 : HashMap map = new HashMap(); 7: 8 : map.put("1", "하나"); 9 : map.put("2", "둘"); 10 : map.put("3", "셋"); 11 : map.put("4", "넷"); 12 : 13 : System.out.println("SIZE : "+map.size()); 14 : Object obj = map.get("1"); 15 : String str = (String)obj; 16 : //강제로 값만 출력하게 하는 방 17 : Iterator it = map.values().iterator(); 18 : while(it.hasNext() == true){ 19 : System.out.println( it.next() ); 20 : } 21 : } 22 : 23 : public static void main(String[] args) { 24 : 25 : HashMapEx he= new HashMapEx(); 26 : he.test(); 27 : } 28 : } 177
  178. 178. JDK1.5에서의 변화 - 제네릭기능  Collection<>로 변화  다운캐스팅을 줄일 수 있는 구조로 변화  속도에서 개선을 이루며, 개발자들의 오류를 미리 방지 하는 기능 178
  179. 179. Exception 처리 179
  180. 180. 예외의 개요  예외 : 프로그램 실행 중에 발생하는 예기치 않은 사건  예외가 발생하는 예  정수를 0으로 나누는 경우  배열의 첨자가 음수 또는 범위를 벗어나는 경우  부적절한 형 변환이 일어나는 경우  입출력을 위한 파일이 없는 경우 등  자바 언어는 프로그램에서 예외를 처리할 수 있는 기법을 제공 180
  181. 181. 181
  182. 182. 182
  183. 183. 예외의 개요 - 예외가 발생되는 예 class Error { public static void main(String[] args) { x(); // x() 메소드 호출 } static void x() { 에러 메시지 y(); // y() 메소드 호출 java.lang.ArithmeticException: / by } zero static void y() { at Error.z(Error.java:14) z(); // z() 메소드 호출 at Error.y(Error.java:9) } at Error.x(Error.java:6) static void z() { at Error.main(Error.java:3) int i = 1; int j = 0; System.out.println(i/j); // 1을 0으로 나눈다. 예외 발생 } // JVM의 묵시적인 예외 처리기 가동 } 183
  184. 184. 예외 관련 클래스  자바는 예외를 객체로 취급  예외 관련 클래스를 java.lang 패키지에서 제공  예외 관련 클래스 : 그림 9-1 참조  자바 프로그램에서는 Error, RuntimeException 클래스의 하위 클래스들을 제외 한 모든 예외를 처리하여야 한다  일반적으로 Error, RuntimeException 클래스(하위 클래스 포함)들과 연관된 예 외는 프로그램에서 처리하지 않는다  이유 : 예외를 처리하여 얻는 이득보다 예외를 처리하기 위한 노력이 너무 크기 때문 184
  185. 185. 예외 관련 클래스 - Exception 클래스  Exception 클래스의 하위 클래스 NoSuchMethodException 메소드가 존재하지 않을 때 ClassNotFoundException 클래스가 존재하지 않을 때 CloneNotSupportedException 객체의 복제가 지원되지 않는 상황에서 의 복제 시도 IllegalAccessException 클래스에 대한 부정 접근 InstantiationException 추상클래스나 인터페이스로부터 객체 생 성하려 할 때 InterruptedException 스레드가 인터럽트 되었을 때 RuntimeException 실행시간 예외가 발생할 때 185
  186. 186. 예외 관련 클래스 - RuntimeException 클래스  RuntimeException 클래스의 하위 클래스 ArithmeticException 0으로 나누는 등의 산술적인 예외 NegativeArraySizeException 배열의 크기를 지정할 때 음수의 사용 NullPointerException null 객체의 메소드나 멤버 변수에 접근할 때 IndexOutOfBoundException 배열이나 스트링의 범위를 벗어난 접근. 하위클래스로 ArrayIndexOutOfBoundsException 클래스 와 StringIndexOutOfBoundsException 클래 스를 제공 SecurityException 보안을 이유로 메소드를 수행할 수 없을 때 186
  187. 187. 예외 처리  Error 와 RuntimeException 클래스 관련 예외는 처리 효율보다는 처리에 드 는 노력이 너무 커 자바 프로그램에서 처리하지 않고 JVM에게 처리를 맡긴 다  Error 와 RuntimeException 외에 다른 클래스들과 연관된 예외들은 자바 프 로그램에서 직접 처리하여야 한다.  예외를 처리하는 방법은 두 가지  예외가 발생된 메소드 내에서 처리하는 방법(try, catch 절 사용)  예외가 발생된 메소드를 호출한 메소드에게 예외의 처리를 넘겨주는 방법 (throws 절 사용) 187
  188. 188. 예외 처리 - 예외의 발생 import java.io.*; class IOExceptionError { public static void main(String args[]) { FileReader file = new FileReader("a.txt"); // 만일 a.txt 파일이 없다면? int i; while((i = file.read()) != -1) { System.out.print((char)i); } file.close(); } } 이 프로그램은 컴파일러에 의해 에러가 발생된다. 즉 컴파일러는 a.txt 파일이 없을 경우에 발생하는 예외의 처리를 요구한다. 188
  189. 189. 예외처리 – 예외의 발생  컴파일러는 앞의 프로그램에 대해 다음과 같은 에러 메시지를 나타낸다 IOExceptionError.java:7: Exception java.io.FileNotFoundException must be caught, or it must be declared in the throws clause of this method. FileReader file = new FileReader("a.txt"); ^ IOExceptionError.java:11: Exception java.io.IOException must be caught, or it must be declared in the throws clause of this method. while((i = file.read()) != -1) ^ 2 errors 189
  190. 190. 190
  191. 191. 191
  192. 192. 예외 처리 - try, catch, finally 블록 사용  예외 처리 방법중 예외가 발생한 메소드 내에서 직접 처리하는 방법 : try, catch, finally 블록 사용 try { ...... // try 블록 : 예외가 발생할 가능성이 있는 문장을 지정한다 } catch(예외타입1 매개변수1) { ..... // 예외 처리 블록1 : 예외의 종류에 따라 처리하는 처리 블록 } .....… … . … … … .. catch(예외타입N 매개변수N) { ...... // 예외 처리 블록 N } finally { ...... // finally 블록 : 예외의 발생여부와 상관없이 무조건 수행되는 블록 } 192
  193. 193. 예외 처리 - try, catch, finally 블록 사용 - 예 import java.io.*; class IOExceptionError { public static void main(String args[]) { try { // 예외가 발생할 가능성이 있는 문장을 try 블록으로 지정 FileReader file = new FileReader("a.txt"); int i; while((i = file.read()) != -1) { System.out.print((char)i); } file.close(); } catch(Exception e) { // 발생된 예외를 처리하는 부분 System.out.println("예외 처리 루틴 : " + e + " 예외 발생"); } } } 193
  194. 194. 예외의 인위적인 발생  프로그램에서 인위적으로 예외를 발생시킬 수 있다  예외를 발생시키기 위해 throw 문 사용 throw 예외객체; 또는 throw new 예외객체타입(매개변수); 194
  195. 195. 호출메쏘드에 의한 예외의 전달  예외를 직접 처리하지 않고 자신을 호출한 메소드에게 예외를 넘겨주는 방법(throws 절 사용)  메소드 선언시 다음과 같은 방법으로 지정 public void c() throws 예외클래스[, 예외클래스, … .] 예 void throws-test() throws ArithmeticException, SecurityException, NullPointerException 195
  196. 196. 사용자 정의 예외  사용자는 새로운 예외를 정의하여 사용할 수 있다  새로운 예외는 Exception 클래스로부터 상속되어 생성되어야 한다 class UserException1 extends Exception { // 사용자 정의 예외는 Exception 클래스로부터 상속 public UserException1(String message) { // 생성자 메소드 super(message); // 상위 클래스인 Exception 클래스의 생성자를 호출하여 // 예외 객체 생성 } } 196
  197. 197. Java를 이용한 UI 만들기 197
  198. 198. AWT/Swing/Applet  자바를 이용해서 실행되는 UI를 가지는 프로그램 개발시 에 사용  AWT – (Abstract Windows Toolkits)  SWING – JDK1.1이후에 UI에 대한 다양한 컴포넌트 및 개선된 화면 제공 (JTable… )  개발 범위  단독 실행 프로그램 (UI Application)  인터넷 상의 실행 프로그램(Applet)  Applet  개발은 AWT/Swing과 동일하나 인터넷 브라우저에 실행되며, 보 다 엄격한 보안의 제약을 받는다. 198
  199. 199. MyFrame.java 1 : package gui1; 2 : import java.awt.*; 3 : import java.awt.event.*; 4: 5 : public class MyFrame { 6: 7 : public static void main(String args[]){ 8 : Frame fr=new Frame("Hello COOKIE!"); 9: 10 : fr.setSize(500,500); 11 : fr.setVisible(true); 12 : 13 : fr.addWindowListener(new WindowAdapter(){ 14 : public void windowClosing(WindowEvent w){ 15 : System.exit(0); 16 : } 17 : }); //function end. 18 : } //main end 19 : } // class end. 20 : 199
  200. 200. AWT 패키지의 기본 구조와 Frame Component 라는 최상위 클래스에서 부터 시작 Container계열의 객체는 주로 컴포넌트들을 추가하기 위해서 사용한다. Container계열의 객체중에서 단독으로 실행이 가능한 것은 Frame과 Applet쪽이다 200
  201. 201. AWT 프로그램의 구조 201
  202. 202. Frame객체  Frame 이라는 것은 하나의 프로그램을 실행하는 것처럼 실행되는 하나의 창(window)를 의미한다.  AWT를 이용하는 프로그램을 만들 때 자신의 컴퓨터에서 실행하고 싶다면 (즉, 어플리케이션으로 만들고 싶다면) Frame을 이용해 주어야 한다.  Frame 은 앞의 그림들에서 본 것 처럼 모든 AWT 요소들 중에서 가장 밑바닥에 위치하며, Frame 역시 객체이기 때문에 필요할 때에 Frame 객체를 생성해서 사용하면 된 다 202
  203. 203.  Frame 의 생성  Frame 을 생성하는 것은 보통의 경우 두 가지 방식으로 사용.  Frame f = new Frame( );  Frame f = new Frame(String name );  두 번째의 경우에는 화면에 실행되는 프로그램의 이름을 지정하 고자 할 때 사용.  Frame 의 기능과 메쏘드  Frame 의 가장 큰 기능은 역시 컨테이너로의 기능. 즉, 다른 버 튼이나 리스트 같은 컴포넌트들을 Frame 에 포함시키거나 Panel 이나 Applet 같은 Container 객체를 자신에게 포함.  Frame 객체는 가장 밑바닥의 컨테이너.  AWT 패키지의 구조를 보면 Frame 은 상속의 구조로 되어 있기 때문에 실제로 Window 클래스, Container 클래스, Component 클래스의 메쏘드를 사용할 수 있다. 203
  204. 204. void setBackground(Color c) Frame 의 색깔을 지정한다. void setTitle(String title) 타이틀 바(화면 가장 위의 활성 버튼들이 있는 바) 의 이름을 지정한다. void pack() 필요한 크기로 사이즈를 다시 조절한다. setSize( ) 대신에 사용할 수 있다. void setLocation(int x, int y) 프레임이 나타날 때 화면에서의 위치를 조정한다. 204
  205. 205. 1 : package gui1; 2 : import java.awt.*; 3 : import java.awt.event.*; 4: 5 : public class FrameEx1 extends Frame { 6: 7 : public FrameEx1(String name){ 8 : super(name); 9: } 10 : 11 : public void showFrame(){ 12 : 13 : setSize(300,300); 14 : setLocation(100,200); 15 : setBackground(Color.yellow); 16 : setVisible(true); 17 : 18 : //종료 버튼을 누르면 종료하게 만들기 ---- 19 : addWindowListener(new WindowAdapter(){ 20 : public void windowClosing(WindowEvent w){ 21 : System.exit(0); 22 : } 23 : }); 24 : } 25 : 26 : public static void main(String[] args){ 27 : FrameEx1 ex1 = new FrameEx1("Frame을 보여주기1"); 28 : ex1.showFrame(); 29 : } 30 : } 31 : 205
  206. 206. 화면에서의 좌표 206
  207. 207. 1 : package gui1; 2 : import java.awt.*; 3 : import java.awt.event.*; 4: 5 : public class PanelEx1 { 6: 7 : Panel p1; 8: 9: 10 : public PanelEx1(String name){ 11 : p1 = new Panel(); 12 : p1.setName(name); 13 : p1.setBackground(Color.blue); 14 : } 15 : 16 : public Panel getPanel1(){ 17 : return p1; 18 : } 19 : 20 : public static void main(String[] args){ 21 : PanelEx1 ex1 = new PanelEx1("Panel"); 22 : 23 : Frame f = new Frame("패널 보여주기"); 24 : f.add(ex1.getPanel1()); 25 : 26 : f.setSize(200,200); 27 : f.setVisible(true); 28 : //종료 버튼을 누르면 종료하게 만들기 ---- 29 : f.addWindowListener(new WindowAdapter(){ 30 : public void windowClosing(WindowEvent w){ 31 : System.exit(0); 32 : } 33 : }); 34 : } 207 35 : }
  208. 208. 컴포넌트와 레이아웃 208

×