국비지원학원/Java

36일차

초코맛 2018. 12. 10. 01:09
반응형
*JCF
*Set
*Map
*JFC
*AWT / Swing

*Set
  • <1차원배열, 가변길이형, 모든데이터 입력받을수 있어(꺼낼때 문제발생해 입력제한) =>Generic 
  • 중복값을 저장하지 않는다.
  • 값이 순차적으로 추가되지 않는다.
  • <스스로 검색 불가(꺼내올수 없음?)
  • 값의 검색이 되지 않는다. =>Iterater라는 포인터 사용.    <(보통 next가 붙은 method를 갖는데 동네나쁜형과 같다.사람이 지날때까지(값이 있을때까지) 대기)
  • 사용법)
    • 1.생성
      • JDK 1.5이하에서는 Generic을 사용할 수 없고, 객체만 추가할 수 있었다.
      • Set<E> set = new HashSet<E>();
      • Set<String> set = new HashSet<String>();
    • 2.값 할당
      • set.add(값);
      • <이전에 값이 있는지 보고 넣는다. 순차적이 아님을 주의
      • 객체면 그냥 입력되지만 기본형인 경우 Wrapper class를 사용하여 객체가 만들어지고 입력된다.(autoboxing) <자바가 알아서 해주는것이라 막을수 없다.
    • 3.방의 갯수
      • set.size();
    • 4.방의 값 삭제
      • set.remove(값);
      • <list는 순차적으로들어가 인덱스로 지울수 있었으나, set은 순차적이 아니라 안에들은 내용으로만 지울수 있게 된다.
    • 5.조회(검색)
      • 없음 <list는 get(i)번째로 값을 꺼냈는데? get이 없어서 조회되지 않는다.
      • <Iterator는 Set의 Generic과 동일해야한다.
      • Iterator<E> ita = set iterator();
      • <iterator method로 제어권을 넘겨준다.
      • <값을 가졌는지 없는지 알수 없지만 있다면 끝까지 뽑는다(while)
      • while(ita.hasNext()){  =>반환형 boolean//다음요소가 존재하는지?
      •       //<while에는 주로 method가 들어간다.고 얘기해 주었었다.
      •       //자기는 없고 다른쪽에 있는걸 갖고 오는것.
      •       ita.next();    //반환형은 E   //요소의 값을 얻고 포인터를 다음으로 이동.
      •       //<이재찬, 정택성,이재현...하나하나...
      • }
  • <Generic에 따라 Object이 아닌 Generic따라 형이 변경된다.


*Map
  • <키와 값의 쌍으로 이루어진 데이터형
  • 이차원 배열처럼 생성.(행(자동증가=>가변길이형), 열(고정))
  • 키와 값의 쌍으로 이루어져 있다.
  • =>KVP(Key Value Pair) => Map !!
  • 키는 유일해야하고 값은 중복가능.


세로는 n개


KVP
키와 값의 쌍하나를 entry라고 한다.     <키를 넣어서 그 값을 빼게 만듦
  • 키를 사용하여 값을 얻는다.
  • Map<K,V> map=new HashMap<K,V>(행의 수를 넣을수 있다.);
  •                                    HashTable 
  • HashMap : 동기화 x : 훨씬 빨라 많이 사용한다.16개의 행이 기본적으로 생성.
  • HashTable : multi Thread에서 동시접근이 안된다. 동기화 o. 11개의 행이 기본적으로 생성
  • 공통점 ; 전체  행의 약75%의 데이터가 존재할 때 가장 빠른 검색을 하게 된다.
  • 사용법)
    • 1.생성
      • Map<K,V> map=new HashMap<K,V>(행의수);
      • Map<K,V> map1=new HashTable<K,V>(행의수);
    • 2.값 추가 : autoboxing 이 일어남.
      • map.put(키, 값);
    • 3.행의 갯수(열은 어짜피 2개)
      • map.size();
    • 4.값 얻기 : unboxing이 일어난다.
      • map.get(키);  =>반환 (값)
    • 5.삭제
      • map.remove(키); 
    • 6.모든 키 얻기)-map검증
      • Set<E> map.keySet()  =>반환형 E로.
      • Iterlater로검증할수있다.
    • 7.키가 존재하는 지?
      • map.containsKey(키) =>반환형 boolean
    • 기본형이들어가면 boxing이 일어나 묶고 풀고 자동으로 해준다.
*JFC(Java Foundation Class)
  • <윈도우 디자인 (껍데기)
  • Window용 Application을 작성(제작)할 수 있게 제공하는 클래스 들.
  • AWT(Abstract Window Toolkit :추상적인 윈도우 제작도구), Swing 제공 (디자인만_동작을 하지는 않는다.)
  • 사용자의 행동에 따른 동작은 Event Handling으로 처리한다.
  • <(상속, 구현에 대한 개념을 확실히 얻을 수 있다.)
  • <gui:마우스 클릭 cui: 키보드입력 
  • <exe가 필요한데awt는 제공하는 반면, swing은 cmd로 위처럼 실행해야 실행할수 있다.
  • exe(윈도우 실행 파일) 파일이 만들어 지지 않는다.(확장성이 떨어짐)
  • <별도의 프로그램으로 exe를 만들수 있는데, java가 깔려있어야만이 실행가능.(정말 좋아야 깔게 되서 별로..) 그래서 잘 만들지 않는다
  • <별로 안이뻐...
-AWT(Abstract Window Toolkit)
  • <(상속, 구현에 대한 개념을 확실히 얻을 수 있다.)
  • java.awt package 에서 관련 클래스를 제공.
  • Component Programming (:기능을 가질수 있는 최소한의 단위로 만들어진 디자인 클래스들)   <클래스하나가 디자인 하나.
  • 무겁다(느리다.) 버그가 많다. 미려하지 않은 디자인.
  • 장점 : 제작하기 쉽다.
  • JVM은 컴포넌트의 기능만 알고 있다.
  • 디자인은 OS에서 가져다가 사용. (OS마다 디자인이 다르게 그려진다.=>원하는 디자인에서 깨질수 있다..)
  • <왜 무겁고 버그가 많으냐하면 =>연산(주고받음)이 많이 필요/많은 데이터를 주고 받아야./(java와 어쌤블리어)언어가 달라서 버그발생 확률↑
Class
button btn=new Button("버튼");  ↓

JVM(기능만 앎) ↓ ↑(버튼이있다고 해서 델꾸옴)

os
OS (Windows,Linux,Mac-gui기능을 가짐)
  • 그래픽성능이 떨어진다.
  • 이미지 다루기가 어렵다.=>개선한게 Swing.
-Component(기능)의 종류
  • 눈에 보이지 않는 Component (non Visual Component)
    • Font , Color  
  • 눈에 보이는 Component (Visual Component)
    • Window Component : 사용자에게 보여주는(지는) 기능   <얘가 있어야 보여진다.
      •  Window, Frame, Dialog, FileDialog
    • Container Component : Component를 저장하고 대치하는 기능
      •  Panel, ScrollPane
    • Component : 기능을 가진 최소한의 단위
      • Label, Button, Checkbox(radio button은 없는데, CheckboxGroup으로 묶으면 변경됨), TestField, TextArea, List(편집은 불가능하고 보여지기만 하는?친구목록?), Choice(선택하게 하는것?)

*작성법(윈도우 디자인)   <반드시 이럴필요는 없는데..
  • 1.Window Component를 상속
    • public class Test extends Window|Frame|Dialog {  //is a 관계 oo은 윈도우 컴포넌트 입니다.
    • Window :기본 창의 틀 (- ㅁ x 있는 창.) (Frame이라는 자식이 있다._윈도우안에 얇은 창같은....: 일반 컴포넌트나 Container Component가 배치)
    • Frame F = new Frame(); //했을때 프레임을 만들기 위해  window를 먼저 만들고 만드는데,
    • Window  w = new Window; //했을때에는 프레임을 또만들고 붙여주고 해야한다. 
    • //상속의 관계이기 때문에 Frame만 했을때 window없이도 사용이가능해져 비교적 간단.
  • 2.사용자에게 제공할 일반 컴포넌트 생성
    • <이벤트처리가 들어가면 조금 달라진다.
    • <생성자 안에서 많이 만들어준다.
    • public Test(){
    •         Button btn = new Button("클릭");
    •         Label l = new Label("라벨");
  • 3.배치관리자(Layout Manager  / 싫으면 수동으로 할 수도 있다.)를 사용하여 배치
    • add(생성된 컴포넌트(btn같은것));    //이때의 add 는 코드의 재사용성으로 부모에 있는 코드를 사용.
  • 4.윈도우의 크기 설정
    • setSize(w,h);     <ux팀. 사용이 편리하게 만드는?배치? 같은거?
  • 5.사용자에게 보여주기 
    • setViable(true);
    • }

*배치관리자(non Visual : 눈에 보이는 것들이 아님.)
  • Window Component와 Container Component가 배치하는 위치를 설정해 놓은 것.
  • 자동배치와 수동배치 2가지를 사용
    • 자동배치  :BorderLayout, FlowLayout, GridLayout, GridBagLayout, CardLayout    <(좌표를 주고 그자리에 가서 붙게 만든다.)
      • 배치가 편리하다는 장점이 있는데, 대신에 세밀한 디자인이 어렵다.
      • 적용) setLayout(new LayoutManager());   <객체 생성 가능 Class BorderLayout.awt
      • Frame은 BorderLayout 이 기본 Layout이라, 주지않아도 적용되어 있다.
      • Panel은 FlowLayout 이 기본 Layout.
        •  
*Border Layout(경계 레이아웃)
  • Frame의 기본 Layout으로 아무것도 주지 않아도 기본으로 적용.
  • 적용) setLayout(new BorderLayout());   <주지 않아도 기본으로 적용.
  • 특징)
    • 지역으로 구분(동, 서, 남, 북)?
    • 하나의 지역에는 하나의 Component만 배치 된다.
    • 배치되는 Component는 고유크기가 무시되고, 지역에 크기만큼 커진다.
    • Center의 Component의 크기가 가장 크다. 
    • add("영역", 배치할 컴포넌트);
    • <South라고 가정했을때 South만의 크기가 있는데, 붙는 버튼이 그 크기 만큼 늘려서 붙는다.(늘었다 줄었다)
*Flow Layout(흐름 레이아웃)
  • Panel의 기본 Layout
  • 적용) setLayout(new FlowLayout());
  • 특징)
    • 컴포넌트가 고유크기를 가지면서 순서대로 배치된다.
    • 윈도우의 크기가 변경되면 컴포넌트의 위치가 변경된다.
    • <줄이면 흐름에 맞추어 컴포넌트가 아래로 떨어져 자리를 찾아 변경된다.
    • p.setLayout(new FlowLayout());
    • p.add(b);          <Button b = new Button(); button의 b가 들어가는것.
    • 만약, p. 빼고 setLayout(new FlowLayout());을 불러주면 border Layout에서 Flow Layout으로 변경됨.
*Card Layout(카드 레이아웃)
  • 한정적인 공간에서 여러디자인을 번갈아 가며 보여줄때 사용.  (ex. tab)대표적
  • Container Component에만 적용가능.  <Window Component에는 못한다.
  • 패널객체.setLayout(new CarLayout()); 패널객체 여기에 이벤트  <가 들어가져야 인지하여 번갈아가며 보여줄수 있다. 없으면 보여줄수 없다.
  • 적용) 

 

 

반응형

'국비지원학원 > Java' 카테고리의 다른 글

38일차  (0) 2018.12.18
37일차  (0) 2018.12.18
35일차  (0) 2018.12.08
34일차  (0) 2018.12.06
33일차  (0) 2018.12.06