Java/Java 수강일지

[수강일지_19]

jamk-diary 2026. 6. 5. 20:01

 

주소록 프로그램 보완하기  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

click here to download 눌러서 설치 진행
프로그램 설치시 확인, 체크해야 될 목록

 

git hub 사용하여 버전 체크하기

 

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

Description , private 설정 , 저장소 생성

 

https://github.com/dodream082311-cyber/StudentProgram.git 생성된 저장소 주소 확인 가능

 

 

 

dodream082311-cyber/StudentProgram

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

github.com

 

컴퓨터 < c드라이브 < java.2 < 추가옵션 < git bash 선택
초기설정 : git config -- global user.name "사용자이름" 적기
git config --global user.email "dodream082311@gmail.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