+28 라이브러리(ArrayList), Stack, Queue, HashSet, TreeSet, HashMap, Collections, 어노테이션
ArrayList, Vector, LinkedList 사용
ㅡㅡㅡㅡ ArrayList ㅡㅡㅡㅡ
김가가
김나나
김다다
ㅡㅡㅡㅡ Vector ㅡㅡㅡㅡ
김가가1
김나나1
김다다1
ㅡㅡㅡㅡ LinkedList ㅡㅡㅡㅡ
김가가2
김나나2
김다다2
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
list1.add("김가가");
list1.add("김나나");
list1.add("김다다");
System.out.println("ㅡㅡㅡㅡ ArrayList ㅡㅡㅡㅡ");
for(Object obj:list1)
{
System.out.println(obj);
}
Vector list2 = new Vector();
System.out.println("ㅡㅡㅡㅡ Vector ㅡㅡㅡㅡ");
list2.add("김가가1");
list2.add("김나나1");
list2.add("김다다1");
for(Object obj:list2)
{
System.out.println(obj);
}
LinkedList list3 = new LinkedList();
System.out.println("ㅡㅡㅡㅡ LinkedList ㅡㅡㅡㅡ");
list3.add("김가가2");
list3.add("김나나2");
list3.add("김다다2");
for(Object obj:list3)
{
System.out.println(obj);
}
}
HashSet(중복 제거) 사용
김가가
김나나
김다다
김가가
김나나
김다다
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
list1.add("김가가");
list1.add("김나나");
list1.add("김다다");
list1.add("김가가");
list1.add("김나나");
list1.add("김다다");
// 중복O
ArrayList list2 = new ArrayList();
list2.addAll(list1);
for(Object obj:list2)
{
System.out.println(obj);
}
// 중복X
HashSet set = new HashSet();
set.addAll(list1);
for(Object obj:set)
{
System.out.println(obj);
}
}
Stack, Queue 사용
ㅡㅡㅡㅡ Stack 이용하기 ㅡㅡㅡㅡ
김다다
김나나
김가가
ㅡㅡㅡㅡ Queue 이용하기 ㅡㅡㅡㅡ
김가가
김나나
김다다
public static void main(String[] args) {
System.out.println("ㅡㅡㅡㅡ Stack 이용하기 ㅡㅡㅡㅡ");
Stack st = new Stack();
// 값 추가
st.push("김가가");
st.push("김나나");
st.push("김다다");
// 값 출력
while(!st.isEmpty()) // Empty가 아닐 때까지 돌아 감
{
System.out.println(st.pop()); // pop : 반대로 출력
}
System.out.println("ㅡㅡㅡㅡ Queue 이용하기 ㅡㅡㅡㅡ");
Queue qu = new LinkedList();
// 값 추가
qu.offer("김가가");
qu.offer("김나나");
qu.offer("김다다");
// 값 출력
while(!qu.isEmpty())
{
System.out.println(qu.poll());
}
}
Iterator 사용
1
2
3
4
5
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
Iterator ir = list.iterator();
while(ir.hasNext())
{
System.out.println(ir.next());
}
}
IteratorList 사용
1
2
3
4
5
5
4
3
2
1
import java.util.*;
public class M5 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
ListIterator it = list.listIterator();
// 정방향 출력
while(it.hasNext())
{
System.out.println(it.next());
}
System.out.println();
// 반대로 출력
while(it.hasPrevious())
{
System.out.println(it.previous());
}
}
}
Iterator 단점 -> 2번 출력 안 됨
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
Iterator it = list.iterator();
// 1번
while(it.hasNext())
{
System.out.println(it.next());
}
// 2번, 재 출력 안 됨
while(it.hasNext())
{
System.out.println(it.next());
}
/////////////////////////
// 1번
for(Object obj:list)
{
System.out.println(obj);
}
// 2번, 재 출력 안 됨
for(Object obj:list)
{
System.out.println(obj);
}
}
ArrayList 변경, sort (p624)
hong
kim
lee
park
shim
import java.util.*;
public class M7 {
public static void main(String[] args) {
String[] names = {"kim", "shim", "hong", "lee", "park"};
Arrays.sort(names); // 자동 정렬
List list = Arrays.asList(names); // asList -> List
Iterator it = list.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
HashSet
1.
ㅡㅡㅡㅡ ArrayList ㅡㅡㅡㅡ
red
red
red
red
red
ㅡㅡㅡㅡ HashSet ㅡㅡㅡㅡ
red
import java.util.*;
public class M8 {
public static void main(String[] args) {
System.out.println("ㅡㅡㅡㅡ ArrayList ㅡㅡㅡㅡ"); // 중복O
ArrayList list = new ArrayList();
list.add("red");
list.add("red");
list.add("red");
list.add("red");
list.add("red");
for(Object obj:list)
{
System.out.println(obj);
}
System.out.println("ㅡㅡㅡㅡ HashSet ㅡㅡㅡㅡ"); // 중복X
HashSet set = new HashSet();
set.add("red");
set.add("red");
set.add("red");
set.add("red");
set.add("red");
for(Object obj:set)
{
System.out.println(obj);
}
}
}
2. 중복 제거
2 7 8 9 7 6 4 5 6 8
ㅡㅡㅡㅡ 중복 제거 후 데이터 ㅡㅡㅡㅡ
2 4 5 6 7 8 9
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[2, 4, 5, 6, 7, 8, 9]
import java.util.*;
public class M9 {
public static void main(String[] args) {
// ArrayList -> 복사
ArrayList list = new ArrayList();
for(int i=1; i<=10; i++)
{
int k = (int)(Math.random()*9)+1;
list.add(String.valueOf(k));
}
Iterator it = list.iterator();
while(it.hasNext())
{
System.out.print(it.next() + " ");
}
// ArrayList에서 복사 -> ArrayList에 있는 데이터의 중복 제거
HashSet set = new HashSet();
set.addAll(list); // list 모든 값 set에 저장(중복 제거)
it = set.iterator();
System.out.println("ㅡㅡㅡㅡ 중복 제거 후 데이터 ㅡㅡㅡㅡ");
while(it.hasNext())
{
System.out.print(it.next() + " ");
}
// ArrayList로 변경 -> 브라우저로 전송
ArrayList list2 = new ArrayList();
list2.add(set);
System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡ");
it = list2.iterator();
while(it.hasNext())
{
System.out.println(it.next() + " ");
}
}
}
TreeSet 사용 -> 검색에 용이
1.
12 20 22 35 37 54 57 74 78 89
ㅡㅡㅡㅡ 60점 이하 ㅡㅡㅡㅡ
[12, 20, 22, 35, 37, 54, 57]
ㅡㅡㅡㅡ 60점 이상 ㅡㅡㅡㅡ
[74, 78, 89]
import java.util.*;
public class M10 {
public static void main(String[] args) {
TreeSet set = new TreeSet();
for(int i=0; i<10; i++)
{
int score = (int)(Math.random()*101);
set.add(score);
}
Iterator it = set.iterator();
while(it.hasNext())
{
System.out.print(it.next() + " ");
}
// 오라클 -> BETWEEN-AND
System.out.println();
System.out.println("ㅡㅡㅡㅡ 60점 이하 ㅡㅡㅡㅡ");
System.out.println(set.headSet(60));
System.out.println("ㅡㅡㅡㅡ 60점 이상 ㅡㅡㅡㅡ");
System.out.println(set.tailSet(60));
}
}
2. 범위 지정해서 출력
ㅡㅡㅡㅡ 데이터 출력 ㅡㅡㅡㅡ
aKK
aaa
abb
abc
adf
bDc
bbb
bke
boi
ccc
cfd
cff
ddd
dfd
dff
ㅡㅡㅡㅡ 범위 지정해서 출력 ㅡㅡㅡㅡ
[bDc, bbb, bke, boi, ccc, cfd, cff]
import java.util.TreeSet;
public class M11 {
public static void main(String[] args) {
String[] data =
{"aaa","abc","adf","abb","aKK","bbb","bDc","bke",
"boi","ccc","cff","cfd","ddd","dfd","dff"};
TreeSet set = new TreeSet();
for(String s:data)
{
set.add(s);
}
System.out.println("ㅡㅡㅡㅡ 데이터 출력 ㅡㅡㅡㅡ");
for(Object obj:set)
{
System.out.println(obj + " ");
}
System.out.println();
System.out.println("ㅡㅡㅡㅡ 범위 지정해서 출력 ㅡㅡㅡㅡ");
System.out.println(set.subSet("b", "d"));
}
}
HashMap 사용
1.
ㅡㅡㅡㅡ 데이터 출력 ㅡㅡㅡㅡ
ID: admin
PW: 1234
Name: 김나나
import java.util.*;
public class M12 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("id", "admin");
map.put("pwd", "1234");
map.put("name", "김나나");
// key = 중복 허용X, value = 중복 허용O
System.out.println("ㅡㅡㅡㅡ 데이터 출력 ㅡㅡㅡㅡ");
System.out.println("ID: " + map.get("id"));
System.out.println("PW: " + map.get("pwd"));
System.out.println("Name: " + map.get("name"));
}
}
2. DB 연결 -> MyBatis
ㅡㅡㅡㅡ 실행 ㅡㅡㅡㅡ
맛집 목록 보기: SELECT * FROM food
맛집 상세 보기: SELECT * FROM food WHERE no=1
import java.util.*;
public class M13 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("foodListData", "SELECT * FROM food");
map.put("foodDetailData", "SELECT * FROM food WHERE no=1");
System.out.println("ㅡㅡㅡㅡ 실행 -> MyBatic -> DB 연결 ㅡㅡㅡㅡ");
System.out.println("맛집 목록 보기: " + map.get("foodListData"));
System.out.println("맛집 상세 보기: " + map.get("foodDetailData"));
}
}
3. Map -> 클래스 관리
ㅡㅡㅡㅡ A클래스 요청 ㅡㅡㅡㅡ
A:display() Call...
ㅡㅡㅡㅡ B클래스 요청 ㅡㅡㅡㅡ
B:display() Call...
ㅡㅡㅡㅡ C클래스 요청 ㅡㅡㅡㅡ
C:display() Call...
import java.util.*;
class A
{
public void display()
{
System.out.println("A:display() Call...");
}
}
class B
{
public void display()
{
System.out.println("B:display() Call...");
}
}
class C
{
public void display()
{
System.out.println("C:display() Call...");
}
}
// 클래스 관리 -> A, B, C -> 스프링
class Container
{
private HashMap map = new HashMap();
public Container()
{
map.put("a", new A());
map.put("b", new B());
map.put("c", new C()); // 팩토리 패턴
}
// 클래스 찾기
public Object getBean(String key)
{
return map.get(key);
}
}
public class M14 {
public static void main(String[] args) {
Container c = new Container();
System.out.println("ㅡㅡㅡㅡ A클래스 요청 ㅡㅡㅡㅡ");
A a = (A)c.getBean("a");
a.display();
System.out.println("ㅡㅡㅡㅡ B클래스 요청 ㅡㅡㅡㅡ");
B b = (B)c.getBean("b");
b.display();
System.out.println("ㅡㅡㅡㅡ C클래스 요청 ㅡㅡㅡㅡ");
C c1 = (C)c.getBean("c");
c1.display();
}
}
Properties
1. 파일 읽기
driver: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:XE
username: hr
password: happy
maxActive: 10;
maxIdle: 10
maxWait: -1
import java.util.*;
import java.io.*; // java.net, java.sql 예외처리
public class M16 {
public static void main(String[] args) {
try
{
Properties pr = new Properties();
pr.load(new FileInputStream("c:\\javaDev\\db.properties"));
System.out.println("driver: " + pr.getProperty("driver"));
System.out.println("url: " + pr.getProperty("url"));
System.out.println("username: " + pr.getProperty("username"));
System.out.println("password: " + pr.getProperty("password"));
System.out.println("maxActive: " + pr.getProperty("maxActive"));
System.out.println("maxIdle: " + pr.getProperty("maxIdle"));
System.out.println("maxWait: " + pr.getProperty("maxWait"));
} catch(Exception ex) {}
}
}
컬렉션
[1, 2, 3, 4, 5]
[4, 5, 1, 2, 3]
[1, 5, 4, 2, 3]
[1, 2, 3, 4, 5]
5
1
import java.util.*;
import static java.util.Collections.*;
public class M17 {
public static void main(String[] args) {
List list = new ArrayList();
addAll(list, 1,2,3,4,5);
System.out.println(list); // [1, 2, 3, 4, 5]
rotate(list, 2);
System.out.println(list); // [4, 5, 1, 2, 3]
swap(list, 0, 2);
System.out.println(list); // [1, 5, 4, 2, 3]
sort(list);
System.out.println(list); // [1, 2, 3, 4, 5]
System.out.println(max(list)); // 5
System.out.println(min(list)); // 1
}
}
제네릭
Java
Oracle
HTML
Java
Oracle
HTML
100
200
300
hong
shim
import java.util.ArrayList;
class Sawon
{
private int sabun;
private String name;
public int getSabun() {
return sabun;
}
public void setSabun(int sabun) {
this.sabun = sabun;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class M20 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Java");
list.add("Oracle");
list.add("HTML");
for(int i=0; i<list.size(); i++)
{
String subject = (String)list.get(i);
System.out.println(subject);
}
ArrayList<String> list2 = new ArrayList<String>();
list2.add("Java");
list2.add("Oracle");
list2.add("HTML");
for(int i=0; i<list.size(); i++)
{
String name = list2.get(i);
System.out.println(name);
}
ArrayList<Integer> list3 = new ArrayList<Integer>();
list3.add(100);
list3.add(200);
list3.add(300);
for(int i=0; i<list3.size(); i++)
{
int a = list3.get(i); // 언박싱
System.out.println(a);
}
ArrayList<Sawon> list4 = new ArrayList<Sawon>();
Sawon s1 = new Sawon();
s1.setSabun(1);
s1.setName("hong");
list4.add(s1);
s1 = new Sawon();
s1.setSabun(2);
s1.setName("shim");
list4.add(s1);
for(Sawon s:list4)
{
System.out.println(s.getName());
}
}
}
메서드 호출
1. Map 적용 전
import java.util.*;
interface I
{
public void display();
}
class A implements I
{
public void display()
{
System.out.println("A:display() Call...");
}
}
class B implements I
{
public void display()
{
System.out.println("B:display() Call...");
}
}
class C implements I
{
public void display()
{
System.out.println("C:display() Call...");
}
}
public class M2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("입력(a, b, c): ");
String cmd = sc.next();
I i = null;
if(cmd.equals("a"))
{
i = new A();
}
else if(cmd.equals("b"))
{
i = new B();
}
else if(cmd.equals("c"))
{
i = new C();
}
i.display();
}
}
2. Map 적용 후
import java.util.*;
interface II
{
public void display();
}
class AA implements II
{
@Override
public void display() {
System.out.println("AA:display() Call");
}
}
class BB implements II
{
@Override
public void display() {
System.out.println("BB:display() Call");
}
}
class CC implements II
{
@Override
public void display() {
System.out.println("CC:display() Call");
}
}
public class M {
public static void main(String[] args) {
Map<String, II> map = new HashMap<String, II>();
map.put("a", new AA());
map.put("b", new BB());
map.put("c", new CC());
Scanner sc = new Scanner(System.in);
System.out.println("입력(a, b, c): ");
String cmd = sc.next();
II i = map.get(cmd);
i.display();
}
}
입력(a, b, c):
c
CC:display() Call
3. if문 사용X -> 값 더해져도 값 추가 필요X
기능 입력: (write, list, detail, update, delete):
delete
삭제하기 기능 구현..
import java.lang.reflect.Method;
import java.util.*;
class Board
{
public void write()
{
System.out.println("글쓰기 기능 구현..");
}
public void list()
{
System.out.println("목록 출력 기능 구현..");
}
public void detail()
{
System.out.println("상세보기 기능 구현..");
}
public void update()
{
System.out.println("수정하기 기능 구현..");
}
public void delete()
{
System.out.println("삭제하기 기능 구현..");
}
}
public class M3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("기능 입력: (write, list, detail, update, delete): ");
String cmd = sc.next();
Board board = new Board();
/*if(cmd.equals("write"))
{
board.write();
}
else if(cmd.equals("list"))
{
board.list();
}
else if(cmd.equals("detail"))
{
board.detail();
}
else if(cmd.equals("update"))
{
board.update();
}
else if(cmd.equals("delete"))
{
board.delete();
}*/
try
{
Class className = Class.forName("com.sist.ann.Board");
Object obj = className.getDeclaredConstructor().newInstance();
Method[] methods = className.getDeclaredMethods();
for(Method m :methods)
{
if(cmd.equals(m.getName()))
{
m.invoke(obj, null); // 메서드 이름 없어도 호출 가능
}
}
}catch(Exception ex) {}
}
}
4. 어노테이션으로 메서드 호출
기능 입력: (write, list, detail, update, delete):
r
답변하기 기능 구현..
import java.lang.reflect.Method;
import java.util.*;
class Board
{
@RequestMapping("w")
public void write()
{
System.out.println("글쓰기 기능 구현..");
}
@RequestMapping("l")
public void list()
{
System.out.println("목록 출력 기능 구현..");
}
@RequestMapping("d")
public void detail()
{
System.out.println("상세보기 기능 구현..");
}
@RequestMapping("u")
public void update()
{
System.out.println("수정하기 기능 구현..");
}
@RequestMapping("d")
public void delete()
{
System.out.println("삭제하기 기능 구현..");
}
@RequestMapping("r")
public void reply()
{
System.out.println("답변하기 기능 구현..");
}
}
public class M3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("기능 입력: (write, list, detail, update, delete): ");
String cmd = sc.next();
//Board board = new Board();
/*if(cmd.equals("write"))
{
board.write();
}
else if(cmd.equals("list"))
{
board.list();
}
else if(cmd.equals("detail"))
{
board.detail();
}
else if(cmd.equals("update"))
{
board.update();
}
else if(cmd.equals("delete"))
{
board.delete();
}*/
try
{
Class className = Class.forName("com.sist.ann.Board");
Object obj = className.getDeclaredConstructor().newInstance();
Method[] methods = className.getDeclaredMethods();
for(Method m :methods)
{
RequestMapping rm = m.getAnnotation(RequestMapping.class);
if(cmd.equals(rm.value()))
{
m.invoke(obj, null);
}
}
}catch(Exception ex) {}
}
}
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Retention(RUNTIME)
@Target(METHOD)
public @interface RequestMapping {
String value();
}
인덱스 : 어떤 것을 찾을 지 구분
METHOD : 메서드 구분
@RequestMapping, @GetMapping, @PostMapping
TYPE : 클래스 구분
@Controller, @Repository, @Service, @Component, @Bean, @RestController
PARAMETER : 매개변수 구분
@Autowired, @Resource
CONSTRUCTOR : 생성자 구분
FIELD : 멤버 구분
@RequestMapping("w")
어노테이션 유지 기간
SOURCE: 소스파일에만 존재, 클래스 파일에 존재하지 않음 (한번만 사용)
CLASS : 클래스 파일에 존재, 실행시 사용 불가, 기본 값
RUNTIME: 클래스 파일에 존재, 실행시 사용 가능
어노테이션 서치 필요
Iterator : 데이터를 모아서 순차적으로 접근하게 하는 라이브러리
hasNext() : while() -> 데이터가 있는 개수 만큼
next() : 실제 데이터 읽기
ArrayList, Map, HashMap(중복 제거 용) 정도만 씀, 위에 건 잘 안 나옴
위 이론보다 오라클 연결이 더 중요
브라우저 제어 : js
데이터 제어 : java
데이터 저장 : oracle
쓰레드 : 한 페이지에 여러 기능이 따로 구현 -> Ajax -> VueJS, ReactJS(최신 언어)
풀 스택 -> java(back) + js(front)