반응형
*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()); 패널객체 여기에 이벤트 <가 들어가져야 인지하여 번갈아가며 보여줄수 있다. 없으면 보여줄수 없다.
-
적용)
반응형