12일차 수업 ( 파일읽기,쓰기, 객체직렬화 )  

 

1. 파일읽기
=> 파일읽기시 사용 가능한 클래스

가. FileInputStream
 => 바이너리 데이터 ( 이미지파일, 텍스트파일등 )

나. FileReader
 => 텍스트 데이터

==> File 클래스를 이용해서 읽을 파일을 명시한다.

2. 파일 쓰기
=> 파일쓰기시 사용 가능한 클래스
가. FileOutputStream
 => 바이너리 데이터

나. FileWriter
 => 텍스트 데이터

3. 객체 직렬화 - > 내가 만든 클래스를 유지시키는 방법
 개념 : 객체생성한 클래스의 인스턴스 heap 메모리에 저장되는데, 이것은 휘발성이다.
 따라서 지속적으로 사용하기 위해서 파일로 저장하거나 네트워크를 통해 전송시킬수가 있는데
 아무 클래스나 가능한것이 아니고 반드시 '직렬화객체'만이 가능하다.
 이것을 가능하게 하는 작업을 '객체직렬화'라고 한다.

직렬화객체 생성방법
 : implements Serializable ( java.io.Serializable ) 을 한 클래스를
   '직렬화 객체' 라고 한다.

 

 

<예제 이미지 파일 복사>

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

 

public class FileReadWriteTest {

 public static void main(String[] args) {

  // c:\\Temp\\a.jpg 파일을 읽어서
  // c:\\Temp\\b.jpg 로 출력하기
  File f = new File("c:\\Temp\\a.jpg");
  File f2 = new File("c:\\Temp\\b.jpg");
  int size = (int) f.length();
  byte[] b = new byte[size]; // 1kbyte
  FileInputStream fis = null;
  FileOutputStream fos = null;
  try {
   fis = new FileInputStream(f);
   fos = new FileOutputStream(f2);
   try {
    int n = fis.read(b);
   } catch (IOException e) {

    e.printStackTrace();
   }
   try {
    fos.write(b);
   } catch (IOException e) {

    e.printStackTrace();
   }

  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } finally {
   try {
    if (fis != null)
     fis.close();
    if (fos != null)
     fos.close();
   } catch (IOException e) {

    e.printStackTrace();
   }
  }
 }
}

 

====수업 내용======

 

1. 파일읽기
=> 파일읽기시 사용 가능한 클래스

가. FileInputStream
 => 바이너리 데이터 ( 이미지파일, 텍스트파일등 )

나. FileReader
 => 텍스트 데이터

==> File 클래스를 이용해서 읽을 파일을 명시한다.

2. 파일 쓰기
=> 파일쓰기시 사용 가능한 클래스
가. FileOutputStream
 => 바이너리 데이터

나. FileWriter
 => 텍스트 데이터

3. 객체 직렬화
 개념 : 객체생성한 클래스의 인스턴스 heap 메모리에 저장되는데, 이것은 휘발성이다.
 따라서 지속적으로 사용하기 위해서 파일로 저장하거나 네트워크를 통해 전송시킬수가 있는데
 아무 클래스나 가능한것이 아니고 반드시 '직렬화객체'만이 가능하다.
 이것을 가능하게 하는 작업을 '객체직렬화'라고 한다. 

직렬화객체 생성방법
 : implements Serializable ( java.io.Serializable ) 을 한 클래스를
   '직렬화 객체' 라고 한다. 

 

********** 정리
가. 키보드 입력 ( 표준 입력 )
나. 모니터 출력 ( 표준 출력 )
다. 텍스트 파일 읽기
라. 텍스트 파일 쓰기
마. 바이너리 파일 읽기, 쓰기 ( 이미지 복사한것 )
바. 객체 직렬화


4. NIO ( New IO )

 : 이후에 나온 기술.

 가. Path 클래스
    ==> 파일 및 디렉토리 경로 관련

 나. Files 클래스
    ==> 파일과 관련 클래스( java.io.File 보다 향상 )


 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

11일차 수업 ( Java I/O , 표준입출력 )

1. 자바 I/O
. 용어 정리
 입력(input)                                                   출력(output)
 (입력스트림)                                                (출력스트림)
소스(source) --------자바프로그램 --------> 대상(sink)
 

 . 스트림의 데이터 종류?
 => 자바 프로그램에서 I/O 가능한 데이터 종류
 a. byte : 바이너리(binary) 데이터 처리시 사용.
 b. char : 문자 데이터 처리시 사용.
 

. 자바 I/O 클래스 제공.
 a. byte
 ==> 입력 최상위 클래스 : InputStream
     - FileInputStream (파일읽기)
     - ObjectInputStream
     출력 최상위 클래스 : OutputStream
     - FileOutputStream (파일출력)
     - ObjectOutputStream

 b. char
 ==> 입력 최상위 클래스 : Reader
     - FileReader
     - InputStreamReader
     - BufferedReader

     출력 최상위 클래스 : Writer
     - FileWriter
     - PrintWriter

 

2. 표준 입출력

1) System.in     표준 입력으로 데이터를 읽어올때 사용

2) System.out   표준 출력으로 모니터로 데이터를 출력 할때 사용

3) System.err    표준 에러로서 모니터에 에러정보를 출력할때 사용한다.

 

<예제 문장 1> 문자 한개를 입력받아 출력

import java.io.IOException;
import java.io.InputStream;

 

public class StandardOutputTest {
 public static void main(String[] args) {
  
  try{
  System.out.print("문자를 입력하세요 : ");
  InputStream a = System.in;
  int n = a.read(); //1byte 입력
  System.out.print("입력 값 : "+(char)n);
  a.close(); // 사용후에는 반드시 close() 사용하여 자원을 해제
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

<출력>

문자를 입력하세요 : abc
입력 값 : a

 

문자를 여러개 입력해도 하나만 입력 받아진다.

 

<예제문장 2>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

 

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

  try {

   System.out.print("문자를 입력하세요 : ");
   InputStream a = System.in;
   InputStreamReader b = new InputStreamReader(a);
   BufferedReader c = new BufferedReader(b);
   String str = c.readLine();

   System.out.print("입력 값 : " + str);

   c.close(); // 사용후에는 반드시 close() 사용하여 자원을 해제

  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

<출력>

문자를 입력하세요 : abc 김상진
입력 값 : abc 김상진

 

입력데이터를 한 라인씩 처리하는 BufferedReader 클래스의 readLine() 메소드를 사용한 방식이다.

또한 String 으로 처리하기 때문에  예제1번처럼 char로 강제형변환을 하지 않아도 된다.

 

=====수업 내용======

 

1. 자바 I/O
 가. 용어 정리
      입력(input)  출력(output)
      (입력스트림)  (출력스트림)
 소스 -------->  자바프로그램 --------> 대상(sink)
 (source)
: 키보드    : 모니터
(표준입력 : standard input)  (표준출력 : standard out)
: 파일     : 파일
: 메모리    : 메모리
: 네트워크    : 네트워크

 나. 스트림의 데이터 종류?
   => 자바 프로그램에서 I/O 가능한 데이터 종류
 a. byte
 : 바이너리(binary) 데이터 처리시 사용.
   예> 이미지, 문자데이터 포함
 b. char
 : 문자 데이터 처리시 사용.
 다. 자바 I/O 클래스 제공.
 
 a. byte
 ==> 입력 최상위 클래스 : InputStream
     - FileInputStream (파일읽기)
     - ObjectInputStream
     출력 최상위 클래스 : OutputStream
     - FileOutputStream (파일출력)
     - ObjectOutputStream

 b. char
 ==> 입력 최상위 클래스 : Reader
     - FileReader
     - InputStreamReader
     - BufferedReader

     출력 최상위 클래스 : Writer
     - FileWriter
     - PrintWriter

  
2. 표준 입출력 ( Standard input / output)
==> 키보드로 입력
==> System 클래스로 처리한다.

가. 표준입력
InputStream is = System.in;
xxx.println(값);
==> System.out.println(값):

나. 표준출력
PrintStream xxx = System.out;

다. 표준에러
System.err

==> StandardInputTest2 실습의 특징은
- 1byte만 읽는다.
- 한글 못 읽는다.
- char로 형 변환시커야 된다.
- 반복처리
- \n과 \r을 필터링하는 작업 추가.
: 결론은 너무 불편하다.
이유는 InputSteam 클래스만 사용했기 때문이다.
다른 유용한 클래스를 같이 사용한다. 

StandardInputTest3 실습의 특징
- 지정된 byte 배열 크기만큼만 저장
- 한글처리 불가
- char로 형 변환 시켜야한다.
- 반복처리

3. try-with-resources 문
==> 자바7부터 사용가능
==> 외부 자원 사용시 자동 close시키는 방법이다.

ex)try(외부자원 선언;외부자원선언2;외부자원선언3){

}catch( ){
}
-----------------------------------
try{
 자원;
}catch(){
}finally{
//명시적으로 자원을  close 해야된다.
}

4. 파일 읽기

==> 어떤 파일이냐? ( 문자데이터, 이미지 )
문자 : FileReader
이미지 : FileInputStream

5. 파일 관련 클래스
==> java.io.file 클래스
==> 전반적인 파일의 정보를 관리.
ex) 경로, 파일명, 디렉토리 정보, 파일크기, 디렉토리 생성, 디렉토리 조회, 파일삭제등....
(파일생성 x)
==> 메타데이터 ( 정보의 정보 )를 관리.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

10일차 수업 ( 컬렉션/Hashset/ArrayList/제네릭 )

1. 컬렉션
데이터를 관리하는 여러 가지 저장 방식이 존재하며 이런 여러 가지 방식을 자바의
클래스로 구현한 것이 컬렉션.

    <<Collection>> 컬렉션의 최상위 클래스

   <<set>>    <<List>>      <<Map>>
Hashset     ArrayList     HashMap  
SortedSet    Vector


1) Hashset 사용해보기

import java.util.HashSet;;

public class Test {

public static void main(String[] args) {

HashSet set =new HashSet();

set.add("박보영");

set.add(new Integer(23));
set.add(new Float(3.14F));
set.add(234);
  
set.add("박보영");               // 중복 저장
set.add(new Integer(23));    // 중복 저장
set.add(new Float(3.14F));  // 중복 저장
set.add(234);                     // 중복 저장
  
System.out.println("출력 : " + set.toString());

 }

}

출력 : [234, 3.14, 23, 박보영]

==> set 계열의 특징은 데이터가 중복 저장이 안되며 저장되는 순서가 없다.
    즉 데이터 저장이 순서되로 되지 않는다.

 

2) ArrayList 사용해보기

import java.util.ArrayList;

public class Test {

 public static void main(String[] args) {
 ArrayList a = new ArrayList(); 
  a.add("박보영");
  a.add(new Integer(23));
  a.add(new Float(3.14F));
  a.add(234);
  
  a.add("박보영");             // 중복 저장
  a.add(new Integer(23));  // 중복 저장
  a.add(new Float(3.14F));  // 중복 저장
  a.add(234);                    // 중복 저장
  
  System.out.println("출력 : " + a.toString());
  
  for (int i = 0; i < a.size(); i++) {
  System.out.print(a.get(i)+", "); 
  }
 }

}


출력 : [박보영, 23, 3.14, 234, 박보영, 23, 3.14, 234]
박보영, 23, 3.14, 234, 박보영, 23, 3.14, 234,

=> list 는 데이터가 중복 저장이되며 저장은 입력순서되로 된다.


2. DTO 클래스
- 데이터를 효율적으로 전송 및 관리하기 위해서 사용되는 클래스를 의미한다.

 

3. 제네릭( generic )
- 데이터를 저장할 때 지정된 데이터형을 명시하기 때문에 가독성이 높다.
- 지정된 데이터형으로 형변환 할 필요가 없다.

<일반적으로 사용하는 방법>

ArrayList = list = new ArrayList();
==> 얻어 올 때 반드시 형변환 해야 된다.
==> 잘못된 데이터가 저장 될 수 있다.
 (실행시 파악할 수 있다. )

<Generic으로 사용하는 방법>

컬렉션 <저장 데이터형> 변수명 = new 컬렉션<저장 데이터형>();

==> 얻어 올 때 형변환 할 필요가 없다.
==> 잘못된 데이터를 컴파일 시점에 알 수 있다.

 

====수업 내용======

 

1. 컬렉션
데이터를 관리하는 여러 가지 저장 방ㅇ식이 존재하며 이런 여러 가지 방식을 자바의
클래스로 구현한 것이 컬렉션.

  <<Collection>> 컬렉션의 최상위 클래스

   <<set>>    <<List>>      <<Map>>
Hashset     ArrayList     HashMap  
SortedSet    Vector


1) Hashset 사용해보기

import java.util.HashSet;;

public class Test {

 public static void main(String[] args) {

  HashSet set =new HashSet();
  set.add("박보영");
  set.add(new Integer(23));
  set.add(new Float(3.14F));
  set.add(234);
  
  set.add("박보영");  // 중복 저장
  set.add(new Integer(23)); // 중복 저장
  set.add(new Float(3.14F));  // 중복 저장
  set.add(234);   // 중복 저장
  
  System.out.println("출력 : " + set.toString());
 }

}

출력 : [234, 3.14, 23, 박보영]

==> set 계열의 특징은 데이터가 중복 저장이 안되며 저장되는 순서가 없다.
    즉 데이터 저장이 순서되로 되지 않는다.

2) ArrayList 사용해보기

import java.util.ArrayList;

public class Test {

 public static void main(String[] args) {
  
  ArrayList a = new ArrayList();
  
  a.add("박보영");
  a.add(new Integer(23));
  a.add(new Float(3.14F));
  a.add(234);
  
  a.add("박보영");  // 중복 저장
  a.add(new Integer(23));  // 중복 저장
  a.add(new Float(3.14F));  // 중복 저장
  a.add(234);   // 중복 저장
  
  System.out.println("출력 : " + a.toString());
  
  for (int i = 0; i < a.size(); i++) {
  System.out.print(a.get(i)+", "); 
  }
 }

}


출력 : [박보영, 23, 3.14, 234, 박보영, 23, 3.14, 234]
박보영, 23, 3.14, 234, 박보영, 23, 3.14, 234,

=> 즉 list 는 데이터가 중복 저장이되며 저장은 입력순서되로 된다.


2. DTO 클래스
- 데이터를 효율적으로 전송 및 관리하기 위해서 사용되는 클래스를 의미한다.

3. 제네릭( generic )
- 데이터를 저장할 때 지정된 데이터형을 명시하기 때문에 가독성이 높다.
- 지정된 데이터형으로 형변환 할 필요가 없다.

<일반적으로 사용하는 방법>

ArrayList = list = new ArrayList();
==> 얻어 올 때 반드시 형변환 해야 된다.
==> 잘못된 데이터가 저장 될 수 있다.
 (실행시 파악할 수 있다. )

<Generic으로 사용하는 방법>

컬렉션 <저장 데이터형> 변수명 = new 컬렉션<저장 데이터형>();

==> 얻어 올 때 형변환 할 필요가 없다.
==> 잘못된 데이터를 컴파일 시점에 알 수 있다.

 

-----------------------------------------------------------------------


1. 다른 클래스에서 발생된 여러 데이터를 한꺼번에 가져오는 방법.

             b 메소드 호출
 A 클래스  --------------> B 클래스 ( 여러 데이터 발생 )
           <--------------     홍길동,20  이순신44  유관순 18
      결과값 리턴
결과값
보여주기

 ==> DTO 클래스 + ArrayList를 사용하면 된다.


 2. 일관된 방법으로 컬렉션에 저장된 데이터를 얻는 방법.


   - HashSet
      ==> toString()
      ==> 향상된 for 문
      ==> Iterator

   - ArrayList
       ==> 첨자이용 : get(index)
       ==> 향상된 for 문
        ==> Iterator

     -Vector
        ==> Iterator
 => Enumeration

    가. java.util.Enumeration ( 이뉴멀레이션 )
        :  hasMoreElements() : boolean
    nextElements() : Object

    나. java.util.Iterator  ( 이터레이터 )

        : hasNext() : boolean
   next() : Object
   remove()

==> 메소드를 이용해서 Iteraror, Enumeration 을 얻는다.
    (  new 하지 않는다. )


3.  Map 계열

 : 계층구조

      Object
         |
       <<Map>>
          |
    Hashmap , Hashtable, Properties

  : 특징
     ==> Set, List 계열은 데이터만 저장한다.
     Map 계열은  name/value(key/value) 쌍으로 저장한다.
    
     ==> 검색이 빠르다.
         name(key)을 이용해서  value를 바로 얻는다.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

9일차 수업 ( 예외처리 )

1. 예외 처리 

 일반적으로 프로그램 실행 중에 발생되는 의도하지 않은 문제를 의마하며 예외가 발생하면

프로그램은 비정상 종료된다. 이러한 현상을 방지하고 정상 종료되게 처리하는것을

예외처리 ( Exception Handling ) 이라고 한다.

 

<예외 처리 방법은 2가지>


a. try ~ catch
==> 예외가 발생된 곳에서 처리하는 방법.

 

try{

//예외발생코드

}catch(예외 클래스명 변수명){

}

위처럼 사용!

 

b. throws
==> 예외가 발생된 곳에서 하지 않고 호출한 곳으로 떠 넘기는 방법으로 main 메소드까지 떠 넘긴다.

굳이 throw 문을 사용 하는 이유는 아래와 같다.

 

 * 예외가 발생된 곳에서 그냥 try ~ catch 하면 네트워크 같은 상황에서는 사용자가 어떤 이유 때문에 원하는 결과가 안나왔는지 모른다. 따라서 throws 해서 사용자가 어디서 무슨 에러가 나왔는지 확인 할 수 있게 해야 한다.

 

====수업 내용======

 

1. 예외처리

가. 예외클래스 계층구조 파악

Object

Throwable

Exception

RuntimeException  IOException

하위클래스  하위클래스

==> API들은 어플리케이션에서 발생되는 모든 예외를 처리 가능하지 못하다. 범용적인 예외들만 처리가능하다.
detail한 예외처리는 사용자가 만들어서 처리해야 된다.
(사용자 정의 예외클래스)

* 사용자 정의 예외클래스
a. extends Exception
b. 문자열 하나 갖는 생성자.
   ==> 문자열은 예외 정보 저장시 사용된다.
c. 필요하면 여러 구성요소 추가 가능하다.
   ==> 사용자가 지정한 특정한 조건에 위배되었을 때.
   ( 문법적으로 문제 없다 )
   ex) 잔액부족
 검색을 했는데 데이터가 없는 경우,
 나이를 저장하는데 30이상,
 이메일 입력시 @를 입력 안하는 경우,

나. 예외처리 방법
==> 예외클래스 사용한다.
a. try ~ catch 문
==> 예외가 발생된 곳에서 처리하는 방법.

b. throws 문
==> 예외가 발생된 곳에서 하지 않고 호출한 곳으로 떠 넘기는 방법.
main 메소드까지 떠 넘긴다.
==> 주로 사용하는 이유
 : 예외가 발생된 곳에서 그냥 try ~ catch 하면 네트워크 같은 상황에서는 사용.
네트워크 같은 상황에서는 사용자가 어떤 이유 때문에 원하는 결과가 안나왔는지 모른다.
따라서 throws 해서 사용자가 예외 정보를 보게 해야 된다.

<주요 용도 2가지>

a. 사용자가 지정한 예외 조건.
- 사용자정의 예외 클래스가 필요
- 예외조건에 위배되면 예외를 발생시켜야 된다.
  throw new 사용자 정의 예외클래스(문자열);
- throws 하는 방법으로 예외처리한다.

b. 범용적인 예외 발생시 --> 사용자 정의 예외로 변경할 때

==> 0으로 나누었을 때 ArithmeticException 발생되고, 예외처리하고 예외정보 출력하면 /byZero 출력된다.
==>“0으로 나누어 예외 발생된”한국어로 된 예외로 다시 출력해야 된다.


ex)

0으로 나눔 ----> ArithmeticException 발생 ---> /byzero

==> 변경
0으로 나눔 --> ArithmeticException 발생 --> 예외처리(try-catch)--> 사용자 정의 예외클래스 발생.
 --> 사용자 정의 예외클래스 처리 --> “0으로 나누워 발생"

다. 예외 클래스의 종류 2가지

a. compile checked Exception
==> 컴파일시 예외처리 유무를 체크
 ( 만약에 예외처리가 안되어 있으면 컴파일 에러 발생)
==> IOException , SQLException 계열
특징 :
IO작업, SQL 작업과 관련된 메소드를 사용하는 경우에 반드시 예외 처리를 해야된다.
이유?  worker메소드에서 throws XXXException 한다.
따라서 caller 메소드에서는 try~catch해야된다.
안하면 에러 발생된다.


b. compile unchecked Exception
==> 컴파일시 예외 처리 유무를 체크안함
==> RuntimeException 계열
==> 실행할 때 발생되는 예외들이다.
==> 특징 : 예외처리할 필요가 없다.
    예외가 발생되지 않게 코드로 구현이 가능하기 때문이다.
개발자가 제대로 조건 체크했으면 에외발생 안되는 사항이다.
==> 따라서 예외 처리 할 생각 말고 조건 체크 잘해라!

2. 다중 데이터 처리

==> 대량의 데이터를 저장할 수 있는 방법

* 데이터 저장 방법
가. 변수

나. 배열
생성하면서 크기 지정해야 된다. (초기 사이즈)
따라서 데이터를 나중에 추가가 불가능하다. / 배열을 다시 생성해야 된다.

- 같은 데이터만 저장 가능하다. (다형성 제외 )
- 기본형 배열 사용 가능하다.
- 참조형 배열 사용 가능하다.
- 배열크기 : 배열명.length

다. 컬렉션 ( Collection )
- 생성만 하면 된다. 크기는 자동 증가/감소 된다.
- 서로 다른 데이터 모두 저장 가능하다.
- 저장 데이터는 참조데이터(클래스)만 가능하다.
- 기본형 저장 안되는 것이 아니고 Wrapper 클래스 사용하여 저장한다.

=> 결국 모든 데이터 저장 가능하다.
 - java.util 패키지에 존재하는 몇 개의 클래스 파일.
-컬렉션 크기 : 변수명.size()

* 크기(길이) ?

가. 문자열 길이
 str.length();
나. 배열 길이
 배열명.length
다. 컬렉션 길이
 변수명.size()
라. 파일크기


- 컬렉션의 계층구조

 Object

 << Collection >> - 인터페이스
  
<<Set>>    <<List>>
Hashset     ArrayList(****), Vector

: 데이터 중복안됨   : 데이터 중복 허용
: 데이터 순서없음   : 데이터 순서있음


* 제네릭( generic )
==> <>
==> <클래스형>을 지정해서 사용하는 방법

ex)
//일반적
ArrayList = list = new ArrayList();
==> 얻어 올 때 반드시 형변환 해야 된다.
==> 잘못된 데이터가 저장 될 수 있다.
 (실행시 파악할 수 있다. )

// Generic
ArrayList<저장할 클래스명> list = new ArrayList<>(); //JAVA 7부
==> 얻어 올 때 형변환 할 필요가 없다.
==> 잘못된 데이터를 컴파일 시점에 알 수 있다.

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

8일차 수업 ( 문자열 , 예외처리 )

1. 문자열 생성방법
. String 클래스 이용
- 한번 생성된 문자열은 변경안된다.
- 메소드를 사용하여 가공하면 새로운 문자열이 생성된다

따라서 문자열 조작이 적은 경우에 사용한다.

 

- 리터럴 이용
  > String str = "hello";
      String str3 = "hello";
   => literal pool 메모리에 생성된다.
      기존 문자열이 존자하면 재사용 한다.     
- new 이용
  > String str2 = new String("hello");
      String str4 = new String("hello");
   => heap 메모리에 생성된다. 매번 생성된다.
   - 메소드 정리

. StringBuffer 클래스 이용
- 한번생성된 문자열이 변경된다. 따라서 문자열 조작이 많은 경우에 사용된다.


   - new 이용
   > StringBuffer buffer = new StringBuffer("hello");

. toString 메소드 이용
=> 정수를 문자열로 변경
   String str = Integer.toStirng(123);
   String str2 = Float.toStirng(123.4F);

. + (연결 연산자) 이용
=> 문자열과 다른 데이터형이 + 만나면 자동으로 문자열로 변경된다.
 > System.out.println( 1 + 2 ); // 3
     System.out.println(1+ " " + 2); 1 2

     int x = 123;
     String str = x+""; // 권장 안함.
     String str2 = Integer.toStirng(123);
     String str3 = String.valueof(123);

 

<문자열의 다양한 처리방법>

 

  String str = "SJgood";
  
  //1. 모든 문자열을 대문자로 만들기
  System.out.println(str.toUpperCase());  //SJGOOD
  //2. 모든 문자열을 소문자로 만들기
  System.out.println(str.toLowerCase()); //sjgood
  //3. 문자열 부분 출력
  System.out.println(str.substring(0,2));  //SJ
  System.out.println(str.substring(2,6)); //good

 

2. 예외처리
예외( exception )?
=> 일반적으로 '에러'라고 부른다.
 ( '예외가 발생' 한다고 부른다. )
=> 예외가 발생되면 '프로그램이 비정상' 종료된다. (****)

>
 문장1;
 문장2;
 문장3;
 ...

 문장100;
 system.out.println("프로그램 정상종료");
 }.//end main

순차문이기 때문에 한번 실행된 문장을 다시 실행할 수 없다.
(반복문 제외)

 

<예외 처리 하는 방법>

Try ~ catch문 사용하기!
문법 :

 try{
     //예외발생코드
 }catch{예외클래스 변수명){
  //예외처리 코드
 }
* 다중 catch
- try 블럭안에 여러개의 문장이 지정 가능하다.
이 문장들이 서로 다른 예외가 발생가능하기 때문에 catch문도 여러개가 필요하다.

 try{
  문장1; => ArithmeticException
  문장2; => NullPointerException
  문장3; => ClassCastException
 }catch(ArithmeticException e){

 }catch(NullPointerException e){

 }catch(ClassCastException e){

 }

* finally
=> 예외가 발생유무와 상관없이 항상 실행되는 문장.
=> System.exit(0) 제외하고는 어떤 상황에서도 반드시 수행된다.
=> 주요용도: 파일 또는 데이터베이스와 같은 외부자원을 사용하고 close 하는 작업에 사용된다.


 try{

 }catch(){

 }finally{
 //반드시 수행되는 문장
 } 

 

====수업 내용======

 

1. 문자열 생성방법
가. String 클래스 이용
- 한번 생성된 문자열은 변경안되.ㅁ
  메소드를 사용하여 가공하면 새로운 문자열이 생성된다.
  따라서 문자열 조작이 적은 경우에 사용한다.
- 리터럴 이용
  예> String str = "hello";
      String str3 = "hello";
   => literal pool 메모리에 생성된다.
      기존 문자열이 존자하면 재사용 한다.     
- new 이용
  예> String str2 = new String("hello");
      String str4 = new String("hello");
   => heap 메모리에 생성된다. 매번 생성된다.
   - 메소드 정리
 
나. StringBuffer 클래스 이용
- 한번생성된 문자열이 변경된다. 따라서 문자열 조작이 많은 경우에 사용된다.
-
   - new 이용
   예> StringBuffer buffer = new StringBuffer("hello");
다. toString 메소드 이용
=> 정수를 문자열로 변경
   String str = Integer.toStirng(123);
   String str2 = Float.toStirng(123.4F);
라. + (연결 연산자) 이용
=> 문자열과 다른 데이터형이 + 만나면 자동으로 문자열로 변경된다.
 예> System.out.println( 1 + 2 ); // 3
     System.out.println(1+ " " + 2); 1 2
     int x = 123;
     String str = x+""; // 권장 안함.
     String str2 = Integer.toStirng(123);
     String str3 = String.valueof(123);
2. wrapper 클래스 : 기본형 데이터에 해당되는 클래스들의 묶음
기본형                         클래스
--------------------------------------
byte                            Byte
short    Short
int    Integer
long    Long
char    Character
float    Float
double    Double
boolean    Boolean
제공된 이유 : 기본형과 관련된 작업을 효율적으로 하기 위해서 제공됨
예> 숫자 --> 문자
    문자 --> 숫자
    int 범위 ?
    문자 대문자? 소문자?
3. 자동형변환
: 기본형  -------> Wrapper ( auto boxing )
  Wrapper -------> 기본형  ( auto unboxing )

4. Random 클래스
* 랜덤값 얻는 2가지 방법
가. Math.random();
0.0 <= <1.0
나. Random 클래스
: nextInt(n) ==> 0 ~ n-1 의 임의의 정수값 리턴
5. StringTokenizer 클래스
용도 : 특정구분문자로 분리된 통문자열에서 구분자를 기준으로 원하는 문자열을 얻는 방법
예> "홍길동 20 서울 " "
6. 날짜 데이터
Date
Calendar
7. 예외처리
- 예외( exception )?
=> 일반적으로 '에러'라고 부른다.
 ( '예외가 발생' 한다고 부른다. )
=> 예외가 발생되면 '프로그램이 비정상' 종료된다. (****)
예>
 문장1;
 문장2;
 문장3;
 ...
 문장100;
 system.out.println("프로그램 정상종료");
 }.//end main
순차문이기 때문에 한번 실행된 문장을 다시 실행할 수 없다.
(반복문 제외)
-예외처리를 담당하는 클래스가 제공된다. ( 예외 클래스 )
  Object
  Throwable
  Exception (
RuntimeException  IOException
NullPointerException  FileNotFoundException,
ArithmeticException
ArrayIndexOutbounds
ClassCastException
- 예외처리 방법 2가지
가. Try ~ catch문
문법 :
 try{
     //예외발생코드
 }catch{예외클래스 변수명){
  //예외처리 코드
 }
* 다중 catch문
- try 블럭안에 여러개의 문장이 지정 가능하다.
이 문장들이 서로 다른 예외가 발생가능하기 때문에 catch문도 여러개가 필요하다.
 try{
  문장1; => ArithmeticException
  문장2; => NullPointerException
  문장3; => ClassCastException
 }catch(ArithmeticException e){
 }catch(NullPointerException e){
 }catch(ClassCastException e){
 }
* finally 문
=> 예외가 발생유무와 상관없이 항상 실행되는 문장.
=> System.exit(0) 제외하고는 어떤 상황에서도 반드시 수행된다.
=> 주요용도: 파일 또는 데이터베이스와 같은 외부자원을 사용하고 close 하는 작업에 사용된다.

 try{
 }catch(){
 }finally{
 //반드시 수행되는 문장
 }
나. throws 키워드 이용
 
블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

7일차 수업 ( 인터페이스, 추상클래스)

1. 인터페이스 ( interface )
 - *.java로 저장.
 - 객체생성불가 (new 불가 )
 - 다른 클래스 도움을 받아서 인터페이스 구성요소 사용 가능하다. (준 상속 관계)

 - 다중 구현이 가능
 - 반드시 인터페이스의 추상 메소드를 구현해야 된다. {} 사용해야된다.
 - 오버라이딩 메소드 문법을 따른다
 - 인터페이스끼리 상속 가능하다.

 

public interface 인터페이스명 {} 사용하고

다른 클래스에서는 implements 인터페이스명{} 으로 사용

 

<인터페이스 구성요소>
가. 상수
-> 자동으로 public static final로 지정된다.
예 > int num =3;  //상수, 자동으로 붙어 있는것이다.

나. 추상 메소드
-> 자동으로 public abstract 가 지정된다.
==> 자동적으로 public abstract 가 지정된다.
    예 > void zzz();

* 인터페이스 용도 : 하위클래스에게 특정 메소드들을 강제적으로 사용하도록 하기 위해서.
       (통일성, 일관성 )

 

2. final 키워드
=> '마지막'
=> '금지' 의미
=> 사용
  : 클래스 --> 상속불가
  : 변수 --> 값변경불가 ( 상수 )
  --> 상수는 대문자로 지정한다.
  --> 일반적으로 public static final 로 지정한다.
  : 메소드 --> 오버라이딩 불가

 

3. 추상클래스 ( abstract class )
- *.java 로 저장한다.
- 추상메소드를 가지면 반드시 추상클래스로 작성해야 된다. (역은 성립 안됨)
- 객체생성불가 ( new 불가 ) 따라서 다른 클래스의 도움을 받아서 사용 가능하다.
  (추상클래스와 클래스의 관계는 상속관계)

- 단일 상속만 지원, UML 표기법은 이태릭체로 표현

- 클래스 - >반드시 추상클래스의 추상메소드는 오버라이딩해야됨.

 

구성요소 :
- 인스턴스변수
- 메소드 ( concreate method )
- 생성자
- 추상메소드 ( abstract method ) 

 

* 용도
-> 여러 구성요소 중에서 특정 메소드만 강제할 목적으로...
  (다른 변수, 메소드등은 하위 클래스에서 이전의 자식클래스처럼 부모요소를
    마음대로 사용하고 특정메소드만 강제할 목적)

 

====수업 내용======

 

1. 인터페이스 ( interface )

특징 :
 *.java로 저장.
 객체생성불가 (new 불가 )
 다른 클래스 도움을 받아서 인터페이스 구성요소 사용 가능하다.
 (준 상속 관계)
 
 <<인터페이스>> : 큰 타입 ( 삼촌)
   => implements 키워드

  클래스 : 작은 타입
  : 다중 구현이 가능
  : 반드시 인터페이스의 추상 메소드를 구현해야 된다. {} 사용해야된다.
  : 오버라이딩 메소드 문법을 따른다
  : 인터페이스끼리 상속 가능하다.

<<interface>>
* 정리

 클래스
  extends, 단일상속
 클래스

///////////////////

 <<interface>>
  implements, 다중 구현
 클래스(인터페이스내의 모든 추상 메소드를 오버라이딩 해야 된다.)

 <<interface>>
  extends , 다중 상속 가능
 <<interface>>

문법 :
 public interface 인터페이스명 {}

<인터페이스 구성요소>
가. 상수
-> 자동으로 public static final로 지정된다.
예 > int num =3;  //상수, 자동으로 붙어 있는것이다.

나. 추상 메소드
-> 자동으로 public abstract 가 지정된다.
==> 자동적으로 public abstract 가 지정된다.
    예 > void zzz();

* 인터페이스 용도 : 하위클래스에게 특정 메소드들을 강제적으로 사용하도록 하기 위해서.
       (통일성, 일관성 )

 예 >
    1) 날아다니는 것들의 기본동작인 3가지를 구현하는
       메소드명을 마음대로 지정해서 사용하는 형태.
       (관리가 어렵다.)

    Bird  Airplane  SuperMan
  :x()     : a()      : k()
  :y()     
  :z()

    2) 부모 클래스 이용
  
  부모클래스 : takeOff(){ }  //이륙
        fly() { }   //비행
        land(){ }   //착륙

       Bird       Airplane       SuperMan
 takeOff(){ }    takeOff(){ }       xxx(){ }  //오버라이딩 하는데 하나만 다르게 하면..


    3) 인터페이스 이용

  <<Flayer>>  takeOff(){ }  //이륙
        fly() { }   //비행
        land(){ }   //착륙

    Bird       Airplane       SuperMan

   takeOff(){ }     takeOff(){ }   takeOff(){ }
     fly() { }       fly() { }       fly() { }
     land(){ }       land(){ }      land(){ }


2. final 키워드
=> '마지막'
=> '금지' 의미
=> 사용
  : 클래스 --> 상속불가
  : 변수 --> 값변경불가 ( 상수 )
  --> 상수는 대문자로 지정한다.
  --> 일반적으로 public static final 로 지정한다.
  : 메소드 --> 오버라이딩 불가

3. 메소드 종류

 가. worker 메소드 ( getter, setter ) , caler 메소드

 나. 일반메소드 / 추상메소드

 - 일반 메소드 ( concreate method )
 -> 메소드가 해야할 작업이 정해짐.
 예> public void aaa(){  }

 - 추상 메소드 ( abstract method )
 -> 메소드가 해야할 작업이 미정, 따라서 {} 이 없다.
 예> public abstract void aaa();

4. 추상클래스 ( abstract class )
특징 : *.java 로 저장한다.
 추상메소드를 가지면 반드시 추상클래스로 작성해야 된다.
 (역은 성립 안됨)
 객체생성불가 ( new 불가 )
 따라서 다른 클래스의 도움을 받아서 사용 가능하다.
 ( 추상클래스와 클래스의 관계는 상속관계)

    추상클래스
      
    : extends, 단일 상속

    클래스 - >반드시 추상클래스의 추상메소드는 오버라이딩해야됨.


문법 :
 public abstract class 클래스명{}
구성요소 :
- 인스턴스변수
- 메소드 ( concreate method )
- 생성자
- 추상메소드 ( abstract method ) 

* 용도
-> 여러 구성요소 중에서 특정 메소드만 강제할 목적으로...
  (다른 변수, 메소드등은 하위 클래스에서 이전의 자식클래스처럼 부모요소를
    마음대로 사용하고 특정메소드만 강제할 목적)

5. static 키워드
* 프로그램 실행 과정
소스코드--> 컴파일--> 실행-->

   필요한 객체생성(new)
method area 영역  ---------->
(class area )
- 클래스 로드
- static 키워드 지정한 요소들이 자동 로드.
- ( - static 변수
    - static 메소드
    - static 클래스 )
대표적인 예 : main 메소드 자동으로 로드되고, 자동으로 실행된다.
-> 프로그램 시작시 생성 ~ 프로그램 종료시 제거
-> 단 한번만 생성된다.
-> static요소 접근은
클래스명.변수
클래스명.메소드


  메소드호출,
  참조변수
heap 메모리 ---------->
- 인스턴스 변수,
concrete 메소드 생성
-> 객체생성시 생성 ~ 객체소멸시 제거됨.
-> new 할때 마다생성
-> 요소 접근은
참조변수.변수
참조변수.메소드

stack 메모리
- 로컬변수 생성
-> 메소드호출시 생성 ~ 메소드 종료시 제거됨
-> 메소드 호출할때 마다 생성
-> 주의할점은 반드시 사용전에 초기화 한다.

가. static 변수
=> 단 한번 생성됨.
=> 가장 오래 산다.
====> 데이터 누적용

나. static 메소드
=> 객체생성 없이 사용하기 위해서
( 자주 사용하는 메소드인 경우에 )
클래스명.메소드
==> 오버라이딩 불가

* 오버라이딩 불가
- final 메소드
- static 메소드
- private 메소드
=> static 메소드내에서 아직 생성되지 않은 인스턴스 변수 인식 불가.

예> Math.random();
    Integer.parseInt()

다. static 클래스
=> 중첩 클래스 ( nested class )

   class Outer { //Outer 클래스

   static class Inner{
   }
   }

6. static 이용한 기법

가. 싱글톤 디자인 패턴
==> 인스턴스를 하나만 생성하는 방법
( 현실세계의 객체가 단하나 : 서원대학교, 지구, 대한민국... )

나. static import
==> static 변수나 메소드를 좀더 쉽게 사용하기 위한 방법.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

6일차 수업 (다형성)

1. 다형성( polymorphism )

정의 : 하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력.

 

이런식으로 사용 ->  데이터형 변수명;

 

2. 다형성의 적용 형태

가. 배열
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.

나. 메소드 인자

1) Employee : taxEmployee(){10%}
   Manager: taxManager(){20%}
   Engineer: taxEngineer(){15%}

2) 오버라이딩
   Employee : taxEmployee(){10%}
   Manager: taxEmployee(){20%}
   Engineer: taxEmployee(){15%}

3) 부모 클래스에 모두 구현하고 자식은 그냥 사용.  

 

3. 다형성의 메소드 호출

Shape s = new Rectangle(10,10); //다형성
s.getArea(); // 동적 바인딩 발생

* 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
    new 한 타입의 메소드를 인식하는 것.

 

4. 원래 타입 식별

 : instanceof 연산자 사용
 : 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.

 

<다형성 최종 정리>

1) 상속
2) 다형성을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.

 

6. Object 클래스

7.toString() 메소드

 

<배운것>

Eclipse 에서 Argument 에서 문자열or숫자를 입력 받는다.

public static void main(String[] args) {

 

String a = args[*]; //그냥 문자열을 받아와 a에 저장 배열처럼 이용

double salay = Double.parseDouble(args[0]); //double 형으로 받아와 salay에 저장

 

}

에서 Argument 에서 args를 말하는 것!

먼저 .java 클릭후에 마우스 오른쪽 버튼을 누르고 run as -> run cofi....클릭

Argument 의 String prompt 클릭하고 적용

 

수업노트 ==========

1. 다형성( polymorphism : 폴리몰피즘 )

정의 : 변수는 데이터형을 갖는다. 따라서 저장할 데이터의 데이터를 알고 있다.

예> 데이터형 변수명;

    하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력.

- 기본형 형태
예>
 short s = 10;
 int i = 20;  // i에 20 정수값 저장
     i = s;   // idp short타입 데이터 저장

 큰 타입 = 작은 타입;
 큰 타입과 작은 타입이 같은 종이라서 가능하다.
 작은 타입 = 큰 타입; //에러 발생
 -> 작은 타입 = (작은타입) 큰 타입;
- 참조형 형태

예> Employee e = new Manager();   // 다형성
      e = new Engineer();  // 다형성
      e + new Employee();  // 일반적 방법

    Employee e = new Manager();
    큰 타입 = 작은 타입;
    큰 타입과 작은 타입이 같은 종(상속 관계) 이다.

용도 : 하나의 변수로 재사용하자.

2. 다형성의 적용 형태

가. 배열
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.

Object[] obj = new object[10];
obj[0] = "홍길동";
obj[1] = new Employee();
obj[2] = 12;

나. 메소드 인자
예>      Employee
Manager      Engineer
=> 세금 구하기
   일반 직원 : 10%
   관리자 : 20%
   엔지니어 15%

1) Employee : taxEmployee(){10%}
   Manager: taxManager(){20%}
   Engineer: taxEngineer(){15%}

2) 오버라이딩
   Employee : taxEmployee(){10%}
   Manager: taxEmployee(){20%}
   Engineer: taxEmployee(){15%}

3) 부모 클래스에 모두 구현하고 자식은 그냥 사용.

예> public void xxx( long i ) { }
 int x =10;
 xxx(x);
 short s = 20;
 xxx(s);


   Employee : taxEmployee(){ //Object 사용 가능
  10%
  20%
  15%
  }
   Manager :
  taxEmployee( new Manager());
   Engineer :
  taxEngineer( new Engineer());

3. 다형성의 메소드 호출

Shape s = new Rectangle(10,10); //다형성
s.getArea(); // 동적 바인딩 발생

* 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
    new 한 타입의 메소드를 인식하는 것.

4. 원래 타입 식별?

 : instanceof 연산자 사용
 : 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.

예>

5. 메소드의 인자로 데이터를 넘기는 방법

=> 자바는 call by value
가. 기본형을 인자로 넘기면 값이 복사된다. 따라서 받는 곳에서 데이터를 변경해도 원래 데이터는
    변경되 지 않는다.

나. 참조형을 인자로 넘기면 주소값이 넘어가고 따라서 동일한 주소를 가리키게 된다. 주소를
    받은 곳에서 데이터를 변경하면 원래 데이터도 변경된다.

=> call by value reference

다형성?
1) 상속
2) 다형성ㅇ을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.


6. Object 클래스
- 최상위 클래스이다.
모든 클래스의 부모 클래스이다.
(java.lang.Object 의 모든 구성요소를 모든 클래스가 사용가능하다. )

- 대표적으로 2가지 메소드 사용법을 알자
가. toString() 메소드

나. equals() 메소드

7.toString() 메소드
=> 문자열로 변경하는 메소드.
=> 자동호출된다.
( 참조변수를 Print 메소드로 출력할때 자동으로 호출된다.)
예> String name = "xxx";
    System.out.println

=> 참조변수에는 위치값이 저장되어 있는데, console창에 출력되기 위해서는 문자열이 변경되어야 한다.
따라서 자동으로 toStirng() 붙는다.

=> Object의 toString() 메소드 구현은 다음과 같다.

  클래스명@16진수

예>  Object

Stirng    Date , Integer,
=> 대부분 API가 모두 오버라이딩되어 있다.
@ 대신에 실제갑 출력하게 구현되어 있다.

Person
=> 개발자가 명시적으로 만든 클래스이다.
따라서 @가 나온다.
=> 우리도 오버라이딩 하자

8. equals 메소드

-> Object 의 equals 메소드 구현은 다음과 같다.
  " ==  " 연산자로 비교되어 있다.
  ( 위치값 비교가 된다.)

예> Object : == 비교

String
 -> 대부분의 API가 모두 오버라이딩되어 있다. 
(실제값 비교하게 구현 되어 있다.)

Person
API 실제
* 동등비교

가. == 연산자
- 기본형
예> int n =3;
    int n2 = 3;
    if(n==n2) ==> 실제값 비교

- 참조형
예> Person p = new Person("박보영");
    Person p2 = new Person("박보영");
    if( p==p2) ==> 위치값 비교, false
따라서 참조형 동등비교는 == 비교하지 말고 equals 메소드로 사용한다.
(정말로 위치값을 비교하는 경우에만 == 사용한다. )

나. equals 메소드
- 참조형
- 실제값의 동등비교시 사용
예>
 String name = "박보영";
 String name2 = "박보영";
 System.out.println(name.equals(name2)); //true

 Person p = new Person("곽보근");
 Person p2 = new Person("곽보근");

 System.out.println(p.equals(p2));

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

5일차 수업 ( Argument로 정수및 문자형 받아오기 )

1. 클래스들간의 관계( class relationship )
=> 여러 클래스들간에 유기적으로 관련을 맺으면서 하나의 어플리케이션이 동작된다.

=> 현실세계도 객체간의 관계가 존재한다.
  ( 부모자식관계, 학생과교수관계, 친구관계, ....)

   마찬가지로 가상세계에서도 특별한 관계가 존재한다.

 

2. 자바의 관계?

a) has a 관계

트럭 has a 엔진 => 트럭과 엔진의 lifecycle 동일

b) is a 관계 -> 상속관계

관리자 is a 사원
상속관계이다.

 

3. 상속 ( inheritance )

- 클래스들간의 관계중에서 is a 관계이다.
  ( 같은 종 )

 

public class 학생{}
// 대학생 is a 학생
public class 대학생 extends 학생{}

 

* 특징
1 )부모 클래스의 멤버(인스턴스변수,메소드)를 자식이 선언없이 사용 가능하다.

->'상속받는다' 라고 부른다.
2) 부모생성자와 private로 지정된 멤버는 상속 불가.

-> 단일 상속만 제공된다.
==> extends 클래스
==> 계층구조를 명확하게 하기 위해서

3) 자식보다 부모를 먼저 생성한다.
따라서 부모의 생성자를 자동호출하는데 super키워드 이용해서 호출한다.

4) 모든클래스(사용자지정클래스 = API)는 계층구조로 되어 있다.
( 상속관계 )
java.lang.object 클래스가 모든 클래스의 최상위 클래스이다.
(==> object 클래스의 멤버를 모든 클래스가 사용가능하다.)
extends 가 없는 클래스에는 자동으로 extends Object가 지정된다.
따라서 모든 클래스의 부모는 Object가 된다.
항상 Object 클래스가 먼저 생성되고 나중에 순차적으로 생성된다.

 

4. 접근 지정자 (access modifier )
* 지정자( modifier )?
=> 특별한 동작을 취하도록 의미를 갖는 키워드.

 

가. 일반 지정자 : static , final, abstract

예>
 static int num;
 static final int size =3;
 public void a(){}
 public abstract void b();
 public abstrant class Test{};
 public final class AAA{}

나 접근 지정자

=> 클래스들간에 접근제한을 설정하는 방법.

=> 종류 4가지

- public
=> 모든 클래스가 접근 가능하다.
   ( 같은 패키지 및 다른 패키지 모두)
=> 클래스와 메소드에 주로사용. 
- protected 같은 패키지에서 접근가능. +"상속관계(패키지가 달라도 가능)
 
- (default, friendly)
- private
=> 같은 클래스에 접근가능
   ( 상송관계도 부모의 private 멤버를 자식이 접근 불가)
=>인스턴스 변수에 주로 사용
   ( 데이터 보호 이유, 메소드 통해서 인수턴수 변수에 접근 가능)

예> private Strign name;
    plevate int = age;
    외부에서 접근할 필요가 없는 로컬메소드 사용시.
예> public class Test{
 public void a(){ local();}
 public void b(){}

 private void local(){} //Test클래스에서만 사용가능
 }

-> 은닉화 은닉화 구현시가 이용된다.

 

 

Argument 로 정수형 및 문자형 받아오기

 

int data1 = Integer.parseInt(args[0]);  //정수형으로 받아오는것

String arg = args[1];                        // 문자열로 받아오는것
char operator = arg.charAt(0);          //문자열로 받아온것을 문자형으로
int data2 = Integer.parseInt(args[2]);

 

 

====힉습 내용====

 

 1. 클래스들간의 관계( class relationship )
=> 여러 클래스들간에 유기적으로 관련을 맺으면서 하나의 어플리케이션이
   동작된다.

=> 현실세계도 객체간의 관계가 존재한다.
  ( 부모자식관계, 학생과교수관계, 친구관계, ....)

   마찬가지로 가상세계에서도 특별한 관계가 존재한다.

2. 자바의 관계?
==> 학생, 대학생, 컴퓨터, 트럭, 엔진, 라디오.....

가. has a 관계
학생 has a 컴퓨터
트럭 has a 엔진 => 트럭과 엔진의 lifecycle 동일
                => composition
트럭 has a 라디오 => 트럭과 엔진의 lifecycle 다르다.
                  => aggregation

출력결과
==> 수정은 withdraw, deposit 메소드 리턴타입을 boolean으로 변경
입금 : 300 true
출금 : 400 true
출금 : 500 true
출금 : 500 false

홍길동 잔액 : 400

나. is a 관계

대학생 is a 학생
관리자 is a 사원
: 상속관계이다.

3. 상속 ( inheritance )

: 클래스들간의 관계중에서 is a 관계이다.
  ( 같은 종 )
: UML
 학생 => 큰타입 ( 부모클래서, super클래스, parent클래스)
  => subclassing (상속)

 대학생 => 작은타입( 자식클래스, sub클래스, child클래스 )

* 코드표현

public class 학생{}
// 대학생 is a 학생
public class 대학생 extends 학생{}

* 특징
1 )부모 클래스의 멤버(인스턴스변수,메소드)를 자식이 선언없이 사용 가능하다.

->'상속받는다' 라고 부른다.
2) 부모생성자와 private로 지정된 멤버는 상속 불가.

-> 단일 상속만 제공된다.
==> extends 클래스
==> 계층구조를 명확하게 하기 위해서

3) 자식보다 부모를 먼저 생성한다.
따라서 부모의 생성자를 자동호출하는데 super키워드 이용해서 호출한다.

4) 모든클래스(사용자지정클래스 = API)는 계층구조로 되어 있다.
( 상속관계 )
java.lang.object 클래스가 모든 클래스의 최상위 클래스이다.
(==> object 클래스의 멤버를 모든 클래스가 사용가능하다.)
extends 가 없는 클래스에는 자동으로 extends Object가 지정된다.
따라서 모든 클래스의 부모는 Object가 된다.
항상 Object 클래스가 먼저 생성되고 나중에 순차적으로 생성된다.


예>
 Object
 
 Employee{}

 Manager extends Employee{}


4. super 키워드

:this 키워드 자신을 의미하고
 super 키워드는 부모를 의미한다.

:super 키워드 사용하기 위해서는 상속전제/

:super

 

 


예제>
1) 개별적으로 구현
 사각형       원       삼각형
-w            -r        -w
-h                      -h

-넓이()       -넓이()   -넓이()

2) 상속이용
==> 사각형,원,삼각형의 공통적인 특징을 추출해서 큰 개념의 클래스 생성 가능 (  일반화 방법 )

 도형
 -w
 -h
 -

사각형       원       삼각형
-area(){     - area{r*r*3.14}        -area(){w*h/2}
w*h
}

6. 접근 지정자 (access modifier )
* 지정자( modifier )?
=> 특별한 동작을 취하도록 의미를 갖는 키워드.

종류 2가지
가. 일반 지정자 : static , final, abstract

예>
 static int num;
 static final int size =3;
 public void a(){}
 public abstract void b();
 public abstrant class Test{};
 public final class AAA{}

나 접근 지정자

=> 클래스들간에 접근제한을 설정하는 방법.

=> 종류 4가지

- public
=> 모든 클래스가 접근 가능하다.
   ( 같은 패키지 및 다른 패키지 모두)
=> 클래스와 메소드에 주로사용. 
- protected 같은 패키지에서 접근가능. +"상속관계(패키지가 달라도 가능)
 
- (default, friendly)
- private
=> 같은 클래스에 접근가능
   ( 상송관계도 부모의 private 멤버를 자식이 접근 불가)
=>인스턴스 변수에 주로 사용
   ( 데이터 보호 이유, 메소드 통해서 인수턴수 변수에 접근 가능)

예> private Strign name;
    plevate int = age;
    외부에서 접근할 필요가 없는 로컬메소드 사용시.
예> public class Test{
 public void a(){ local();}
 public void b(){}

 private void local(){} //Test클래스에서만 사용가능
  
}

-> 은닉화 은닉화 구현시가 이용된다.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

4일차 수업

 

1. this 키워드 : 메모리에 올라간 자기 자신을 가리킬때 사용

가. 인스턴스변수와 로컬변수와 동일하기 때문에 구별하기 위해 사용
    this.XXX 인스턴스 변수를 가리킨다.

예> String name;  // 인스턴스 변수
    public void setName(String name){  // 로컬변수
     this.name = name;
    }
나. 오버로딩 생성자를 호출할때 사용. (생성자 끼리 서로 호출) 

 

2. 패키지 ( package )
- 클래스 파일들을 관리할 목적으로 묶는방법.
- 관련된 클래스들끼리 동일한 패키지명으로 지정한다. ( 윈도우 폴더와 비슷 ) 

3. import 문

- 패키지가 다른 클래스를 사용하기 위한 방법.

- 여러개의 import 문을 사용 할 수있다.

 

예> import 패키지명.패키지명2.클래스명;

 

4. 가변 인자 (Varargs)

- 일반적인 메소드 호출시 사용
- 메소드명과 argument list가 일치해야 된다.

 

 

5. 배열 (array)

* 데이터 저장 방법
가. 변수
==> 데이터 10개이면 변수 10개 필요.
    10개의 변수명을 모두 알아야 사용 가능하다.
    서로 다른 변수명을 모두 알아야 되기 때문에 관리가 어렵다.
나. 배열
==> 다수의 데이터를 하나의 이름으로 관리 가능하다.
 (배열명)
==> 특징 : 같은 데이터만 저장 가능하다.
      인덱스(첨자)로 접근 한다. ( 0부터 시작)
      배열의 크기는 배열명.length 로 알 수 있다.
      배열은 참조형이다.
      (배열명에는 위치값이 저장된다.)
      배열은 참조형이기 때문에 new 이용해서 생성한다.
 기본형도 참조형도 모두 배열로 관리가 가능하다.

 

2차원 배열일 경우

배열명 = new 데이터형[행크기][열크기]; // 열크기 생략가능

 

===학습세부사항 ===

1. this 키워드
정의 : 메모리에 올라간 자기 자신을 가리킬때.

<용도 2가지>
가. 인스턴스변수와 로컬변수와 동일하기 때문에 구별하기 위해 사용
    this.XXX 인스턴스 변수를 가리킨다.

예> String name;  // 인스턴스 변수
    public void setName(String name){  // 로컬변수
     this.name = name;
    }
나. 오버로딩 생성자를 호출할때 사용. (생성자 끼리 서로 호출)

다른 클래스에서 생성자 호출방법?
=> new 클래스명();

같은 클래스에서 오버로딩 생성자 호출방법?
this();
this(12):
용도는 중복제거 및 데이터 초기화 효율
반드시 생성자에서 사용하고, 첫 라인에서 사용해야 된다.
예>
public Student(){}
public Student(int s){
 
 this(s,null);
}
public Student(int s, String n){
 this(s,n,null);
}

2. 패키지 ( package )
용도 : 클래스 파일들을 관리할 목적으로 묶는방법.
관련된 클래스들끼리 동일한 패키지명으로 지정한다. ( 윈도우 폴더와 비슷 )

방법 :  package 패키지명;
 package 패키지명.패키지명2;
특징 : 패키지명은 유일한 도메인을 사용한다.
예> com.xxx
java 로 시작하는 패키지는 사용불가.
하나의 클래스에 한번만 지정 가능.

package com.stu;

public class Student {}

패키치가 서로 다르면 접근이 불가능하다.
import 를 사용하면 접근이 가능하다.
* 모든 API는 패키지로 제공된다.
java.
javax.
org.
따라서 API의 클래스를 사용하기 위해서는

3. import 문

용도: 패키지가 다른 클래스를 사용하기 위한 방법.

문법 : import 패키지명.패키지명2.클래스명;

특징 :
 여러번 사용 가능하다.
package com.xxx;
improt comstu.Student;
import java.util.ArrayList;
public class

4. 가변 인자 (Varargs)

용도 : 일반적인 메소드 호출시
메소드명과 argument list가 일치해야 된다.

문법:
 가. 일반 메소드
 public void set(int n){}
 변수명.set(10);

 나. 가변인자 메소드
 public void set(int ... n){} //인수의 개수가 상관없다, 배열로 관리한다.
 변수명.set(10);
 변수명.set(10,20);
 변수명.set(10,20,30);
 
5. 클래스 다이어그램

가. 클래스만 표현

student


나. 클래스 구성요소 모두 표현
* 접근지정자 4가지
public(+)
protected (#)
(default, friendly)
private (-)

 

클래스명
 변수 ==> 접근지정자 String name;
 변수명: 데이터형
 +name:String
-----------------

생성자 ==> public Student(){}
     public Student(int s, String n){}
 + 생성자명()
 + 생성자명( 변수명 : 데이터형, 변수명 : 데이터형)

메소드 ==> public void setName(String n){}
 public String getName(){}

 +메소드명(변수명:데이터형): 리턴타입
 +getName():String
 +setName(n:String)

6. 배열 (array)

* 데이터 저장 방법
가. 변수
==> 데이터 10개이면 변수 10개 필요.
    10개의 변수명을 모두 알아야 사용 가능하다.
    서로 다른 변수명을 모두 알아야 되기 때문에 관리가 어렵다.
나. 배열
==> 다수의 데이터를 하나의 이름으로 관리 가능하다.
 (배열명)
==> 특징 : 같은 데이터만 저장 가능하다.
      인덱스(첨자)로 접근 한다. ( 0부터 시작)
      배열의 크기는 배열명.length 로 알 수 있다.
      배열은 참조형이다.
      (배열명에는 위치값이 저장된다.)
      배열은 참조형이기 때문에 new 이용해서 생성한다.
 기본형도 참조형도 모두 배열로 관리가 가능하다.

다. 컬렉션(*)

* 배열 사용 방법
가. 배열 선언
데이터형 [] 배열명; 데이터형 배열명 []; ([] 대괄호 , 브래킷)
int [] num;  String [] name;

나 배열 생성
배열명 = new 데이텨형[크기];
==> 자동으로 기본값으로 설정된다.
num = new int[4];   name = new String[3];

다. 초기화
==> 인덱스로 접근

배열명[첨자] = 값;

num[0] =1;   name[0] =  "홍길동"
num[1] = 2;   name[1] =  "이순신"
num[2] = 3;   name[2] =  "유관순"
num[3] = 4;   name[3] =  "강감찬" //에러

7. 배열 생성 방법 3가지

가. new 이용
int [] num = new int[3];
num[0] = 1;
num[1] = 2;
num[2] = 3;

나. 리터럴 이용
===> 데이터형 [] 배열명 = {값1, 값2, 값3};

int [] num = {1, 2, 3};

String [] name = {"홍길동", “이순신”, “강감찬”};

Student [] stu = {
------------------------------------------------------------------

8. 이차원 배열

가. 배열선언
 데이터형 [][] 배열명;

int [][] num;  String[][] name;

나. 배열 생성

배열명 = new 데이터형[행크기][열크기]; // 열크기 생략가능

num = new int[3][2];  name = new String[2][2];

다. 초기화

num[0][0] = 1;
num[0][1] = 2;
num[1][0] = 3;
num[1][1] = 4;
num[2][0] = 5;
num[2][1] = 6;

======================================> 정방향 배열

* 비정방향 배열 ==> 열의 크기가 다르다.

가. 배열 선언

int [][]num;

나. 배열 생성 (행 크기 지정)

num = new int[3][]; //3행만 생성

다. 열 생성

num[0] = new int[3]; //1행의 3열
num[1] = new int[2]; //2행의 2열
num[2] = new int[1]; //3행의 1열

라. 초기화

num[0][0] = 1;
num[0][1] = 2;
num[0][2] = 3;
num[1][0] = 4;
num[1][1] = 5;
num[2][0] = 6;

-------------------------------------------------------------
9. 이차원 배열 생성방법 2가지

가. new

나. 리터럴

==> 데이터형 [][] 배열명 ={{값, 값, 값},{값 },{값, 값}};

int [][] num = { {1,2,3}, {4,5},{6} };

String[][] name = { {"홍길동"},{“강감찬”},{“유관순”}};

Student [][] stu = {
 {new Student(1111, "홍길동", 20) },

 {new Student(1111, "홍길동", 20),
  new Student(1111, "홍길동", 20)},

 {new Student(1111, "홍길동", 20),
  new Student(1111, "홍길동", 20),
 new Student(1111, "홍길동", 20)}
}

10. command line 파라미터

==> public static void main(String [] args) {}
==> 실행시 파라미터를 설정하면 자동으로 main메소드의 args배열로 저장이 된다.

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


}//end main
}//end class

실행 :
 Java Test 값, 값2, 값3

 

 

 

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

3일차 수업

 

1. 객체 ( objec )
주제가 바라보는 대상(사물)을 의미한다.
* 객체의 2가지 특성
a) 속성(attribut) : 객체를 표현하는 방법
b) 동작(operation): 객체의 행위를 의미 

 

2. 객체지향 프로그래밍?
-> 현실세계의 객체를 이용해서 가상세계에서 표현하는 프로그래밍
개발방법을 '객체지향 프로그래밍'이라고 한다.

현실세계 ---------------> 가상세계
객체 ------------------> 클래스
속성 ------------------> 변수 (instance variable)
동작 ------------------> 메소드

 

3. 객체 추출
어떤 어플리케이션을 하던지 필요한 객체를 추출하는 작업이 필요하다.
필요한 것만 필터링하는 작업을 '추상화(abstraction)'라고 한다. 필요없는건 제거

 

4. 클래스 ( class ) 

a) 인스턴스 변수 : 객체의 속성을 표현할 때 사용
b) 메소드 : 객체의 동작을 표현할 때 사용 , 인스턴스 변수를 관리할 때 사용한다.
     (변수에 값을 설정하거나 얻어오는 작업)
c) 생성자 : 인스턴스 변수에 값을 초기화하는 작업시 사용한다.
  

 

5. 클래스 종류 2가지

 

가. 재사용 클래스 
나. 재사용 클래스를 핸들링하는 클래스 ( handling class ) 

 

6. 객체생성 ( 인스턴스 화, 메모리 로딩 )
-> main메소드가 없는 클래스를 메모리에 올려주는 작업을 의미한다.

문법 :  

클래스명 변수명 = new 클래스명();
Student sut = new Student();

 

7. 구성요소 접근

8. 은닉화 ( encapsulation ) 

객체지향 프로그래밍 3대 특징
   가. 상속( inheritance )
   나. 다형성 ( polymorphism )
   다. 은닉화 ( encapsulation )

 

9. 메소드 ( method ) 

용도 : 인스턴스 변수 값 설정 및 얻기
문법 :
 
 public 리턴타입 메소드명(인자) {
 return 값;  //호출한 곳으로 돌아갈 때 가지고 갈 데이터
 }          반드시 값의 데이터형을 리턴타입에 저장한다.
 - 특징 :
 - 반드시 클래스 객체생성 먼저
 - 반드시 호출해야 수행된다.


   수행이 끝나면 호출한 곳으로 돌아온다.
   ( return )

 -> 메소드안에서 선언되 변수인 로컬변수는
   메소드 호출시 생성되고 메소드가 끝나면 제거되는 임시 데이터
   저장용 변수이다. ( stack 메모리 )
 

10. 오버로딩 메소드 (overloading method)

11. 메소드 종류

12. 생성자 ( Constructor )

용도 : 인스턴스 변수에 값을 맨 처음 설정하는 역할 ( 초기화 작업 )
문법 :

 

 public 클래스명(인자){}
 

특징 : 메소드와 비슷하다.
리턴타입이 없다.
반드시 이름은 클래스명으로 지정한다.
호출해야 수행되고, 끝나면 돌아온다.
모든 클래스에는 자동으로 기본생성자를 제공한다.
(==> public 클래스명(){} )

생성자를 명시적으로 제공가능하다. 
단, 생성자를 명시적으로 사용하면 기본 생성자를 제공하지 않는다.
따라서 기본생성자는 항상 명시적으로 작성하자

  

가. worker 생성자 : public 클래스명(인자){}
나. caller 생성자 : new Student(); //콜러 생성자

 

====학습 세부사항 ====

 

1. 객체 ( objec )
객체란?
-> 주제가 바라보는 대상(사물)을 의미한다.
* 객체의 2가지 특성
a) 속성(attribut) : 객체를 표현하는 방법
b) 동작(operation): 객체의 행위를 의미

2. 객체지향 프로그래밍?
-> 현실세계의 객체를 이용해서 가상세계에서 표현하는 프로그래밍
개발방법을 '객체지향 프로그래밍'이라고 한다.

현실세계 ---------------> 가상세계
*객체 ------------------> 클래스
-속성 ------------------> 변수 (instance variable)
-동작 ------------------> 메소드

*객체관계 --------------> has a, is a 관계

3. 객체 추출
-> 어떤 어플리케이션을 하던지 필요한 객체를 추출하는 작업이 필요하다.
-> 필요한 것만 필터링하는 작업을 '추상화(abstraction)'라고 한다. 필요없는건 제거

분석  --->   설계    --->     구현    --->    테스트    ---> 배치
객체추출    다이어그램      소스코드
     ( 그림 )

4. 클래스 ( class )
- 문법 :
 public class 클래스명{ 
 }
- 클래스명은 첫글자 대문자, 의미있는 명사형으로 지정한다.
- 첫글자는 영문자로 지정하고 이후에 숫자지정가능하다.
  특수문자 2개 ( _ $ )만 사용가능하다
- 반드시 클래스명으로 파일저장해야 한다. ( 클래스명 = 파일명 ) 일치해야 한다.
<구성요소 3가지>
a) 인스턴스 변수 : 객체의 속성을 표현할 때 사용
b) 메소드 : 객체의 동작을 표현할 때 사용 , 인스턴스 변수를 관리할 때 사용한다.
     (변수에 값을 설정하거나 얻어오는 작업)
c) 생성자 : 인스턴스 변수에 값을 초기화하는 작업시 사용한다.

 예> 학생관리

 학생객체 -------------------------------------> Student
 - 학번, 이름 ,주소 ---------------------------> int snum;
       String name;
       String address;
 - 동작   -------------------------------------> 메소드

5. 클래스 종류 2가지

 가. 재사용 클래스 
 - 객체관련 클래스 , main 메소드가 없다.
 - 실행이 불가능하다. --> 핸들링 클래스를 통해서 사용이 가능하다.
 예> 학생객체, 컴퓨터 객체, ...

 
 나. 재사용 클래스를 핸들링하는 클래스 ( handling class )
 - main 메소드를 지정
 - 실행이 가능하다.

6. 객체생성 ( 인스턴스 화, 메모리 로딩 )
-> main메소드가 없는 클래스를 메모리에 올려주는 작업을 의미한다.

 문법 :
 클래스명 변수명 = new 클래스명();
 Student sut = new Student();

 * stu 변수
 - 변수
 - 참조형 변수 ( reference 변수 )
   위치값을 저장하는 변수
 - Student 클래스 타입의 변수

7. 구성요소 접근
  --> 객체생성후에 접근 가능하다.

 - 인스턴스 변수 ( 멤버변수 , 클래스 멤버 )
 ==> 참조형변수.멤버변수
 예) stu.snum = 1111;
     stu.name = "수지";
     stu.address = "청주";
  - 메소드 ( 벰버 메소드 , 클레스 멤버 )
   -> 용도 : 인스턴스 변수 값 설정 및 값 얻기

 - 생성자

8. 은닉화 ( encapsulation )

   a) 접근하는 곳

   b) 접근 당하는 곳
      -> stu.name = "수지";
         따라서 직접 접근하지 못하도록 private 로 설정한다.
  private int snum;
  직접접근은 못하고 다른 방법으로 접근한다.
  ( 메소드 이용 )
      예) 달력 객체
 public class MyDate{
  
  int day;
  int month;
  int year;
 }
 MyDate d = new MyDate();
 d.day = 40; //문법적으로는 문제가 없지만 논리적으로 문제발생
 
 * 객체지향 프로그래밍 3대 특징
   가. 상속( inheritance )
   나. 다형성 ( polymorphism )
   다. 은닉화 ( encapsulation )


9. 메소드 ( method )

 - 용도 : 인스턴스 변수 값 설정 및 얻기
 - 문법 :
 
 public 리턴타입 메소드명(인자) {
 return 값;  //호출한 곳으로 돌아갈 때 가지고 갈 데이터
 }          반드시 값의 데이터형을 리턴타입에 저장한다.
 - 특징 :
 - 반드시 클래스 객체생성 먼저
 - 반드시 호출해야 수행된다.
   수행이 끝나면 호출한 곳으로 돌아온다.
   ( return )

 -> 메소드안에서 선언되 변수인 로컬변수는
   메소드 호출시 생성되고 메소드가 끝나면 제거되는 임시 데이터
   저장용 변수이다. ( stack 메모리 )
 <용도 2가지>
a) 인스턴스 변수에 값을 설정
- setter 메소드라고 한다.
- 메소드명은 set변수명(첫글자 대문자)으로 지정한다.
  예) String name;
      setName
      setSnum
      setAddress
b) 인스턴스 변수 값을 얻기
- getter 메소드라고 한다.
- 메소드명은 get변수명(첫글자 대문자)으로 지정한다.
  예) String name;
      getName
      getSnum
      getAddress
- 핸들링 클래스에서 값을 얻는다.

 아키텍쳐
 
 TestStudent                                Student
 
 0.Student 객체생성
  
  1. 호출              Stirng name;
  -------------------> public 리턴타입 getName(인자){

     return name;
         }
  2. 리턴
  <------------------- 

 - 호출방법
   가. 객체생성
    Student stu = new Student();

   나. 메소드 호출
    참조형변수.메소드명(인자);

    예) stu.getName();
 stu.getAddress();
 stu.getSnum();
  
 - 메소드 호출 방법
 : 반드시 메소드명과 인자(파라미터, argument)
   리스트가 일치해야 된다.
 : 인자 리스트
 갯수
 데이터형
 순서

 public void a(int x){  }
 public void b(String x){  }
 public void c(int x){  }

10. 오버로딩 메소드 (overloading method)
-정의 : 같은 클래스내에 동일한 이름의 메소드가 여러개 설정 가능하다.
같은 이름의 여러 메소드를 '오버로딩 메소드'라고 한다.

- 규칙 : argument list가 반드시 달라야 된다.

- 이유?
1) 재사용성
2) 서로다른 메소드를 관리하는 것보다 하나의 이름으로 관리하는것이 쉽다.

11. 메소드 종류

가. worker 메소드
    -> 일반적으로 메소드 지칭한다.
    -> public 리턴타입 메소드명(인자){  }
    -> 종류 2가지
       -setter 메소드
 public void set변수명(인자, 인자2){ }
       -getter 메소드
 public 리턴타입 get변수명(){
 return 값;
 }
나. caller 메소드
-> worker 메소드를 호출하는 메소드를 의미한다.
-> 객체생성후에 사용 가능하다

 예) Student stu = new Student();

 stu.setName("곽보근"); // caller 메소드 
 stu.setAddress("하복대");

 int s = stu.getSnum(); // getter 메소드
* 같은 클래스에서는 그냥 호출하면 된다.

예) getName();

12. 생성자 ( Constructor )

 - 용도 : 인스턴스 변수에 값을 맨 처음 설정하는 역할 ( 초기화 작업 )
 - 문법 :

         public 클래스명(인자){}
 - 특징 : 메소드와 비슷하다.
   리턴타입이 없다.
   반드시 이름은 클래스명으로 지정한다.
   호출해야 수행되고, 끝나면 돌아온다.
   모든 클래스에는 자동으로 기본생성자를 제공한다.
   (==> public 클래스명(){} )

   생성자를 명시적으로 제공가능하다.
   단, 생성자를 명시적으로 사용하면 기본 생성자를 제공하지 않는다.
   따라서 기본생성자는 항상 명시적으로 작성하자

   가. worker 생성자 : public 클래스명(인자){}
   나. caller 생성자 : new Student(); //콜러 생성자

13. 오버로딩 생성자
-> 하나의 클래스내에 동일한 생성자가 여러개 존재 가능하다.
-> 규칙 : argument list가 반

* 은행 프로젝트

- 고객, 직원, 계좌, 은행

- 계좌 객체 -----------------> Account
 : 계좌번호
 : 비밀번호
 : 잔액     -----------------> double balance;

 : 입금     -----------------> deposit 메소드
   출금     -----------------> withdraw 메소드

 : 생성자

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,