주소록 프로그램 보완하기 1. 강사님 코딩

| 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;
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");
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());
boolean isS = 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;
}
AddressBookDto deleteDto = 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();
AddressBookDto updateDto = 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>();
for (AddressBookDto addr : 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>();
for (AddressBookDto addr : 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;
for (int i = 0; i < list.size(); i++) {
AddressBookDto dto = list.get(i);
if(name.equals(dto.getName())) {
index = i;
break;
}
}
return index;
}
@Override
public void allprint() {
for (AddressBookDto addr : 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);
}
@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 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;
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(String[] arr) {
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
for (String str : arr) {
pw.println(str);
}
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 데이터 불러오기
public String[] load() {
List<String> strlist = new ArrayList<String>();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String str = "";
while((str = br.readLine()) != null) {
strlist.add(str);
}
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;
}
}
약한 부분 : 개념과 사용 방법이 정확하게 인지 , 이해 되지 않은 상태
| file 생성, 쓰기, 읽기, 저장하기 , 파일 생성 성공 ! 파일 생성 실패 ! 알리는 부분 , 파일 로드도 ! file에 저장된 내용 토큰으로 잘라서 저장하기 , try catch ! BufferedWriter, BufferedReader, FileNotFoundException , IOException; readLine 쓰는 법 PrintWriter , file load , 온오프 스위치인 boolean Find = false; 사용해서 쓰는 법 |
잊어버렸던 부분 : 배웠으나 사용할 생각도, 방법도 떠올리지 못했던 부분
| continue , contains , switch 문에서 break 사용, File 내용 저장할 때 토큰으로 자르는 방법 , 스위치 문 사용시 switch(num) 이렇게 쓰는 법 , 숫자열을 문자열로 바꿔서 저장하는 법 = Integer.parseInt(array[1] ) 처럼 |

Git - Install for Windows
Click here to download the latest (2.54.0) x64 version of Git for Windows. This is the most recent maintained build. It was released on 2026-04-20. Other Git for Windows downloads Standalone Installer Git for Windows/x64 Setup. Git for Windows/ARM64 Setup.
git-scm.com








| Git hub 사이트 |
GitHub · Change is constant. GitHub keeps you ahead.
Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.
github.com



dodream082311-cyber/StudentProgram
설명 적는란 (건너뛰기 가능) . Contribute to dodream082311-cyber/StudentProgram development by creating an account on GitHub.
github.com




github에 프로젝트 올리기
https://soda-dev.tistory.com/12 GitHub에 새 저장소를 생성한다. 오른쪽 상단에서 클릭 저장소 이름을 ...
blog.naver.com
이렇게 올라간 작업물은 master 이라고 한다 = 대포 버전
| git hub 업로드 |
Ctrl+v로 붙여넣기 안됨 => Shift + Ins 사용하기
//초기 설정
git config --global user.name "유저이름"
git config --global user.email "유저 이메일 주소 "
git config --list // -> 잘 올라갔는 확인. 안해도 됨
//파일 준비
git init // .git 파일 생성 <- 맨 처음 올릴 때는 반드시 해준다
git add . //선택한 프로젝트 폴더 내의 모든 파일 관리
-> 특정파일만 하고 싶다면 git add 파일이름.파일형식 ex) git add a.txt
git status
git comit -m "프로젝트 이름" //커밋
//파일 업로드
git remote add origin [깃허브 저장소 주소]
git remote -v // 확인
git push -u origin mater //업로드 진행
/*
commit "nothing to commit , working tree clea " 같은 에서 에러 발생 시
해결방법
1. rm _> -r .gift : 실행하고 처음부터 다시 기입
2. git init
3. git comit -m "commit message"
4. git remote add origin 레포리지토리 주소
5. git push -f origin master
*/
| git hub - branch |
git brandh (브런치이름) //testbranch : branch 이름 , 변경 가능 요소
git branch //브런치 생성 확인
git checkout (브런치이름)
git branch
git commit -a -m "(원하는문구)"
git status
pit push origin testbranch //깃허브 새로고침 시 변경된 내용branch 확인 가능
//병합진행
git chekout master
git merge (브런치이름)
git push origin master
| Tip. 프로젝트 팀 작업 때는 소스트립 사용하기 |
Sourcetreeapp
Bitbucket is more than just Git code management. Bitbucket gives teams one place to plan projects, collaborate on code, test and deploy.
www.sourcetreeapp.com
'Java > Java 수강일지' 카테고리의 다른 글
| [수강일지_21] 가계부 만들기 (0) | 2026.06.10 |
|---|---|
| [수강일지_20] (0) | 2026.06.08 |
| [수강일지_18] 실전! 주소록 프로그램 만들기 (0) | 2026.06.04 |
| [수강일지_17] Generic , list (0) | 2026.06.02 |
| [수강일지_16] 복습, 추상클래스 , interface , variavle, static, staticmethod, final (0) | 2026.06.01 |