2016년 8월 19일 금요일

22day / SE / Thread


  • Thread :  프로세스 내의 세부적 실행 단위 
참고) 사전적 의미로는 실 (여러 개의 실이 모여 옷감을 구성)
  1. process : 현재 실행중인 프로그램 
  2. multi-processing : 다수의 프로세스가 실행 
  3. multi-threading : 다수의 스레드가 실행 

  • ex) 동영상 플레이어 실행 - 프로세스 
  1. 영상 스레드 
  2. 음향 스레드 멀티스레딩되어야 한다 
  3. 자막 스레드 

  • ex) 채팅 클라이언트 실행 - 프로세스 
  1. 서버로부터 정보를 입력받는 스레드   멀티스레딩되어야 한다  
  2. 서버로 정보를 전송하는 스레드 

  • Thread 생성방법 
  1. extends Thread
  2. implements Runnable

  • Thread 제어 
  1.    start() : 스레드를 실행가능상태로 보낸다 
  2.   실행가능상태 -> 스레드 스케줄링을 기다리는 상태 
  3.    run() : 스레드의 실행 행위를 정의 
  4.                  스레드 스케줄링이 되면 run() 메서드가 실행된다


  • Thread 스케줄링 방식

    : 시분할 방식과 우선순위 방식에서 자바는 우선순위방식을 채택
      자바 스레드의 우선순위는 1 ~ 10
      가장 낮은 우선순위는 1 , 가장 높은 우선순위는 10이다
      우선순위를 별도로 명시하지 않을 경우에는 5가 기본으로 설정된다
      Thread 의 setPriority(우선순위) , getPriority() 를 활용하면 된다
      우선순위를 부여하면 스케줄링 가능성이 높아지는 것이지
      반드시 우선순위가 높다해서 먼저 실행한다는 보장은 없다
   

2016년 8월 18일 목요일

21day / SE / Serializable

http://www.javatpoint.com
  • Serializable 객체 직렬화 

객체 직렬화란 객체의 정보를 바이트 단위의 데이터로 변환해
외부(파일 또는 네크웍)로 전송할 수 있는 상태로 만드는 것을 의미한다

객체 직렬화를 위해서는 해당 클래스가 반드시 implements Serializable 처리되어야 한다 
즉 Serializable interface 계층구조 하에 있어야 객체 직렬화가 지원된다는 것을 의미한다

2016년 8월 17일 수요일

20day / SE / IO

http://www.javatpoint.com
http://www.javatpoint.com
  • IO : 입력과 출력  
Stream (스트림) : 흐름 ( 데이터의 연속적인 흐름 ) 입 출력을 위한 클래스를 통칭

  • IO 의 주요 추상클래스
/1byte2byte
입력InputStreamReader
출력OutputStreamWriter

  1. Node Stream 계열 ( 기본스트림 ) : 직접 장치에 연결되는 스트림
  2. Processing Stream 계열 ( 부가스트림 ) : 다른 스트림에 연결되어 기능을 부가하기 위한 스트림 
http://docstore.mik.ua

     ex)  FileWriter 생성 : 파일에 연결되는 노드 스트림
           PrintWriter 생성 : 기능 부가를 위한 프로세스 스트림
         
           관계 ( relationship )
           PrintWriter has a FileWriter
     
ex)

FileWriter fw = new FileWriter(path);
PrintWriter pw = new PrintWriter(fw); // fw를 생성자에 전달 
//pw 로 제어한다 
pw.println();
pw.close(); 
cs
         

  • 출력시 사용되는 주요 메서드 
  1. println();  한 라인씩 출력한다 
  2. flush(); 버퍼에 있는 데이터를 모두 출력한다 
  3. close(); 연결된 스트림을 닫아준다->내부적으로 flush 를 수행한다 

2016년 8월 16일 화요일

2016년 8월 12일 금요일

2016년 8월 11일 목요일

17Day / SE / Exception-handling


http://www.slideshare.net/ssuser8e9f37/exceptions-in-java-13584393
  • Exception Handling ( 예외 처리 )

  : 프로그램 실행시 발생할 수 있는 예외에 대한 처리 (대처방안을 실행)
    Exception은 jvm이 프로그램을 실행할 때
    예외 상황이 발생하면  해당 Exception 객체를 생성해
    전달하고 프로그램은 비정상 종료되는 특징이 있다
    -> 예외처리(Exception handling)를 통해 예외적 상황에 대한 적절한 대처방안을 실행
        프로그램을 계속 정상수행하도록 한다
     
http://kiowok.org

Throwable 의 하위(or 자식 or subclass) 클래스는 Error 와 Exception 이 있다 
    Error 와 RuntimeException계열의 Exception :
    unchecked -> 컴파일 타임에서 확인 불가
참고) RuntimeException 계열의 예 :
NullPointerException , IndexOutOfBoundsException , ClassCastException 등..  
Exception 중 RuntimeException 을 제외한
모든 Exception : checked -> 컴파일 타임에서 확인 가능  
     
생활코딩
  • Exception 관련 주요 키워드 ( try , catch , finally, throws, throw ) 
- try,catch
   try : 예외(Exception) 발생 예상 지점에 대한 영역 지정

- catch : 예외 발생시 처리 ( 예외 발생에 대한 대처방안 실행 )
 
- finally : 예외 발생 여부와 관계없이 항상 실행  

- throws : 예외 발생하면 예외를 호출한 곳으로 던진다

- throw : 예외(Exception)를 발생시킨다

http://cdn.crunchify.com

http://aventalearning.com
  • 사용자 정의 예외 ( User Define Exception ) 
  사용자 정의 Exception class는 extends Exception 으로 정의한다
  ex)
1
2
3
4
5
6
public class TelNotFoundException extends Exception{
public TelNotFoundException(){}
    public TelNotFoundException(String message){
        super(message);
    }
}        
cs

2016년 8월 10일 수요일

16day / SE / Map

http://codingbat.com
  • Iterator Interface : 반복자 -> 요소를 반복해서 열거하기 위한 표준 
컬렉션 계열의 모든 구현체의 요소를 반복 열거하기 위한 표준을 제공
대표적인 메서드는
hasNext() : boolean  다음 요소가 존재하면 true 아니면 false
next() : Object 다음 요소를 반환한다
ex)
1
2
3
while(iterator.hasNext()){
    System.out.println(iterator.next());
}
cs
   

  • java.util.Map Interface
   위 인터페이스를 구현한 대표적인 클래스
   HashMap , TreeMap(정렬) , LinkedHashMap(순서보장)
   
   Map 은 key와 value 쌍으로 저장된다
   key로 검색하여 value를 반환받을 수 있다
   ( 빠른 검색이 가능 )
   key는 유일해야 한다 ( 내부적으로 Set으로 저장된다 )    
   
   Stack : 선입후출 (LIFO: last in , first out)
   Queue :선입선출(FIFO : first in , first out)  


  • String과 StringBuilder(or StringBuffer) 비교 
http://www.programcreek.com
  String : 불변 

   같은 문자열을 Literal pool 영역에 한번 저장하여
   여러 변수에서 공유해서 사용한다
   문자열 변경시 자체 변경이 아니라 새로 생성된다
   
   StringBuilder(or StringBuffer) : 가변
   문자열 변경시 자체가 변경되기 때문에 변경이 많을 경우 적합

   StringBuilder와 StringBuffer의 차이점은 thread-safe 여부이다 
   StringBuffer는 synchronized 동기화 처리가 되어 있어서 멀티스레딩시 안전하다

2016년 8월 9일 화요일

15day / SE / ArrayList

http://www.trustingeeks.com

  • ArrayList : index로 요소를 관리 

대표적인 메서드는 add() , remove() , get() , set()

  • Generic : Collection 계열에서 사용되는 기술 

미리 타입을 지정하여 해당 컬렉션 내의 요소의 종류를 지정하여
객체 캐스팅 절차를 감소시킬 수 있다.

런타임시(실행시) 발생할 수 있는 java.lang.ClassCastException 을 사전에 예방할 수 있다
ex)

ArrayList<Product> cart = new ArrayList<Product>();
cs
위와 같이 Generic 으로 선언하면 Product 계열의 객체만 cart에 추가 될 수 있다

2016년 8월 8일 월요일

14day / SE / Interface

http://www.javatpoint.com
Interface :  다양한 계층구조 형성을 통한 다형성 지원에 목적이 있다 

다중 상속의 장점을 취득한다
(자바는 단일 상속을 채택. 다중 상속의 장점은 Interface를 이용해 처리한다)
상속의 장점은 부모로부터 재사용할 수 있는 멤버를 물려받고 ,
계층구조 형성을 통한 다형성 적용에 있다
Interface는 다양한 계층구조 형성을 통한 다형성 적용을 가능하게 한다 ( 재사용성 x )                                
                               
특징 :  java Interface는 abstract method와 public static final 상수로 구성된다
         interface의 하위 클래스는 extends 가 아닌 implements key를 이용한다
         하위클래스는 상위 인터페이스에서 명시한
         추상 메서드를 반드시 implements 해야 한다  
         인터페이스끼리 상속이 가능하다

http://www.javatpoint.com
  • java.util.Collection Interface 

     자료구조체의 최상위 인터페이스                            

  • java.util.Set Interface 
      Collection Interface의 하위 인터페이스로서
      이 인터페이스를 구현하는 구현체는
      중복을 허용하지 않는다
   

  1. HashSet class : 중복허용 x 
  2. TreeSet class : 중복허용x , 정렬기능 내장 
  3. LinkedHashSet class : 중복허용x , 순서       


  • java.util.List Interface 
Collection Interface의 하위 인터페이스이다
이 인터페이스를 구현하는 구현체는순번으로 요소를 관리한다

2016년 8월 5일 금요일

13day / SE / Static, Abstract


  • static :  class loading시 메모리 적재된다 
  참고) 자바 프로그램 실행
         :   class loading -> 코드검증 -> 실행(runtime)
             static 적재                           객체 생성
           
http://www.whatprogramming.com

static 멤버 ( 변수 및 메서드 )는 별도의 객체 생성 필요없다 
   ex)
1
2
3
4
class Person{
       static void test(){}
}   
Person.test(); <- 사용가능
cs

  • final 
  1. final  상수 : 재할당 불가  
  2. final  메서드 : 오버라이딩 불가 
  3. final  클래스 : 상속 불가      

     
http://www.itrelease.com

  • Abstract
  :  메서드와 클래스에 선언되는 자바 키워드
   

  • abstract method (추상 메서드 ) 
     -> 구현부가 없다
     -> 자식 클래스에서는 반드시 상속받는 부모 클래스의 추상메서드를 구현해야 한다
     -> 추상메서드는 하위 클래스에게 기능 구현을 강제하며 이는 시스템 표준화에 기여
     ex)

public abstract void study();
cs
   
/staticnon-static( object or instance )
메모리영역method area (or class area)heap
멤버클래스멤버객체멤버
적재시점class loading시 단 한번 적재객체 생성시 별도 적재
  • abstract class (추상 클래스)
  1. 직접 객체화 될 수 없다 
  2. 자식클래스의 생성자 내 super() 를 통해 객체 생성
  3. abstract class는 자식에게 멤버를 제공할 수 있다 
https://sites.google.com/site/sureshdevang/design-pattern-example

  • Template Method Design Pattern 
    : 부모 클래스에서 알고리즘의 뼈대를 구성하고
     자식 클래스에서 알고리즘의 일부만 구현케 하는 설계패턴

2016년 8월 4일 목요일

12day / SE / Project Review


프로젝트 코드 리뷰

  • 인스턴스 변수의 역할 : personArray 와 index
personArray = 배열의 역할을 하는 변수
배열의 정보와 값을 담거나 조건반복문에서 多사용
index = 실질적인 학생수 역할을 하는 변수
학생추가시 증가 / 중복확인 / 정원초과 체크

  • 생성자의 역할 : SchoolService 생성자 -> 배열이 길이를 받아 배열을 초기화
Student, Teacher, Employee 생성자 -> super 사용 (tel / name / address)
  • Inheritance(상속)의 장점을 schoolproject의 사례에서 설명

  • 상속의 활용으로 인하여 (tel / name / address)의 중복된 변수를 줄일수 있었으며
    부모생성자가 대표로 정보를 받는 역할을 하여 생성자와 메서드를 줄이고
    효율적인 코드를 생성할 수 있었다
  • Polymorphism(다형성)의 장점을 schoolproject이 사례에서 설명
부모타입을 이용하여 다양한 서브클래스들을 한번에 주고 받고 하였다.
결국에는 상속의 활용과 동일하다

2016년 8월 3일 수요일

11day / SE / Project


학교 구성원 관리 시스템 만들기

  • 구성원

  1. 학생 -> 전화번호, 이름 , 주소 , 학번 정보
  2. 교사 -> 전화번호, 이름 , 주소 , 과목 정보
  3. 직원 ->전화번호, 이름 , 주소, 부서 정보
  • 구현 기능
  1. 이 시스템을 사용하는 사용자는 학교 구성원을 한명씩 추가할 수 있어야 한다
  2. 전체 구성원 정보를 화면에 출력


  • 전화번호를 키 값으로

  1. 구성원의 상세정보를 반환
  2. 구성원 정보를 변경
  3. 구성원을 삭제



  • 제한 기능

  1. 총 구성원 수는 100명으로 제한한다
  2. 전화번호는 중복 금지


  • 구현 기술

  1. Array[]

2016년 8월 2일 화요일

10DAY / SE / Polymorphism


http://www.javatpoint.com
  • Polymorphism(다형성)

  "One Interface, Multiple Implements"
 하나의 메세지 방식으로 다양한 객체들이 각자의 방식으로 동작하는 성질

www.c-sharpcorner.com
  • Polymorphism 적용 장점 

   : 사용자 측에서는 하나의 메세지 방식만 알면 다양한 구현체들을 실행할 수 있다
     ex) 재생버튼 - Mp3플레이어, 동영상플레이어 ,
                        LP플레이어, 이클립스 등..

  • Polymorphism 적용원리 
ex)

1
2
3
4
5
6
class Animal{
class Person extends Animal{
}
Animal a = new Person();
cs
    자식 객체를 부모 타입의 변수로 참조할 수 있다
    만약 상속관계라면 compile error
ex)

Car c = new Person();  compile error 
cs
   

    http://www.cs.utexas.edu
  • Object casting 

부모 타입의 변수로 자식객체 참조시에는 부모로부터
상속받은 멤버(변수,메서드)와 오버라이딩된 메서드는 바로 접근 가능하다

하지만 자식의 독자적인 멤버(변수,메서드)는 별도의 절차가 필요하다 
부모 타입의 변수로 참조되므로 변수를 자식타입으로 형변환(Casting)하는 절차가 필요하다
ex)
1
2
3
Animal a = new Person();
    a.study(); compile error
    ((Person)a).study(); Object casting 
cs
     

http://www.java67.com
  • instanceof 연산자 

 ex) 객체 타입을 비교하는 연산자 is a 관계가 성립되면 true를 반환한다
1
2
3
4
5
6
class Animal{ }
class Person extends Animal{ }
    
    Person p = new Person();   
    System.out.println(p instanceof Person); true 
    System.out.println(p instanceof Animal); true  
-> is a 관계 성립되므로 true 
cs
 


  • java.lang.Object

    자바로 구성된 모든 클래스의 부모클래스이다(super class)
    상속하지 않는 클래스는 extends Object 자동으로 처리된다
    모든 자바 객체 ->Object에 정의된 멤버를 상속받게 된다
    모든 자바 객체 -> java.lang.Object 타입으로 참조될 수 있다
ex)

Object o1 = new Dog();
Object o2 = new Airplane(); 
cs
다형성 : 부모 타입의 변수에 자식객체 참조 가능

2016년 8월 1일 월요일

9DAY / SE / Inheritance


http://programmersnight.com
  • 상속 ( Inheritance ) 의 개념 
상속이란 부모의 멤버(인스턴스변수와 메서드)를 물려받는 것을 말한다

  • 상속의 특징
자식(sub)과 부모(super) extends keyword
ex)  class Person extends Animal{ }

   is a relationship :  사람은 동물이다 (is a 관계가 성립되었다)
 
   부모 차원에서 Encapsulation 적용된 멤버(변수,메서드)는
   상속받더라도 접근할 수 없다 (Private 명시했을 때)
   ( 접근이 필요하다면 setter/getter 를 활용해야 한다 )
 
http://jitendrazaa.com

  • 접근제어자 (access modifier)
      public > protected > default > private
   
      public : 어디서나 접근 가능
      protected : 같은 패키지내에서 접근 가능
      (단 상속관계시에는 다른 팩키지에서도 접근 가능)
      default : 같은 패키지내에서 접근 가능
      private : 자신의 클래스 내에서만 접근 가능
 

  • 상속의 원리 :   super keyword 
     상속 관계를 구성하고 자식 객체를 생성하면
     부모 객체부터 생성되어 마지막에 자식 객체가 생성된다 ( heap memory 영역 )
   
     이런 것이 가능한 이유는 생성자에는 별도 명시하지 않을 경우
     컴파일시에 생성자 실행 첫라인에 super() 코드가 자동 삽입되기 때문이다.
   
     super() 는 부모 생성자를 호출하여 객체 생성되도록 한다
   
     ex)
1
2
3
4
5
6
7
8
9
 class GrandParent{}
    class Parent extends GrandParent{}
    class Child extends Parent{} 
             
    new Child() 가 실행될 경우 객체 생성순서는? 
      GrandParent -> Parent -> Child 순서로 생성된다 
             
      자동삽입될 생성자의 형태는 
      Child(){super();}
cs
 

  • 오버로딩
   :  메서드나 생성자가 동일한 이름으로 매개변수를 달리하며
      여러번 정의하는 기법 ( 다양한 매개변수로 정의 )
      -> 사용자 편의성 증대

www.studytonight.com


  • 오버라이딩(메서드)
   : 부모에서 상속받은 메서드를
     자신에 맞게 재정의(수정)하는 기법
     -> 부모 메서드와 오버라이딩하는 자식 메서드 명이
         동일해야 하고 리턴타입 , 매개변수 또한 동일해야 한다
         접근제어자는 더 좁아지면 안된다
http://javarevisited.blogspot.kr

2016년 7월 31일 일요일