2018년 4월 27일 금요일

(4. 27.) 채팅 프로그램 만들기-Server

1. 서버 측 프로그램 구성


2. 소스 분석


  1) 멤버변수
---------ArrayList<DataOutputStream> list = new ArrayList<DataOutputStream>();

  2) 생성자
---------Socket s = socket.accept();
ServerThread serverThread = new ServerThread(s);

serverThread.start();
   3) Broadcast
---------synchronized (list) {
for(DataOutputStream tmp:list) {
                        tmp.writeUTF(msg);
   4) 메인

   5) ServerThread
---------생성자(메서드 파라미터: 소켓)
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
list.add(dos);
   

---------run(@Override)while(true) {
String msg = dis.readUTF();
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
//dos.writeUTF(msg);
broadCast(msg);
}

3. 사용 클래스
   - IO: DataOutputStream, DataInputStream
   - NET: ServerSocket, Socket
   - etc.: ArrayList, String, Exception
   3-1) 소켓 접속방법
Socket ss = new Socket("111.222.333.55", 1111);
Socket s1 = new Socket(new InetSocketAddress("www.naver.com", 1111), null, daemon);
Socket s21 = new Socket();

s21.connect(new InetSocketAddress("www.naver.com", 1111));


2018년 4월 26일 목요일

(4. 26.) JAVA Collections, File IO interface, Generic Type

1. JAVA Collections
  - List, Map..
  - 상속 관계도
      |_ 출처: https://www.programcreek.com/2009/02/the-interface-and-class-hierarchy-for-collections/



 2. 채팅 프로그램
      - 자주 사용하는 단어 분석하기 예제







2018년 4월 25일 수요일

(4. 25.) JAVA IO pkg

1. InputStream, OutputStream Class



2. Reader, Writer


3. BufferedReader, BufferedInputStream
    BufferedWriter, BufferedOutputStream




(4. 25.) Easy to Make JAVA UI with NetBeans IDE

1. NetBeans
  - Download: https://netbeans.org
  - About NetBeans: https://netbeans.org/features/index.html

2. How to make Java UI 





2018년 4월 24일 화요일

(4. 24.) 람다식(Java Lambda Expression)

1. 람다식 필요성의 배경
  -  객체지향 프로그래밍 + Functional Programming의 효율적인 언어 변화
    * 추론을 언어화
         button.addActionListener를 사용하니까 ActionListener를 수행하겠구나 —> 어차피 ActionListener 객체를 구현하겠구나
—> 그렇다면 간략하게 사용할 수 있겠구나
  - Java 8부터 지원
  - Anonymous function 생성을 위한 표현식

2. 문법상 장점
  - 자바 코드가 간결해짐
  - 컬렉션 필터링 및 매핑으로 원하는 결과를 쉽게 집계
  - 매개 변수를 가진 코드 불록이지만 런타임에서 익명 구현 객체를 생성


3  기본문법
   - 매개변수 -> {실행코드}
   - 함수정의처럼 보이지만 런타임시에 인터페이스에서 익명 구현 객체로 생성
   - 어떤 인터페이스를 구현할 것인가는 대입되는 인터페이스에 의존

(4. 24.) Container, Component, Frame, Panel, Anonymous Class, MenuBar

1. AWT Container 상속관계도


2. Container 상속계층과 Frame/Panel 컨테이너 사용 방법
 
  - AWT 객체 및 이벤트 사용방법

3. LayoutManager 선택하기
   - 다양한 매니저가 있지만 사용이 어려움
   - GridLayoutManager, BorderLayout, FlowLayout 이 초보자들 사용하기 간단



- 익명객체 사용개요

 - AWT 객체 사용법 확장,응용
1. 

2018년 4월 23일 월요일

(4. 23.) Wrapper Class

1. Wrapper Class
  - JAVA 1.5 이상 지원
  - The Integer class wraps a value of the primitive type int in an object
      ==> 유용한 필드와 유용한 메소드를 사용하게 하고 싶어서 만든 Wrapper 클래스
  - 기본타입 값은 외부에서 변경할 수 없고, 변경하고 싶다면 새로운 포장객체를 만들어야 한다.

2  auto boxing - unboxing 
  - primitive-Wapper Class 간에 값을 넣어주고 빼주는 현상(JAVA 1.5 이상)
  -  자동박싱: 포장클래스 타입에 기본값이 대입될 경우 발생
Integer obj = 100; //자동박싱
  -  Integer obj=new Integer(200)
     int value1=obj; //자동 언박싱
      int value2=obj+100;  //자동 언박싱
  - 이 부분은 성능에 큰 악영향을 주기 때문에 박싱-언박싱을 사용하지 않는 것이 좋다.
  - List<Integer> list = new ArrayList<Integer>();
     list.add(200); //자동 박싱

(4. 23.) Exception

1. Exception 개요
  -  JVM 실행에 문제가 생긴다면 아무리 견고하게 만들어도 결국 실행불능이 된다.
  -  곧바로 프로그램이 종료되기 때문에 에러와 예외는 동일하다.
  -  하지만 예외는 예외처리를 통해 프로그램 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.

2. Exception 상속관계도
   - Exception-RuntimeException-IndexOutOfBoundsException-ArrayIndexOutOfBoundsException
  - Throwable-Exception
                     -Error
  - 자바에서는 예외를 클래스로 관리한다.
   - 모든 예외클래스는 Exception을 상속받는다

3.  실행예외는 자바 컴파일러가 체크하지 않는다(RuntimeException -> Unchecked Exception)
   - 경험 & api 의존한 예외처리 코드를 작성해야 한다
   - 자주 발생하는 오류
   NullPointerException
   ArrayIndexOutOfBoundsException: 배열 인덱스 범위 초과
   NumberFormatException: 문자열을 숫자로 변경하다 발생하는 예외
   ClassCastException: 상속관계, 구현관계(interface)에서 억지로 타입 변환을 시도할 경우 발생하는 예외

   - e.getMessage() //역시 보안상 취약
Sysout(“Exception-01”); //보안 테이블을 별도 보관하고 있고, 개발자는 그 예외처리 보안 테이블에 맞게 출력해주는 것이 좋다.

4   예외처리 코드
  - 예외처리 코드(try-catch-finally): 1. 생성자 내부 2. 메소드 내부
try{
//예외 발생 가능 코드 위치
} catch(Exception e){
//try 예외 발생하지 않는 경우 스킵
//try에서 예외 발생하면 즉시 실행을 멈추고 catch로 들어와서 예외 처리 코드를 실행
} finally{
//예외처리, 예외 발생 여부와 상관없이 항상 실행할 내용이 있는 경우 finally블록을 작성해준다.
}
  - try-catch 블록을 사용하는 방법 세 가지
  1  중첩 catch
  2  멀티 catch: | 으로 catch ==> catch (SQLException e1| ClassNotFoundException e) {
  3  inner catch 블록

5 throws, throw


throws: 예외 처리 핸들러 넘김
throw: 예외 처리 객체 생성

6 unchecked Exception vs checked Exception
  -  unchecked Exception: Runtime 시 예외처리
  -  checked Exception: 컴파일시 예외철

7  try-catch-fanally 블록
  - finally은 항상 실행되기 때문에 자원종료 등 예외처리 또는 오류와 상관없이 항상 실행되야 하는 코드 추가

JAVA Swing GUI 연습

1. 결과물
    

2. 설명





2018년 4월 20일 금요일

(4. 20.) Map, Collection, Iterator

1. Map 인터페이스
  ○ 구현객체인 HashMap으로 사용가능
     - {key, value} 쌍으로 사용

  ○ keyset() 메소드
     - map의 key값을 가져온다.

  ○ Iterator
     - map의 keyset()메소드의 반환타입
     - hasNext()와 next() 메소드 활용가능

(4. 20.) interface

1. 인터페이스의 필요성
  □ 인터페이스의 역할
    1. 개발 코드를 수정하지 않고 사용객체 변경
    2. 객체 선택에 따른 실행내용, 리턴값 다양화(다형성)

  □ 인터페이스로 구현된 API Comparable
  □ 인터페이스 선언
    ○ interface 예약어 사용
--------> public interface 인터페이스이름{ ... }
    ○ interface의 멤버는 상수와 메소드 Only
--------> 상수필드와 3가지 메소드로 선언 가능
--------> 생성자 없음  

   □ 인터페이스로 만들어진 Servlet
    ○ 굳이 왜? 귀찮게 몇 단계 내려가서 사용하도록 구성해놨을까?
--------> 확장성 고려

   □ 익명구현객체
    ○ 소스파일 없이 구현객체 생성 가능(JAVA 8 이상)
    □ 다중 인터페이스 구현
      ○ implements 인터페이스이름1, 인터페이스이름2, 인터페이스이름3 ...

    □ 인터페이스 사용
      ○ 인터페이스도 참조변수 : 구현객체의 번지를 참조한다.
-------->인터페이스 변수;            //RemoteControl rc;
-------->변수=구현객체;              //rc=new Audio();

    □ 인터페이스 상속
      ○ 인터페이스도 상속가능(클래스와 달리 다중상속 가능)
            public interface 인터페이스이름 extends 상위인터페이스1, 상위인터페이스2{ ..}
--------> public interface MyHttpServlet extends HttpServlet, GenericServlet

2018년 4월 19일 목요일

(4. 19.) 다형성, Override, Abstract

1. 타입변환과 다형성
  ○ 부모클래스로 타입변환 허용
     : 즉, Tire tire = new MyTire(); / Tire tire1 = new YourTire(); 처럼
      Tire를 상속받은 자식클래스를 생성하면서 부모클래스로 타입변환 가능
2. 상속, 다형성과 JVM 동작절차
   ○ 필드의 다형성(Polymorphism variable)

   ○ 왜 부모타입으로 사용하니?
       - 다형성을 구현하기 위해 사용한다.
       - 즉, 필드 타입은 변함없지만 실행 도중 갈래길에서 실행결과가 달라질 수 있다.

   ○ 위의 Car Class를 배열로 관리하기
       - class Car{ Tire[] tires={new Tire("FR", 6), new Tire("FL", 6), new Tire("BR", 6), new Tire("BL", 6)};}

   ○ 매개변수의 다형성
      - run(Object o);
      - run(Shape s);
      - run(Component c);
LINE 1:                       Driver d = new Driver();
LINE 2: Bus b = new Bus();
LINE 3: Taxi t = new Taxi();

public void drive(Vehicle v){//오류 미발생
v.run();
}

public void drive(Bus v){//Line 3 컴파일 오류
v.run();
}


3. Abstract 
○ 추상(Abstract): 공통 특성 추출
   - instance 생성 불가
   - extends 뒤에만 가능
○ 추상(Abstract)클래스 용도
     1. 용도에 맞는 클래스의 필드와 메소드 통일
     2. 클래스 작성시간 절약

○ 추상(Abstract)클래스 선언
    public abstract class Phone{
         ...
     }
○ 추상 메소드 선언
    public abstract class Animal{
       public abstract void sound();
   }
○ 추상 메소드 오버라이딩
    @Override
     public void sound(){ //"멍멍";};

2018년 4월 18일 수요일

5.5.1. Reference Type Casting

Reference Type Casting

Given a compile-time reference type S (source) and a compile-time reference type T (target), a casting conversion exists from S to T if no compile-time errors occur due to the following rules.


https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.5.1

(4. 18.) Inheritance, Overriding

1. 상속
  ○ 확장성, 재사용성, 성능
   ○상속에 대한 메모리 이해가 필요

   ○ JAVA 상속 특성

   ○ super()
     - 부모생성자 호출
     - super가 부모 객체를 참조하고 있기 때문에 직접 접근 가능

2. Overriding
 ○ 결과를 보면 Child의 name은 있지만 아무짝에도 쓸모가 없다.

 ○ 결과를 보면 Child의 super객체의 메서드를 호출하기 때문에 여전히 무의미

 ○ 이제서야 overriding을 통해서야 Child 객체의 메소드가 호출된다.

 ○ Child의 game()객체가 무의미 하잖아. shadow effect

 ○ toString()은 누구의 것?


 ○ this, super, modifier
  ○ String Class is very important! yay!

[Android Studio] Installation and Make a Layer for Mac OS(High Sierra)

1. download android studio https://developer.android.com/studio/#downloads 2. Make a Shared Resource(String in this case) 3...