2026-06-08
- Java 3
| java 3생성 < 맨위의 창에서 표모양 클릭 < open perspectiva 에서 java 선택 자바 프로젝트 53 모듈해제 < Java SE - 17 설정 java 2 에서 address book 프로젝트 복사 < java 3으로 붙여넣기 < 프로젝트 생성란 마우스 우클릭 < import < existing < browser < 파일선택 <finish |
Sample 53
| StringMainClass |
package Sample53;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class MainClass {
public static void main(String[] args) {
/*
ArrayList: 검색, 대입(배열)
배열 = 정해진 크기 안에서 사용할 때
배열리스트 = 크기가 자유자재로 필요할 때
LInkedList : 실시간 추가/삭제에 적합 -> 게임
*/
List<String> list = new ArrayList<String>(); // List <자료형> 변수명 = new ArrayList<자료형> ();
list.add("Giants");
list.add(new String("tigers"));
list.add("Twins");
//linkeList 기본형식
//LinkedList<String> linkedList = new LinkedList<String>();
//if 실시간이 필요해진다면?
LinkedList<String> linkedList = new LinkedList<String>(list);
linkedList.add("Landers");
for (String str : linkedList) {
System.out.println(str);
}
//Linked list 에만 있는 기능
//0번찌에 추가하는 기능
//addFirst -> 현재 있는 배열의 맨 앞에 삽입
linkedList.addFirst("Eagles");
//addLast -> 현재 있는 배열의 마지막에 사용
linkedList.addLast("Bears");
for(String str : linkedList) {
System.out.println(str);
}
//일반 list에는 다음과 같에 add first, addlast기능을 사용할 수 없다
//List.addFirst("Eagles");
//List.addLast("Bears");
// list, linkedList 둘 다 존재하는 기능
//isEnpty -> list 의 boolean 기능에 해당한다
if(list.isEmpty()) {
}
/*
interator : 반복자 == 포인터 (주소) -> 76f231 이렇게 6자리가 있을 때 총 24 비트
2진수로 표현하면? f = 1111
ArrayLIst 에서 사용방법
list.get(index)
index [0] -> [1] -> [2]
iterator 0x01 0x02 0x03
*/
// for 문을 돌려서 이렇게 사용하는 방법이 있고
for (int i = 0; i < linkedList.size(); i++) {
String str = linkedList.get(i);
System.out.print(str);
}
// foreach 문으로 iterator 과 함께 사용하는 방법이 있다
Iterator<String> iter = linkedList.iterator(); //제일 첫번째 주소
while(iter.hasNext()) { //hasNex -> 다음을 가지고 있니?? 라는 뜻 boolean의 뜻
String value = iter.next(); //next 는 Value 를 Return 해 준다
System.out.println("value :" + value);
}
//linked list 와 array list 는 거의 차이가 없으나 기능의 존재 여부가 다르다
}
}
| Sample 53 - 출력결과 |
|
Giants
tigers Twins Landers Eagles Giants tigers Twins Landers Bears EaglesGiantstigersTwinsLandersBearsvalue :Eagles value :Giants value :tigers value :Twins value :Landers value :Bears |
Sample 54
| MainClass |
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class MainClass {
public static void main(String[] args) {
/*
Collection
Map :interface
HashMap : Class <- index 를 사용하는 것이 아니다. 순서를 매기는 것이 아니기 때문에 숫자가 아닌 Key 로 접근해야 함
사전의 역할 = key 값을 넣어주면 value 값이 나온다.
예) key : value -> Json
"apple" : "사과"
Tree 구조로 구성되어 있다.
key 값은 중복을 허용하지 않는다.
TreeMap : Class
HashMap + Sorting(Key)
HastMap 에 비해서 효율은 떨어진다 ( 무겁기 때문 )
*/
//형식 1
// HashMap<String, String> hMap = new HashMap<String, String>();
//형식 2 : 실무 사용률 높음
Map<String, String> hMap = new HashMap<String, String>();
//추가
hMap.put("apple", "사과"); // <- 한쌍으로 관리된다
hMap.put("pear" , "배");
hMap.put("banana", "바나나");
//map의 크기
System.out.println(hMap.size());
//key 로 value를 취득
String _value = hMap.get("pear");
System.out.println(_value);
Iterator<String> iter = hMap.keySet().iterator(); // 형식 Iterator<key 값의 자료형> 변수 = ? . keyset().iterator();
while (iter.hasNext()) {
String key = iter.next();
String value = hMap.get(key);
System.out.println("key: " +key + "value" + value);
}
//삭제
hMap.remove("pear");
_value= hMap.remove("pear");
System.out.println("삭제된 데이터는 " + _value + "입니다. ");
//수정 -> 동일한 키에 값을 새로 추가하면 수정된다
hMap.put("apple", "능금");
hMap.put("grape", "포도");
hMap.put("pear", "배");
hMap.put("orange", "오렌지");
iter = hMap.keySet().iterator();
while (iter.hasNext()) {
String key = iter.next();
String value = hMap.get(key);
System.out.println("key: " +key + " value: " + value);
}
//수정
_value = hMap.replace("apple", "사과");
System.out.println("변경된 값: " + _value);
_value = hMap.get("apple");
System.out.println("변경된 값: " +(_value));
//검색
boolean b = hMap.containsKey("apple");
System.out.println(b);
if(hMap.containsKey("banana")) {
String value = hMap.get("banana");
System.out.println(value);
}
//TreeMapl 을 이용해서 정렬
//hashMap -> treeMap
TreeMap<String, String> tMap = new TreeMap<String, String>( hMap); //hmap 을 생성자 () 안에 넣기
//오름차순 정렬
Iterator<String> it = tMap.keySet().iterator();
while(it.hasNext()) {
String key = it.next();
String value = tMap.get(key);
System.out.println("ket : " + key + " value : " + value);
}
//내림차순 정렬
Iterator<String> it_1 = tMap.descendingKeySet().iterator();
while(it_1.hasNext()) {
String key = it_1.next();
String value = tMap.get(key);
System.out.println("ket : " + key + " value : " + value);
}
//가장 많이 쓰는 hash Map 예시
// 1. 리스트 생성
List<String> list = new ArrayList<String>();
list.add("메모");
list.add("내용입니다");
//2. hasymap <key, value> 변수 그릇 이름 = new hasymap <key, value>(); 세팅
//key 값에 들어갈 수 있는 것들 -> String, List<>, Integer, studentDto, AddressDto
HashMap<String, Object> dataMap = new HashMap<String, Object>();
//3. 2번에서 설정한 변수 그릇에 원하는 String , object 집어넣기
//현재 dataMap 에다가 object로 문자열도 집어넣고 숫자열도 집어넣고 list 도 집어넣은 상황
dataMap.put("학생", "홍길동");
dataMap.put("번호", 1001);
dataMap.put("내용", list);
//4. 출력 결과 확인 -> {내용=[메모, 내용입니다], 번호=1001, 학생=홍길동}
System.out.println(dataMap);
}
}
| Sample 54 -출력결과 |
|
3
배 key: bananavalue바나나 key: applevalue사과 key: pearvalue배 삭제된 데이터는 null입니다. key: banana value: 바나나 key: orange value: 오렌지 key: apple value: 능금 key: pear value: 배 key: grape value: 포도 변경된 값: 능금 변경된 값: 사과 true 바나나 ket : apple value : 사과 ket : banana value : 바나나 ket : grape value : 포도 ket : orange value : 오렌지 ket : pear value : 배 ket : pear value : 배 ket : orange value : 오렌지 ket : grape value : 포도 ket : banana value : 바나나 ket : apple value : 사과 {내용=[메모, 내용입니다], 번호=1001, 학생=홍길동} |
| Sample 54 -활용해보기 |
Map<Integer, String> map = new HashMap<Integer, String>();
//CRUD
// 추가 = 생성
map.put(4567, "홍길동");
map.put(4568, "일지매");
map.put(4569, "성춘향");
map.put(4570, "박흥부");
System.out.println("수감된 죄수는" + map.size() + " 명 입니다.");
//죄수번호 4567을 입력하면 죄수 이름 홍길동이 나오게끔 설정함
String bad_people = map.get(4567);
System.out.println(bad_people);
//Map에 있는 Key 값을 죄수번호를 뽑아 Set(집합) 상자에 담아 보여주기
// map과 key 는 연결되어 있다
Iterator<Integer> num = map.keySet().iterator();
/*
keyset 이란?
keySet()은 Map의 Key들을 꺼내서 for문을 돌리거나,
특정 Key가 존재하는지 확인할 때(contains) 주로 사용합니다.
원본 Map과 실시간으로 연동되어 있는 '거울' 같은 존재라고 기억하기.
*/
//num(Iterator)에 다음에 꺼낼 데이터(Key)가 남아있는 동안 계속 반복하기
while (num.hasNext()) {
// num에는 지금 map에서 꺼낸 key 값 죄수번호가 들어있다. num을 꺼내서 number 변수에 저장하면 number에는 죄수번호가 담기게 된다
Integer number = num.next();
//죄수번호를 호출하면 죄수 이름을 꺼내게 위에서 세팅했음 따라서 number를 get으로 호출해서 name 에 담으면 죄수 이름이 담긴다
String name = map.get(number);
/*
hash next 와 next 차이
hasNext(): "내 바로 다음에 데이터가 있어?" 하고 손을 뻗어 확인만 합니다. 있으면 true, 없으면 false.
next(): 확인했으면 다음 칸으로 점프하면서 그 칸에 있던 실제 데이터(주소값)를 숑 뽑아서 전달해 줍니다.
*/
System.out.println(" 죄수번호 : " + number + " 죄수 이름 :" + name);
}
//검색 = 조회
// 죄수 번호 그릇인 number_2 에 4567 을 포함하고 있으면 number_2 를 출력했을 때 참거짓 판별기인 boolean을 활용해 true, false 를 나오게 출력한다
boolean number_2 = map.containsKey(4567); // 주의 key 값을 초기에 어떤 자료형으로 설정했느냐에 따라 () 안에 잘 입력해야 한다
// 만약 숫자형 integer 로 잡았다면 따옴표 없이 숫자형 기입방식 따를 것
System.out.println(number_2); // number_2 에 죄수번호 4567 포함하고 있는 상태
if(map.containsKey(4567)) { //() 안에 key 값 담기
String name = map.get(4567); // //() 안에 key 값 담기
System.out.println(name);
}
//삭제
//Map.remove(4567); -> 주석 해제 하면 왜 null 이 나올까??
bad_people = map.remove(4569);
System.out.println(" [ " + bad_people + " ]석방, 죄수 목록에서 삭제를 진행한다");
// 수정
map.put(4570,"박놀부"); //바꾸려는 키값을 입력후 , 데이터 넣기
num=map.keySet().iterator();
while(num.hasNext()) {
Integer number = num.next();
String name = map.get(number);
System.out.println("번호 : " + number + " 죄수이름 : " + name);
}
}
}
| Sample 54 -활용해보기 출력결과 |
|
수감된 죄수는4 명 입니다.
홍길동 죄수번호 : 4567 죄수 이름 :홍길동 죄수번호 : 4568 죄수 이름 :일지매 죄수번호 : 4569 죄수 이름 :성춘향 죄수번호 : 4570 죄수 이름 :박흥부 true 홍길동 [ 성춘향 ]석방, 죄수 목록에서 삭제를 진행한다 번호 : 4567 죄수이름 : 홍길동 번호 : 4568 죄수이름 : 일지매 번호 : 4570 죄수이름 : 박놀부 |
sample 55 -singleton
싱글 턴 전재조건
A 클래스와 B 클래스가 서로 소통해야 된다 -> getter setter
싱글턴에 공통으로 사용하는 변수를 몰아넣어야 한다
왜 사용하나?
하나의 인스턴스를 만들어 두고 언제 어디서나 싱글턴을 통해 어느 클래스든 자유롭게 접근이 가능하게 만들기 위해
| MainClass |
package main;
import cls.Animal;
import cls.Human;
import single.SingtonClass;
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Human human = new Human("성춘향");
Animal animal = new Animal(1001);
// String name = human.getName();
// animal.setName(name);
animal.info();
//생성이 불가능
//SingtonClass sc = new singtonClass();
/*
SingtonClass sc = SingtonClass.getInstance();
System.out.println(sc);
sc = SingtonClas.getinstance();
System.out.println(null);
*/
}
}
| class Human |
package cls;
import single.SingtonClass;
public class Human {
// 1. private 으로 변수 생성
private String name;
//싱글턴에 값 넘기기
public Human(String name) {
super();
this.name = name;
SingtonClass sc = SingtonClass.getInstance();
sc.name = this.name; //싱글턴 클래스 안에 있는 네임 변수 안에 휴먼 클래스 네임 변수 값 넘겨줌
}
// public String getName() {
// return name;
// }
public void setName(String name) {
this.name = name;
}
}
| class Animal |
package cls;
import single.SingtonClass;
public class Animal {
// 2. private 으로 변수 생성
private int number;
private String name;
public Animal(int number) {
super();
this.number = number;
}
public int getNumber() {
return number;
}
// public void setNumber(String name) {
// this.name = name;
// }
// 싱글턴으로 넘겨진 값 받기
public void info() {
SingtonClass sc = SingtonClass.getInstance();
this.name = sc.name;
System.out.println("name:" +name);
}
}
| SingtonClass |
package single;
public class SingtonClass {
//1. 싱글턴 클래스의 첫번째 형태
private static SingtonClass sc = null;
public String name;
// 싱글턴 클래스는 private 으로 생성자 생성 가능
private SingtonClass() {
}
public static SingtonClass getInstance () { //
if(sc == null) {
sc = new SingtonClass(); // 여기서 딱 한 번만 객체가 생성된다
}
return sc; //
}
}
| 출력결과 |
| name:성춘향 |
AddressBook_ 싱글턴 이용해서 생성하기
| class Main |
package com.mbc.addr.main;
import java.util.Scanner;
import com.mbc.addr.dao.AddressBookDao;
import com.mbc.addr.dao.AddressBookDaoImpl;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
AddressBookDao dao = new AddressBookDaoImpl();
while(true) {
// menu
System.out.println("<<< 주소록 >>>");
System.out.println("1.데이터 추가");
System.out.println("2.데이터 삭제");
System.out.println("3.데이터 이름 검색");
System.out.println("4.데이터 메모 검색");
System.out.println("5.데이터 수정");
System.out.println("6.모두 출력");
System.out.println("7.데이터 저장");
System.out.print("번호 입력 >> ");
int work = sc.nextInt();
switch(work) {
// 1.추가
case 1:
dao.insert();
break;
// 2.삭제
case 2:
dao.delete();
break;
// 3.검색 - 이름
case 3:
dao.selectName();
break;
// 4.검색 - 주소 or 메모
case 4:
dao.selectMemo();
break;
// 5.수정
case 5:
dao.update();
break;
// 6.모두출력
case 6:
dao.allprint();
break;
// 7.데이터 저장
case 7:
dao.fileSave();
break;
}
}
}
}
| class AddressBookDto |
package com.mbc.addr.dto;
public class AddressBookDto {
// column(항목)
private String name;
private int age;
private String phone;
private String address;
private String memo;
public AddressBookDto() {
}
public AddressBookDto(String name, int age, String phone, String address, String memo) {
super();
this.name = name;
this.age = age;
this.phone = phone;
this.address = address;
this.memo = memo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
@Override
public String toString() {
return name + "-" + age + "-" + phone + "-" + address + "-" + memo;
}
public void info() {
System.out.println( "이름:" + name + " "
+ "나이:" + age + " "
+ "전화번호:" + phone + " "
+ "주소:" + address + " "
+ "메모:" + memo);
}
}
| interface AddressBookDao |
package com.mbc.addr.dao;
public interface AddressBookDao {
void insert();
void delete();
void update();
void selectName();
void selectMemo();
int search(String name);
void allprint();
void fileSave();
//void fileLoad();
}
| class AddressBookDaoImpl implements AddressBookDao |
package com.mbc.addr.dao;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import com.mbc.addr.dto.AddressBookDto;
import com.mbc.addr.file.FileProc;
import com.mbc.addr.singleton.Singleton;
public class AddressBookDaoImpl implements AddressBookDao{
Scanner sc = new Scanner(System.in);
// private List<AddressBookDto> list = new ArrayList<AddressBookDto>();
// private List<AddressBookDto> list;
private FileProc fproc;
// CRUD
public AddressBookDaoImpl() {
fproc = new FileProc("addressBook");
fproc.load();
// fileLoad();
// list.add(new AddressBookDto("홍길동", 24, "123", "부평시", "대학친구"));
// list.add(new AddressBookDto("성춘향", 15, "234", "부천시", "후배"));
// list.add(new AddressBookDto("일지매", 22, "345", "서울시", "교회친구"));
// list.add(new AddressBookDto("홍길동", 26, "456", "부산시", "사촌형"));
}
@Override
public void insert() {
// TODO 추가
System.out.println("데이터 추가입니다");
AddressBookDto dto = new AddressBookDto();
System.out.print("이름 = ");
dto.setName(sc.next());
System.out.print("나이 = ");
dto.setAge(sc.nextInt());
System.out.print("전화번호 = ");
dto.setPhone(sc.next());
System.out.print("주소 = ");
dto.setAddress(sc.next());
System.out.print("메모 = ");
dto.setMemo(sc.next());
Singleton single = Singleton.getInstance();
boolean isS = single.list.add(dto);
if(!isS) {
System.out.println("추가되지 않았습니다");
}
System.out.println("정상적으로 추가되었습니다");
}
@Override
public void delete() {
// TODO 삭제
System.out.println("데이터 삭제입니다");
System.out.print("이름 = ");
String name = sc.next();
int index = search(name);
if(index == -1) {
System.out.println("데이터를 찾을 수 없습니다");
return;
}
Singleton single = Singleton.getInstance();
AddressBookDto deleteDto = single.list.remove(index);
deleteDto.info();
System.out.println("데이터를 삭제하였습니다");
}
@Override
public void update() {
// TODO 수정
System.out.println("데이터 수정입니다");
System.out.print("이름 = ");
String name = sc.next();
int index = search(name);
if(index == -1) {
System.out.println("데이터를 찾을 수 없습니다");
return;
}
System.out.print("수정할 주소 입력 = ");
String address = sc.next();
Singleton single = Singleton.getInstance();
AddressBookDto updateDto = single.list.get(index);
updateDto.setAddress(address);
System.out.println("수정되었습니다");
}
@Override
public void selectName() {
// TODO 이름 검색
System.out.println("이름 검색입니다");
System.out.print("이름 = ");
String name = sc.next();
List<AddressBookDto> findList = new ArrayList<AddressBookDto>();
Singleton single = Singleton.getInstance();
for (AddressBookDto addr : single.list) {
if(name.equals(addr.getName())) {
findList.add(addr);
}
}
if(findList.size() == 0) {
System.out.println("데이터를 찾을 수 없습니다");
return;
}
for (AddressBookDto addr : findList) {
addr.info();
}
}
@Override
public void selectMemo() {
// TODO 메모 검색
System.out.println("메모 검색입니다");
System.out.print("메모 = ");
String memo = sc.next();
List<AddressBookDto> findList = new ArrayList<AddressBookDto>();
Singleton single = Singleton.getInstance();
for (AddressBookDto addr : single.list) {
if(addr.getMemo().contains(memo)) {
findList.add(addr);
}
}
if(findList.size() == 0) {
System.out.println("데이터를 찾을 수 없습니다");
return;
}
for (AddressBookDto addr : findList) {
addr.info();
}
}
@Override
public int search(String name) {
// TODO 써치
int index = -1;
Singleton single = Singleton.getInstance();
for (int i = 0; i < single.list.size(); i++) {
AddressBookDto dto = single.list.get(i);
if(name.equals(dto.getName())) {
index = i;
break;
}
}
return index;
}
@Override
public void allprint() {
Singleton single = Singleton.getInstance();
for (AddressBookDto addr : single.list) {
addr.info();
}
}
@Override
public void fileSave() {
// 홍길동-24-1234-부평구-친구
/*
String arr[] = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
AddressBookDto dto = list.get(i);
arr[i] = dto.toString();
}
System.out.println(Arrays.toString(arr));
fproc.save(arr);*/
fproc.save();
}
/*
@Override
public void fileLoad() {
//list = new ArrayList<AddressBookDto>();
String arr[] = fproc.load();
// arr[0] -> 홍길동-24-123-부평시-고교친구
//String str[] = arr[0].split("-");
for (int i = 0; i < arr.length; i++) {
String str[] = arr[i].split("-");
AddressBookDto dto = new AddressBookDto(str[0], // 이름
Integer.parseInt(str[1]), // 나이
str[2], // 전화번호
str[3], // 주소
str[4]); // 메모
list.add(dto);
}
} */
}
| class Singleton |
package com.mbc.addr.singleton;
import java.util.ArrayList;
import java.util.List;
import com.mbc.addr.dto.AddressBookDto;
public class Singleton {
private static Singleton sc = null;
public List<AddressBookDto> list;
private Singleton() {
list = new ArrayList<AddressBookDto>();
}
public static Singleton getInstance() {
if(sc == null) {
sc = new Singleton();
}
return sc;
}
}
| class FileProc |
package com.mbc.addr.file;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import com.mbc.addr.dto.AddressBookDto;
import com.mbc.addr.singleton.Singleton;
public class FileProc {
private File file;
public FileProc(String filename) {
file = new File("C:/tmp/" + filename + ".txt");
try {
if(file.createNewFile()) {
System.out.println("파일 생성 성공");
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 데이터 저장
public void save() {
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
Singleton single = Singleton.getInstance();
// for (String str : arr) {
// pw.println(str);
// }
for(AddressBookDto dto : single.list) {
pw.println(dto.toString());
}
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 데이터 불러오기
public void load() {
//List<String> strlist = new ArrayList<String>();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
Singleton single = Singleton.getInstance();
String str = "";
while((str = br.readLine()) != null) {
String arr[] = str.split("-");
AddressBookDto dto = new AddressBookDto(arr[0],
Integer.parseInt(arr[1]),
arr[2],
arr[3],
arr[4]);
single.list.add(dto);
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// String array[] = new String[strlist.size()];
// for (int i = 0; i < strlist.size(); i++) {
// array[i] = strlist.get(i);
// }
//
// return array;
}
}
'Java > Java 수강일지' 카테고리의 다른 글
| [수강일지_21] 가계부 만들기 (0) | 2026.06.10 |
|---|---|
| [수강일지_19] (0) | 2026.06.05 |
| [수강일지_18] 실전! 주소록 프로그램 만들기 (0) | 2026.06.04 |
| [수강일지_17] Generic , list (0) | 2026.06.02 |
| [수강일지_16] 복습, 추상클래스 , interface , variavle, static, staticmethod, final (0) | 2026.06.01 |