Java /day12 / 23.09.07(목) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 9월 7일
post-thumbnail

ch02_String


ExString

package ch02_String;

public class ExString {
	public static void main(String[] args) {
		String stnA = "Java";
		String stnB = new String("Java");
		String stnC = "java";

		// String 클래스에서는 Override가 되어있기 때문에
		// 변수명만 출력하면 변수에 담겨있는 문자열이 출력되도록 재정의
		System.out.println(stnA);
		System.out.println(stnB);
		System.out.println(stnC);

		System.out.println();
		// 문자열이 hashCode로 변환되어 있기 때문에 같은 문자열이면 같은 int 값 나옴
		System.out.println(stnA.hashCode());
		System.out.println(stnB.hashCode());
		System.out.println(stnC.hashCode());

		System.out.println();

		// equals() : 같은 문자열인지 확인
		// String 에서 Override가 되어 문자열이 같은지 비교함
		System.out.println(stnA.equals(stnB));
		System.out.println(stnA.equals(stnC));

		System.out.println();

		String title = "자바 program";
		System.out.println("title : " + title);
		System.out.println("title 문자수 : " + title.length());

		System.out.println();

		// 특정 문자열이 청므으로 나타는 위치
		int title_pos = title.indexOf("p");
		System.out.println("p 위치 : " + title_pos);

		// 특정 문자열이 마지막으로 나타나는 위치
		int title_lastPos = title.lastIndexOf("r");
		System.out.println("r 마지막 위치 : " + title_lastPos);

		System.out.println();

		// 특정 문자열 변경
		String new_title = title.replace("자바", "Java");
		System.out.println("new_title : " + new_title);

		System.out.println();

		String phone = "010-1234-5678";
		System.out.println("phone : " + phone);

		// 문자열 자르기
		// (시작위치, 마지막 위치)

		String pa = phone.substring(4, 8); // 시작 index ~ (마지막 index -1)
		String pb = phone.substring(9); // 시작 index ~ 끝까지
		System.out.println("앞 4자리 : " + pa);
		System.out.println("뒤 4자리 : " + pb);

		System.out.println();

		String email = "test@abc.com";
		System.out.println("E-mail : " + email);

		// @ 위치
		int at = email.indexOf("@");
		System.out.println("@ 위치 : " + at);

		// ID
		String id = email.substring(0, at);
		System.out.println("ID : " + id);

		// Domain
		String domain = email.substring(at + 1);
		System.out.println("Domain : " + domain);

		System.out.println();

		// 문자열 내 특정 문자열을 기준으로 잘라서 배열에 넣기
		String[] ar = phone.split("-");
		for (int i = 0; i < ar.length; i++) {
			System.out.println(ar[i]);
		}
	}
}

QuizString

#1

주민번호를 사용해서 문제를 해결하세요

  • 주민번호에서 생년월일을 추출하세요
  • 뒤에 7 자리중 첫번째 자리를 사용해서 남성, 여성을 확인하세요
    1 - 1900 년대 남자 2 - 1900 년대 여자
    3 - 2000 년대 남자 4 - 2000 년대 여자
package ch02_String;

public class QuizString {
	public static void main(String[] args) {

		String num = "123456-3234567";
		System.out.println("생년월일 : " + num.substring(0, 6));
		System.out.println("생년 : " + num.substring(0, 2) + " 년");
		System.out.println("생월 : " + num.substring(2, 4) + " 월");
		System.out.println("생일 : " + num.substring(4, 6) + " 일");
		String sg = "";
		if (num.charAt(7) - '0' == 1) {
			sg = "1900 년대 남자 i";
		} else if (num.charAt(7) - '0' == 2) {
			sg = "1900 년대 여자 i";
		} else if (num.charAt(7) - '0' == 3) {
			sg = "2000 년대 남자 i";
		} else if (num.charAt(7) - '0' == 4) {
			sg = "2000 년대 여자 i";
		}
		System.out.println("if 문 " + sg);

		int select = num.charAt(7) - '0';
		switch (select) {
		case 1:
			sg = "1900 년대 남자 s";
			break;
		case 2:
			sg = "1900 년대 여자 s";
			break;
		case 3:
			sg = "2000 년대 남자 s";
			break;
		case 4:
			sg = "2000 년대 여자 s";
			break;
		default:
			System.out.println("주민번호 이상함");
		}
		System.out.println("switch 문 " + sg);

#2

아래의 파일 경로에서 데이터를 추출하세요

  • 파일 경로 : "D:/photo/2023/travel/food.jpg"
    파일 이름 : food
    확장자 : jpg
		String adr = "D:/photo/2023/travel/food.jpg";
		int idxS = adr.lastIndexOf("/");
		int idxD = adr.indexOf(".");
		String fileName = adr.substring(idxS + 1, idxD);
		System.out.println("파일 이름 : " + fileName);
		String extension = adr.substring(idxD + 1);
		System.out.println("확장자 명 : " + extension);

	}
}

생년월일 : 123456
생년 : 12 년
생월 : 34 월
생일 : 56 일
if 문 2000 년대 남자 i
switch 문 2000 년대 남자 s

파일 이름 : food
확장자 명 : jpg


QuizStringT

package ch02_String;

public class QuizStringT {
	public static void main(String[] args) {
		// #1
		String passport = "990101-1123456";
		String year = passport.substring(0, 2);
		String month = passport.substring(2, 4);
		String day = passport.substring(4, 6);
		String type = passport.substring(7, 8);
		if (type.equals("1")) {
			year = "19" + year;
			type = "남성";
		} else if (type.equals("2")) {
			year = "19" + year;
			type = "여성";
		} else if (type.equals("3")) {
			year = "20" + year;
			type = "남성";
		} else {
			year = "20" + year;
			type = "여성";
		}
		System.out.println(year + "년 " + month + "월 " + day + "일");
		System.out.println("성별 : " + type);

		System.out.println();
		// #2
		String filePath = "D:/photo/2023/travel/food.jpg";
		int slash = filePath.lastIndexOf("/");
		int dot = filePath.lastIndexOf(".");

		String fileName = filePath.substring(slash + 1, dot);
		String fileExt = filePath.substring(dot + 1);
		String path = filePath.substring(0, slash + 1);

		System.out.println("파일 경로 : " + path);
		System.out.println("파일 이름 : " + fileName);
		System.out.println("확장자 : " + fileExt);
	}
}

1999년 01월 01일
성별 : 남성

파일 경로 : D:/photo/2023/travel/
파일 이름 : food
확장자 : jpg


ch03_format


ExdDecimalFormat

DecimalFormat

  • 숫자를 원하는 형태의 문자열로 변환할 때 사용

    0 : 빈자리 0 으로 채움
    # : 빈자리 0 으로 채우지 않음

package ch03_format;

import java.text.DecimalFormat;

public class ExdDecimalFormat {
	public static void main(String[] args) {
		double data = 123456.789;
		System.out.println("data : " + data);
		System.out.println();
		
		DecimalFormat df = null; // import 해야 함
		// 소숫점 자릿수를 없에는 문자열 형태로 만듬
		df = new DecimalFormat("0");
		String sa = df.format(data);
		System.out.println(sa);
		
		System.out.println();
		
		// 소숫점 두 자릿수까지 표현 
		df = new DecimalFormat("0.00");
		String sb = df.format(data);
		System.out.println(sb);
		
		System.out.println();
		// 천의 단위마다 쉼표 표시(화폐단위)
		df = new DecimalFormat("000,000.0");
		String sc = df.format(data);
		System.out.println(sc);
		
		System.out.println();
		
		double data2 = 123456.700;
		
		// 0 빈자리 채우기
		df = new DecimalFormat("000,000.000");
		String sd = df.format(data2);
		System.out.println(sd);
		
		System.out.println();
		
		// # 빈자리 채우지 않음
		df = new DecimalFormat("###,###.##");
		String se = df.format(data2);
		System.out.println(se);
	}
}

data : 123456.789

123457

123456.79

123,456.8

123,456.700

123,456.7


ch04_date


Exdate

Date

  • 날짜를 표현할 때 사용

SimpleDateFormat

  • 날짜를 원하는 형태의 문자열로 변환하는 class
---시간관련
y 년도H 0 ~ 23 시
M 월h 1 ~ 12 시
d 일m 분
D 1 ~ 365일s 초
E 요일
a 오전 / 오후
package ch04_date;

import java.util.Date; // util, sql 중 util import 해야 함
import java.text.SimpleDateFormat;

public class Exdate {
	public static void main(String[] args) {
		Date date = new Date();
		System.out.println(date);
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
		String currentTime = sdf.format(date);
		System.out.println(currentTime);
	}
}

ExCalendar

package ch04_date;

import java.util.Calendar;

public class ExCalendar {
	public static void main(String[] args) {
		Calendar now = Calendar.getInstance();
		System.out.println(now);
		
		System.out.println();
		
		int year = now.get(Calendar.YEAR);
		// 월은 + 1 해야 함
		int month = now.get(Calendar.MONTH)+1;
		int day = now.get(Calendar.DAY_OF_MONTH);
//		System.out.println(month);
		int hour = now.get(Calendar.HOUR);
		int min = now.get(Calendar.MINUTE);
		int sec = now.get(Calendar.SECOND);
		
		System.out.println(year +"년 "+ month +"월 "+ day + "일");
		System.out.println(hour +"시 "+ min +"분 "+ sec + "초");
		
	}
}

java.util.GregorianCalendar ......

2023년 9월 7일
10시 44분 12초


ch05_wrapper


Ex01Wrapper

Wrapper class

  • 기본자료형을 포장해서 객체화 시키는 클래스
기본타입Wrapper
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
  • 기본자료형의 데이터를 객체화 시켜주는 것
  • class 가 따로 있는게 아니라 자료형 타입마다 개별적으로 각각 존재

boxing unboxing을 사용하는 이유

  • 어떠한 메소드들은 무조건 객체만을 다루는 타입이 있음
  • 기본자료형을 다루지 못하는 메소드가 있기 때문
  • 이럴 때 숫자형 데이터를 넘기고 싶을 때 객체화하여 사용
package ch05_wrapper;

public class Ex01Wrapper {
	public static void main(String[] args) {
		// boxing
		// - 기본타입의 값을 포장해서 객체화하는 과정
		// Wrapper class 의 인자값으로 기본타입의 값 또는 문자열을 사용
		Integer wia = new Integer(1000);
		Integer wib = new Integer("2000");
		// auto boxing
		Integer wic = 3000;

		Double wda = new Double(2.3);
		Double wdb = new Double("2.3");

		// ------------------------------------------

		// unboxing
		// - 포장된 객체를 기본타입으로 변환하는 과정
		// - '기본타입+Value()' 메서드로 unboxing
		int ia = wia.intValue();
		double da = wda.doubleValue();
		System.out.println("ia : " + ia + " - da : " + da);

		// auto unboxing
		int ib = wib;
		int sum = wic + 2000;
		System.out.println("ib : " + ib + " - sum : " + sum);
	}
}

ia : 1000 - da : 2.3
ib : 2000 - sum : 5000


Ex02Parse

파싱 ( parsing )

  • 문자열을 분석해서 해당 형태의 기본자료형으로 변환
    -> parse+기본자료형() / Ex) parseInt()

  • 문자열인데 기본자료형인 놈들을 실제 기본자료형 값으로 바꾸는 것

package ch05_wrapper;

class Data{
	private String value;
	
	public Data(String value) {
		this.value = value;
	}
	
	public String gerValue() {return value;}
}

public class Ex02Parse {
	public static void main(String[] args) {
		String stnA = "100";
		// 문자열이기 때문에 숫자를 + 하면 이어져셔 출력
		System.out.println(stnA + 1);
		
		System.out.println();
		
		// parseInt를 사용하여 문자열을 int 값으로 변환하면 int타입이 되기 때문에
		// + 를 했을 때 연산이 됨
		int ia = Integer.parseInt(stnA);
		System.out.println("ia : " + ia);
		System.out.println(ia + 1);
		
		System.out.println();
		
		String stnB = "2.3";
		double da = Double.parseDouble(stnB);
		System.out.println("da : " + da);
		System.out.println(da + 3.3);
		
		System.out.println();
		
		Data dataA = new Data("123");
		String sa = dataA.gerValue();
		int a = Integer.parseInt(sa);
		System.out.println(a+1);
		
		Data dataB = new Data("3.4");
		Double b = Double.parseDouble(dataB.gerValue());
		System.out.println(b + 2.1);
	}
}

1001

ia : 100
101

da : 2.3
5.6

124
5.5


Ex03Compare

Wrapper class 데이터 비교

  • Wrapper class 로 포장된 객체의 데이터 비교시 '==', '!=' 연산자 불가
    -> unboxing 해서 확인 or equals()를 사용해야 함
  • 아래의 다섯가지 형태는 바로 비교 가능
    -> boolean, char, byte, short, int(-128 ~ 127)
package ch05_wrapper;

public class Ex03Compare {
	public static void main(String[] args) {
		Integer oa = 1000;
		Integer ob = 1000;
		// false 이유 비교연산자 안되는 이유 127을 초과했기 때문
		System.out.println(oa == ob);
		// equals()를 사용
		System.out.println(oa.equals(ob));
		// unboxing 사용
		System.out.println(oa.intValue() == ob.intValue());
	}
}

false
true
true


P12_generic


ch01_generic


Basic

package ch01_generic;

public class Basic {
	private Object obj;

	public Object getObj() {
		return obj;
	}

	public void setObj(Object obj) {
		this.obj = obj;
	}
}

Fruits

package ch01_generic;

public class Fruits {
	private String name;	// 과일 이름
	private int ea; 		// 수량

	public Fruits(String name, int ea) {
		this.name = name;
		this.ea = ea;
	}

	@Override
	public String toString() {
		return "품명 : " + name + " - 수량 : " + ea;
	}
}

ExGeneric

generic

  • 모든 종류의 데이터 타입을 다룰 수 있도록
    일반화된 타입 매개변수로 class를 정의 하는 방법
  • 클래스 일반화 : 선언시에 클래스이름 뒤 '<>' 기호를 붙여서 괄호 안에
    타입 parameter 이름을 정의
package ch01_generic;

public class ExGeneric<T> {
	private T data;

	public T getData() {
		return data;
	}

	public void setData(T data) {
		this.data = data;
	}
}

GenericTest

package ch01_generic;

public class GenericTest {
	public static void main(String[] args) {
		Basic basicA = new Basic();
		// String 형태를 Object 형태로 업캐스팅 하여 넘기기
		basicA.setObj(new String("basicA"));
		// 업캐스팅된 Object형태의 문자열을 다시 다운 캐스팅하여 stnA에 받기
		String stnA = (String) basicA.getObj();
		System.out.println(stnA);

		System.out.println();

		Basic basicB = new Basic();
		basicB.setObj(new Fruits("충주 사과", 10));
		Fruits fra = (Fruits) basicB.getObj();

		// toString() 를 override 했기 때문에 객체값 출력 시 아래와 같이 나옴
		System.out.println("fra : " + fra);

		System.out.println();

		ExGeneric<String> egA = new ExGeneric<String>();
		egA.setData("안녕 나는 generic이야");
		String stnB = egA.getData();
		System.out.println("stnB : " + stnB);

		System.out.println();

		// 생성시 뒤에는 <> 안에 작성하지 않아도 됨
		// 이유 : 이미 앞에서 지정 했음
		ExGeneric<Fruits> egB = new ExGeneric<>();
		egB.setData(new Fruits("Bananaanan", 5));
		Fruits frb = egB.getData();
		// toString override
		System.out.println("frb : " + frb);

		System.out.println();

		// generic '<>' 에 지정되는 애는 기본자료형을 쓸 수 없고 클래스임
		// int -> Integer
		ExGeneric<Integer> egC = new ExGeneric<>();
		// auto boxing 이 되기 때문에 바로 숫자를 넘겨도 됨
		egC.setData(1000);
		// auto unboxing
		int ia = egC.getData();

		System.out.println("ia : " + ia);

		System.out.println();

		ExGeneric<String> egD = new ExGeneric<>();

		egD.setData("123");
		int ib = Integer.parseInt(egD.getData());
		System.out.println("ib : " + ib);

	}
}

basicA

fra : 품명 : 충주 사과 - 수량 : 10

stnB : 안녕 나는 generic이야

frb : 품명 : Bananaanan - 수량 : 5

ia : 1000

ib : 123


ch02_generic


Computer

package ch02_generic;

public class Computer {
	private String name;

	public Computer(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "종류 : " + name;
	}
	
}

Product

package ch02_generic;
// 아래와 같이 1개가 아니라 2개 이상도 가능
public class Product<K, M> {

	private K kind;
	private M model;
	
	public Product() {}
	
	public Product(K kind, M model) {
		this.kind = kind;
		this.model = model;
	}
	
	public K getKind(){ return kind; }
	public void setKind(K kind) { this.kind = kind; }

	public M getModel()	{ return model; }
	public void setModel(M model) { this.model = model; }
	
	public String toString() {
		return kind + " - " + model;
	}
}

ProductTest


package ch02_generic;

public class ProductTest {

	public static void main(String[] args) {

		Product<String, String> proA = new Product<>();
		proA.setKind("음료");
		proA.setModel("코카콜라");
		System.out.println(proA);

		System.out.println();

		Product<Computer, String> proB = new Product<>(new Computer("노트북"), "LG gram");
		System.out.println(proB);

	}

}

음료 - 코카콜라

종류 : 노트북 - LG gram


ch03_quiz


Product

Product class 를 정의하세요

  • 제품이름, 가격의 관리가 가능합니다
package ch03_quiz;

public class Product<N, P> {
	private N name;
	private P price;
	
	public Product() {
	}
	public Product(N name, P price) {
		this.name = name;
		this.price = price;
	}
	public N getName() {
		return name;
	}
	public void setName(N name) {
		this.name = name;
	}
	public P getPrice() {
		return price;
	}
	public void setPrice(P price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "제품명 : " + name + " - 가격 : " + price + " 원";
	}
}

Foo

Foo class 를 정의하세요

  • 제너릭 타입 하나를 가지는 class 입니다
package ch03_quiz;
public class Foo<T> {
	private T value;

	public Foo(T value) {
		this.value = value;
	}

	public T getName() {
		return value;
	}

	public void setName(T value) {
		this.value = value;
	}
	@Override
	public String toString() {
		return "난 foo야 내 정보 " + value;
	}

}

QuizTest

Foo class 에 Product class 적용한 객체를 생성

package ch03_quiz;

public class QuizTest {
	public static void main(String[] args) {
		Product<Foo, Integer> pf1 = new Product<>(new Foo("홍길동"),123123123);
		System.out.println(pf1);

		Product<Foo, Integer> pf2 = new Product<>();
		pf2.setName(new Foo("김덕배"));
		pf2.setPrice(3000);
		System.out.println(pf2);
		
		Foo<Product> pf3 = new Foo<>(new Product<>("이름", 1234));
		System.out.println(pf3);
	}
}

제품명 : 난 foo야 내 정보 홍길동 - 가격 : 123123123 원
제품명 : 난 foo야 내 정보 김덕배 - 가격 : 3000 원
난 foo야 내 정보 제품명 : 이름 - 가격 : 1234 원


ch03_quizT


Product

package ch03_quizT;

public class Product {
	private String name;
	private int price;

	public Product() {
		super();
	}

	public Product(String name, int price) {
		super();
		this.name = name;
		this.price = price;
	}

	@Override
	public String toString() {
		return "제품명 : " + name + " - " + price + " 원";
	}

}

Foo

package ch03_quizT;

public class Foo<T> {
	private T value;

	public Foo() {
	}

	public Foo(T value) {
		this.value = value;
	}

	public T getValue() {
		return value;
	}

	public void setValue(T value) {
		this.value = value;
	}


	
	
}

QuizTest

package ch03_quizT;

public class QuizTest {
	public static void main(String[] args) {
		
		Foo<Product> fooA = new Foo<Product>(new Product("우유", 1500));
		System.out.println(fooA.getValue());
	}
}

제품명 : 우유 - 1500 원


P13_collection


< Collection.txt >

collection

  • Java 에서 객체들을 효율적으로 관리(추가, 삭제 ... ) 할 수 있게 제공하는 자료구조
  • java.util package에서 컬렉션과 관련된 interface, class 가 있음
  • collection은 generic 기법을 사용해서 구현되어 있음
  • collection은 요소에 기본자료형을 사용 불가
  • -> 객체만 사용 가능

collection 종류 ( List, Set, Map )

  • 데이터의 집합
  1. List // ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ
  • 순서 보장 O
  • 중복 O
  1. Set // 바구니에 때려 넣는 식
  • 순서 보장 X
  • 중복 X
  1. Map // key1-value1 / key1-value2 / key2-value1 ...
  • key-value 의 쌍
  • key : 중복 X
  • value : 중복 O

ch01_list


ExArrayList

ArrayList

  • 객체를 index 로 관리
  • 저장용량이 초과되면 자동으로 늘어남 / 배열과의 차이점

Iterator ( 반복자 )

  • collection 에 보관하고 있는 데이터에 순차적으로 접근할 때 사용
    hasNext() : 데이터 유무 확인
    next() : 데이터 가져오기
    remove() : 데이터 삭제
package ch01_list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ExArrayList {
	public static void main(String[] args) {
		ArrayList<String> exA = new ArrayList<>();
		List<String> exB = new ArrayList<>();

		// add() : 데이터 추가
		exA.add("문자열 1");
		exA.add("문자열 2");
		exA.add("문자열 3");
		System.out.println(exA);

		System.out.println();
		// add(index, value) : index 위치에 추가
		// 특정 위치에 추가하고 기존 데이터는 뒤로 밀려남
		exA.add(2, "문자열 4");
		System.out.println(exA);

		System.out.println();
		// size() : List의 요소의 수
		System.out.println("데이터 수 : " + exA.size());

		System.out.println();
		// contains() ( Object ) : 데이터 포함여부 확인
		System.out.println("문자열 3 확인 : " + exA.contains("문자열 3"));
		System.out.println("문자열 5 확인 : " + exA.contains("문자열 5"));

		System.out.println();
		// remove( Object or index ) : 데이터 삭제
		// Object 로 삭제
		System.out.println("문자열 1 삭제 : " + exA.remove("문자열 1"));
		System.out.println(exA);
		// index 로 삭제
		System.out.println("1 번 index 데이터 삭제 : " + exA.remove(1));
		System.out.println(exA);

		System.out.println();
		// set( index, value ) : 데이터 수정
		System.out.println("0 번 index 수정 : " + exA.set(0, "문자열 수정"));
		System.out.println(exA);

		System.out.println();
		// get( index ) : 데이터 확인
		System.out.println("1 번 index : " + exA.get(1));

		System.out.println();
		// 각 객체 확인
		for (int i = 0; i < exA.size(); i++) {
			System.out.println(i + "번 : " + exA.get(i));
		}

		System.out.println();
		// foreach : 향상된 for 문
		// - for ( 변수명 : collection )
		for (String data : exA) {
			System.out.println(data);
		}

		System.out.println();
		// Iterator
		Iterator<String> it = exA.iterator(); // 마찬가지로 import 해야 함
		while (it.hasNext()) { // 데이터 유무 확인
			String value = it.next();
			System.out.println(value);
		}
	}
}

[문자열 1, 문자열 2, 문자열 3]

[문자열 1, 문자열 2, 문자열 4, 문자열 3]

데이터 수 : 4

문자열 3 확인 : true
문자열 5 확인 : false

문자열 1 삭제 : true
[문자열 2, 문자열 4, 문자열 3]
1 번 index 데이터 삭제 : 문자열 4
[문자열 2, 문자열 3]

0 번 index 수정 : 문자열 2
[문자열 수정, 문자열 3]

1 번 index : 문자열 3

0번 : 문자열 수정
1번 : 문자열 3

문자열 수정
문자열 3

문자열 수정
문자열 3


Member

package ch01_list;

public class Member {
	private String name;
	private int age;

	public Member(String name, int age) {
		this.name = name;
		this.age = age;
	}
	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;
	}
	
	@Override
	public String toString() {
		return "이름 : " + name + " - 나이 : " + age;
	}
	
}

MemberManager

package ch01_list;

import java.util.ArrayList;
import java.util.Scanner;

public class MemberManager {
	private Scanner sc = new Scanner(System.in);
	private ArrayList<Member> list;

	public MemberManager() {
		list = new ArrayList<>();
	}

	public int inputInteger(String message) {
		System.out.print(message);
		int value = sc.nextInt();
		return value;
	}

	// 프로그램 종료
	public void end() {
		System.out.println("- Program end -");
		System.exit(0); // 현 위치에서 프로그램 강제 종료
	}

	// 1. 추가 메소드
	public void insert() {
		System.out.println("--- 회 원   추 가 ---");
		System.out.print("이름 입력 > ");
		String name = sc.next();
		System.out.print("나이 입력 > ");
		int age = sc.nextInt();
		list.add(new Member(name, age));
	}

	// 2. 삭제 메소드
	public void delete() {
		System.out.println("--- 회 원   삭 제 ---");
		System.out.print("삭제 이름 입력 > ");
		String dname = sc.next();
		Member man = findName(dname);
		if (man == null) {
			System.out.println("검색 실패~ ㅋ");
			return;
		}
		list.remove(man);
		System.out.println(dname + " 삭제");
	}

	// ## 회원 이름 검색
	public Member findName(String search) {
		for (Member man : list) {
			if (man.getName().equals(search)) {
				return man;
			}
		}
		return null;
	}

	// 3. 회원 목록 메소드
	public void view() {
		System.out.println("--- 회 원   목 록 ---");
		for (Member man : list) {
			System.out.println(man);
		}
		System.out.println("회원수 : " + list.size());
	}

	// 4. 회원정보 수정 메소드
	public void modify() {
		System.out.println("--- 회원정보 수정 ---");
		System.out.print("수정할 회원 이름 검색 > ");
		String sname = sc.next();
		Member man = findName(sname);
		if (man == null) {
			System.out.println("검색 실패~ ㅋ");
			return;
		}
		System.out.println("찾았습니다!\n" + "1. 이름 수정  2. 나이 수정");
		int select = sc.nextInt();
		switch (select) {
		case 1:
			cname(man);
			break;
		case 2:
			cage(man);
			break;
		default:
			System.out.println("입력 오류");
		}
	}

	// 4-1 이름 수정
	public void cname(Member man) {
		System.out.println("- 회원 이름 수정 -");
		System.out.println("수정할 이름 입력 : ");
		String name = sc.next();
		man.setName(name);
		System.out.println("이름 수정 완료!");
	}

	// 4-2 나이 수정
	public void cage(Member man) {
		System.out.println("- 회원 나이 수정 -");
		System.out.println("수정할 나이 입력 : ");
		int age = sc.nextInt();
		man.setAge(age);
		System.out.println("나이 수정 완료!");
	}

	// 5 회원 확인 메소드
	public void confirm() {
		System.out.println("--- 회원정보 확인 ---");
		System.out.print("회원 이름 검색 > ");
		String sname = sc.next();
		Member man = findName(sname);
		if (man == null) {
			System.out.println("없음~ ㅋ");
			return;
		}
		System.out.println("찾았습니다!");
		System.out.println(man);
	}
	
	
	// 회원 관리 메뉴 method
	public void menu() {
		while (true) {
			int select = inputInteger("1. 추가  2. 삭제  3. 목록  4. 수정  5. 확인  0. 종료 >> ");
			switch (select) {
			case 1: // 추가
				insert();
				break;
			case 2: // 삭제
				delete();
				break;
			case 3: // 목록
				view();
				break;
			case 4: // 수정
				modify();
				break;
			case 5: // 확인
				confirm();
				break;
			case 0: // 종료
				end();
				break;
			default:
				System.out.println("선택 오류~ ㅋ");
			}
			System.out.println();
		}

	} // menu()

}

MemberManagerT

package ch01_list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

public class MemberManagerT {

	private Scanner scanner = new Scanner(System.in);
	private ArrayList<Member> list;
	
	public MemberManagerT() {
		list = new ArrayList<>();
	}
	
	public int inputInteger(String message) {
		System.out.print(message);
		int value = scanner.nextInt();
		return value;
	}
	
	// 회원 관리 메뉴
	public void menu() {
		
		while(true) {
			int select = inputInteger("1.추가  2.삭제  3.목록  4.수정  5.확인 >> ");
			
			switch(select) {
			case 1: // 추가
				insert();  break;
			case 2: // 삭제
				delete();  break;
			case 3: // 목록
				view();  break;
			case 4: // 수정
				modify();  break;
			case 5: // 확인
				confirm();  break;
			case 0: // 종료
				end();
			default: 
				System.out.println("선택 오류~");
			}
			System.out.println();
		}
		
	} // menu()
	
	// 회원 추가
	public void insert() {
		System.out.println("--- 회 원   추 가 ---");
		System.out.print("이름 입력 > ");
		String name = scanner.next();
		System.out.print("나이 입력 > ");
		int age = scanner.nextInt();
		list.add(new Member(name, age));
	}// insert()
	
	// 회원 삭제 : 이름으로 삭제
	public void delete() {
		System.out.println("--- 회 원   삭 제 ---");
		System.out.print("삭제 이름 입력 > ");
		String dname = scanner.next();
		Member man = findName(dname);
		if(man == null) {
			System.out.println("검색 실패~");
			return;
		}
		list.remove(man);
		System.out.println(dname + " 삭제");
	} // delete()
	
	// 회원 이름 검색
	public Member findName(String search) {
		for(Member man : list) {
			if(man.getName().equals(search))
				return man;
		}
		return null;
	} // fineName()
	
	// 회원 목록
	public void view() {
		System.out.println("--- 회 원   목 록 ---");
		for(Member man : list) {
			System.out.println(man);
		}
		System.out.println("회원수 : " + list.size());
	} // view()
	
	// 회원 정보 수정
	public void modify() {
		System.out.println("--- 회원정보 수정 ---");
		System.out.print("이름 입력 > ");
		String name = scanner.next();
		Iterator<Member> it = list.iterator();
		int index = 0;
		while(it.hasNext()) {
			Member data = it.next();
			if(data.getName().equals(name)) {
				System.out.print("나이 입력 > ");
				int age = scanner.nextInt();
				list.set(index, new Member(name, age));
				return; // method 탈출
			}
			++index;
		}
		System.out.println("수정 실패~");
	} // modify()
	
	// 회원 정보 확인
	public void confirm() {
		System.out.println("--- 회원정보 확인 ---");
		System.out.print("검색 이름 입력 > ");
		String name = scanner.next();
		Member man = findName(name);
		if(man != null)
			System.out.println(man);
		else
			System.out.println("없는 회원입니다~");
	} // confirm()
	
	// 프로그램 종료
	public void end() {
		System.out.println("- Program end -");
		System.exit(0); // 현 위치에서 프로그램 강제 종료
	}
	
}

MemberMain

package ch01_list;

public class MemberMain {
	public static void main(String[] args) {
		MemberManager manageMe = new MemberManager();
		manageMe.menu();
		MemberManagerT manageT = new MemberManagerT();
		manageT.menu();
	}
}

MemberManager 수정 메소드 차이점


내코드

// 4. 회원정보 수정 메소드
	public void modify() {
		System.out.println("--- 회원정보 수정 ---");
		System.out.print("수정할 회원 이름 검색 > ");
		String sname = sc.next();
		Member man = findName(sname);
		if (man == null) {
			System.out.println("검색 실패~ ㅋ");
			return;
		}
		System.out.println("찾았습니다!\n" + "1. 이름 수정  2. 나이 수정");
		int select = sc.nextInt();
		switch (select) {
		case 1:
			cname(man);
			break;
		case 2:
			cage(man);
			break;
		default:
			System.out.println("입력 오류");
		}
	}

	// 4-1 이름 수정
	public void cname(Member man) {
		System.out.println("- 회원 이름 수정 -");
		System.out.println("수정할 이름 입력 : ");
		String name = sc.next();
		man.setName(name);
		System.out.println("이름 수정 완료!");
	}

	// 4-2 나이 수정
	public void cage(Member man) {
		System.out.println("- 회원 나이 수정 -");
		System.out.println("수정할 나이 입력 : ");
		int age = sc.nextInt();
		man.setAge(age);
		System.out.println("나이 수정 완료!");
	}

강사님 코드

// 회원 정보 수정
	public void modify() {
		System.out.println("--- 회원정보 수정 ---");
		System.out.print("이름 입력 > ");
		String name = scanner.next();
		Iterator<Member> it = list.iterator();
		int index = 0;
		while(it.hasNext()) {
			Member data = it.next();
			if(data.getName().equals(name)) {
				System.out.print("나이 입력 > ");
				int age = scanner.nextInt();
				list.set(index, new Member(name, age));
				return; // method 탈출
			}
			++index;
		}
		System.out.println("수정 실패~");
	} // modify()

내 코드에서는 method를 만들어 switch 문 사용(1, 2)
-> 수정 항목 선택 > 수선택 항목 수정
문제점? Iterator를 사용하지 않음

강사님 코드 Iterator를 이용하여 나이 수정

profile
Fintech

0개의 댓글