백지부터 시작하는 이세계 코딩 생활
HashMap 본문
ArrayList 와 Vector는 순서가 존재함. 따라서 정렬을 가능하게 함.
// Vector 와 ArrayList의 기능은 유사하며 동적처리 차이만 있음.
// Vector : StringBuffer 와 같은은 배열
// Enumeration 인터페이스
// Stack 클래스 : 특징 -> 선입선출 기능을 가진다.
// Hashtable : Map 인터페이스를 구현한 함수.
// (참고: 인터페이스는 객체를 만들 수 없음)
// key값이 중복되면 기존의 값이 사라지고 덮어씌여진다.
// front controller 패턴
// 프론트 컨트롤러는 각각의 객체에 해당하는 컨트롤러들을 컨트롤함.
// 각각의 클래스는 자기들만의 객체를 구현하는 컨트롤러가 존해하는 상태.
// 다시말해, front controller와 class 사이의 MVC 패턴을 가진다.
// -생성-
// 컨트롤러 패키지 -> 컨트롤러 클래스 -> 컨트롤러 인터페이스 생성
// 패키지 생성 >> 모델, 뷰, 컨트롤러 생성.
// service(String path)에서 path를 통해 서비를 실행한다.
// 메인에서 호출할 때 path를 넣어줌.
// 프론트 컨트롤러 클래스 생성, 컨트롤러 인터페이스 생성.
// 프론트 컨트롤러에 각각의 컨트롤러를 담을 변수를 생성. (예제에선 map을 명명해서 사용)
// 맵 컨트롤러 초기화 : map.put("key", new Class());
// 서비스 클래스에서 컨트롤러 받아옴. Controller ctrl = map.get(path); ctrl.service(path);
// 만약 해당 컨트롤리 없다면 예외처리함.(try-catch)
// 팁 : 리소스에 모아놔도 무방함.
// 메인에서 프론트컨트롤러 선언 및 생성.
// frontCtrl.serive("key") 테스트코드
// 메인에서 메뉴를 실행
// 메인에서 String path = menu("key1", "key2");
// path가 없으면 해당사항 없음을 알리는 프린트 생성.
// 이때 main(null); 을 사용하여 재귀호출 사용하는 팁.
// 프론트컨트롤러에 꼭 해쉬테이블을 사용할 필요는 없지만 일일이 switch-case를 사용하는것은 번거롭기 때문에 해쉬테이블을 사용함.
// -전반컨트롤러 복습(녹화)-
// 사용하려는 각각의 패키지와 클래스를 생성.
// 전반컨트롤러 : 하위 컨트롤러를 호출하여 구현하는 역할.
// Hashtable을 만들어서 사용하려는 값들을 담아둔다. 주소는 key 값을 사용하여 접근한다.
// 각각의 하위 컨트롤러는 상위 컨트롤러의 implement를 잊지 말고 해주자.
// 클래스 접근은 "클래스 매개변수"(띄어쓰기)로 해주고, 접근한 클래스의 함수는 "매개변수.함수"(점연산자)방식으로 접근한다.
// Hashtable을 생성한다. > public FrontController()를 생성한다.> 해당 매서드를 만들어준다.
// 프린트 해주는 코드 작성. > return key; 에서 반환된 key값은 다른 컨트롤러를 작동하는데 쓰일 수 있다.
예제 1.
public class Ch23Ex01_Map_ex {
public static void main(String[] args) {
//value값엔 무엇이든 들어갈 수 있음. 이를 Object로 명명하고 사용함.
Hashtable<String, Object> friends = new Hashtable<String, Object>();
friends.put("H", "0101-1010\n");
friends.put("P", "0101-2020\n");
friends.put("U", "0101-3040\n");
friends.put("I", "0101-4050\n");
friends.put("U", "0101-5020\n");
friends.put("A", "0101-6070\n");
System.out.println("중복되는 값은 마지막에 입력했던 것으로 덮어씌여진다.");
friends.put("A", "0101-9999\n");
System.out.println("확인");
System.out.println("size is: "+friends.size());
System.out.println("HashTable all : \n"+friends);
System.out.println("----------------------");
System.out.println("배열의 key값만 가져올 수 있음.");
Enumeration<String> keys = friends.keys();
while(keys.hasMoreElements()) {
String key = keys.nextElement();
System.out.println("key is :"+key+","+friends.get(key));
}
System.out.println("K의 연락처: "+friends.get("K"));
}//M
}//C
예제 2.
package org.comstudy21.day22;
import java.util.Hashtable;
import java.util.Scanner;
interface View {
void show();
}
class Input implements View {
@Override
public void show() {
System.out.println("--- 입력 기능 ---");
}
}
class Output implements View {
@Override
public void show() {
System.out.println("--- 출력 기능 ---");
}
}
class Search implements View {
@Override
public void show() {
System.out.println("--- 검색 기능 ---");
}
}
class End implements View {
@Override
public void show() {
System.out.println("--- 종료 기능 ---");
System.exit(0);
}
}
public class Day22Ex02 {
static Scanner scan = new Scanner(System.in);
static Hashtable<Integer, View> map = new Hashtable<Integer, View>();
static {
map.put(1, new Input());
map.put(2, new Output());
map.put(3, new Search());
map.put(4, new End());
}
public static void main(String[] args) {
System.out.println("1.입력 2.출력 3.검색 4.종료");
System.out.print("선택: ");
int no = scan.nextInt();
try {
View view = map.get(no);
view.show();
} catch (NullPointerException e) {
System.out.println("해당 하지 않는 번호입니다!");
}
main(null);
}
}
'JAVA > Map' 카테고리의 다른 글
HashMap with MVC pattern (0) | 2020.08.11 |
---|
Comments