Java /day09 / 23.09.04(월) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

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

P08_class


ch03_getter_setter


ExgGetterSetter

getter 메서드

  • class 외부에서 생성된 객체의 멤버필드를 사용하는 용도의 메서드

setter 메서드

  • class 외부에서 생성된 객체의 멤버필드를 설정 or 수정하는 용도의 메서드
package ch03_getter_setter;
class Member{
	private String id;
	private String name;
	private int age;
	
	public String getId(){
		return id;
	}
	public void setId(String _id) {
		id = _id;
	}
	public String getName(){
		return name;
	}
	public void setName(String _name) {
		if(_name.length()<=10) {
			name = _name;
		} else {
			System.out.println("이름은 10글자 까지만 가능");
		}
	}
	public int getAge(){
		return age;
	}
	public void setAge(int _age) {
		if(_age>=0 && _age <= 130) {
			age = _age;
		} else {
			System.out.println("나이는 0 ~ 130 사이만 가능");
		}
	}
	public void info() {
		System.out.println("--- 회 원   정 보 ---");
		System.out.println("ID	: " + id);
		System.out.println("이름	: " + name);
		System.out.println("나이	: " + age + " 세");
	}
}
public class ExgGetterSetter {
	public static void main(String[] args) {
		Member manA = new Member();
//		manA.id = "001";
//		manA.name = "manA";
//		manA.age = 20;
		manA.setId("001");
		manA.setName("sdfDASGVHASDVGHGJ"); 
		manA.setName("manA");
		manA.setAge(-20);
		manA.setAge(28);
		manA.info();
		// getter 쓰는 이유 : 개별적으로 써야할 경우가 있어서 (따로 불러오기)
		System.out.println("회원 ID : " + manA.getId());
		System.out.println("회원 이름 : " + manA.getName());
		System.out.println("회원 나이 : " + manA.getAge() + " 세");
	}
}

이름은 10글자 까지만 가능
나이는 0 ~ 130 사이만 가능
--- 회 원 정 보 ---
ID : 001
이름 : manA
나이 : 28 세

회원 ID : 001
회원 이름 : manA
회원 나이 : 28 세


Book

Book class 를 정의하고, BookManager class 에서 테스트 하세요

  • 책제목, 지은이, 진열위치, 가격의 관리가 가능합니다
  • 멤버필드 값을 설정, 사용하는 getter, setter 메서드를 정의하세요
    -> 지은이 : 2 ~ 10 글자 가능
    진열위치 : A, B, C 만 가능
    가격 : +(plus) 만 가능
package ch03_getter_setter;
public class Book {
	private String title;	// 책제목
	private String author;	// 지은이
	private char area;	// 진열위치
	private int price;		// 가격
	public void info() {
		System.out.println("- 도 서  정 보 -");
		System.out.println("책제목 : " + title);
		System.out.println("지은이 : " + author);
		System.out.println("진열위치 : " + area);
		System.out.println("책가격 : " + price);
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String _title) {
		title = _title;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String _author) {
		if(_author.length()>=2&&_author.length()<=10) {
			author = _author;
		} else {
			System.out.println("지은이 2 ~ 10글자 ㅇㅋ?");
		}
	}
	public char getArea() {
		return area;
	}
	public void setArea(char _area) {
		if(_area >='A' && _area<='C') {
			area = _area;
		} else {
			System.out.println("진열위치 A, B, C만 ㅇㅋ?");
		}
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int _price) {
		if(_price>0) {
			price = _price;
		} else {
			System.out.println("가격 양수만 ㅇㅋ?");
		}
	}
}

BookManager

package ch03_getter_setter;

public class BookManager {
	public static void main(String[] args) {
		Book b1 = new Book();
		b1.setTitle("토지");
		b1.setAuthor("sfadfsdaasdfhg");
		b1.setAuthor("박경리");
		b1.setArea('d');
		b1.setArea('A');
		b1.setPrice(-22000);
		b1.setPrice(22000);
		b1.info();
	}
}

지은이 2 ~ 10글자 ㅇㅋ?
진열위치 A, B, C만 ㅇㅋ?
가격 양수만 ㅇㅋ?
- 도 서 정 보 -
책제목 : 토지
지은이 : 박경리
진열위치 : A
책가격 : 22000


ch04_constructor


Member

주의사항

  • 생성자를 하나라도 정의하면 기본생성자(default) 가 자동으로 생성자가 만들어지지 않음
  • 생성자의 이름은 무조건 클래스의 이름과 같아야 함
package ch04_constructor;

public class Member {
	private String id;
	private String name;
	private int age;
	//생성자
	public Member() { 
		System.out.println("- Member() -");
		id = null;
		name = null;
		age = 0;
	}
	// 생성자 Overloading // 메서드 이름은 같지만 매개변수가 다름
	public Member(String _id, String _name, int _age) {
		System.out.println("- Member(String _id, String _name, int _age) -");
		id = _id;
		name = _name;
		age = _age;
	}
	public String getId() {
		return id;
	}
	public void setId(String _id) {
		id = _id;
	}
	public String getName() {
		return name;
	}
	public void setName(String _name) {
		if (_name.length() <= 10) {
			name = _name;
		} else {
			System.out.println("이름은 10글자 까지만 가능");
		}
	}
	public int getAge() {
		return age;
	}
	public void setAge(int _age) {
		if (_age >= 0 && _age <= 130) {
			age = _age;
		} else {
			System.out.println("나이는 0 ~ 130 사이만 가능");
		}
	}
	public void info() {
		System.out.println("--- 회 원   정 보 ---");
		System.out.println("ID	: " + id);
		System.out.println("이름	: " + name);
		System.out.println("나이	: " + age + " 세");
	}
}

MemberManager

어떠한 클래스로부터 객체를 만들 때 해당 클레스 안에 생성자가 실행
생성자 : 클래스와 동일한 이름을 가진 메서드(필수)
객체를 생성하기 위해선 생성자가 작동됨
작성하지 않으면 아무런 내용도 가지지 않는 default 생성자가 작동됨
생성자란 객체에 있는 멤버필드를 초기화 하는 것

package ch04_constructor;

public class MemberManager {
	public static void main(String[] args) {
		Member manA = new Member(); // () 는 생설자를 호출하는 것임
		// 나오는 이유 >> 생성자가 기본생성자를 초기화해서 출력됨
		manA.info(); 
		Member manB = new Member("asd", "asdasd", 123);
		manB.info();
	}
}

- Member() -
--- 회 원 정 보 ---
ID : null
이름 : null
나이 : 0 세

- Member(String _id, String _name, int _age) -
--- 회 원 정 보 ---
ID : 002
이름 : asdasd
나이 : 123 세


Book

Book class 를 정의하고, BookManager class 에서 테스트 하세요

  • 책제목, 지은이, 진열위치, 가격의 관리가 가능합니다
  • 멤버필드 값을 설정, 사용하는 getter, setter 메서드를 정의하세요
    -> 지은이 : 2 ~ 10 글자 가능
    진열위치 : A, B, C 만 가능
    가격 : +(plus) 만 가능
  • 기본생성자 2개 생성
package ch04_constructor;
public class Book {
	private String title;	// 책제목
	private String author;	// 지은이
	private char area;	// 진열위치
	private int price;		// 가격
	public Book() {
		System.out.println("- Book -");
	}
	public Book(String _title, String _author) {
		title = "none";
		author = "미상";
		area = '-';
		price =0;
	}
	public Book(String _title, String _author, char _area, int _price) {
		System.out.println("- Book(String title, String author, char area, int price) -");
		title = _title;
		author = _author;
		area = _area;
		price = _area;
	}
	public void info() {
		System.out.println("- 도 서  정 보 -");
		System.out.println("책제목 : " + title);
		System.out.println("지은이 : " + author);
		System.out.println("진열위치 : " + area);
		System.out.println("책가격 : " + price);
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String _title) {
		title = _title;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String _author) {
		if(_author.length()>=2&&_author.length()<=10) {
			author = _author;
		} else {
			System.out.println("지은이 2 ~ 10글자 ㅇㅋ?");
		}
	}
	public char getArea() {
		return area;
	}
	public void setArea(char _area) {
		if(_area >='A' && _area<='C') {
			area = _area;
		} else {
			System.out.println("진열위치 A, B, C만 ㅇㅋ?");
		}
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int _price) {
		if(_price>0) {
			price = _price;
		} else {
			System.out.println("가격 양수만 ㅇㅋ?");
		}
	}
}

BookManager

package ch04_constructor;
public class BookManager {
	public static void main(String[] args) {
		Book b1 = new Book();
		b1.info();
		b1.setTitle("토지");
		b1.setAuthor("sfadfsdaasdfhg");
		b1.setAuthor("박경리");
		b1.setArea('d');
		b1.setArea('A');
		b1.setPrice(-22000);
		b1.setPrice(22000);
		b1.info();
		
		Book b2 = new Book("토지2", "ㅁㄴㅇㄻㄴㅇㄻㄴㅇㄹ", 'A', 123124215);
		b2.info();
		Book b3 = new Book("토지2", "ㅁㄴㅇㄻㄴㅇㄻㄴㅇㄹ");
		b3.info();
	}
}

- Book -
- 도 서 정 보 -
책제목 : null
지은이 : null
진열위치 :

지은이 2 ~ 10글자 ㅇㅋ?
진열위치 A, B, C만 ㅇㅋ?
가격 양수만 ㅇㅋ?
- 도 서 정 보 -
책제목 : 토지
지은이 : 박경리
진열위치 : A
책가격 : 22000

- Book(String title, String author, char area, int price) -
- 도 서 정 보 -
책제목 : 토지2
지은이 : ㅁㄴㅇㄻㄴㅇㄻㄴㅇㄹ
진열위치 : A
책가격 : 65

- 도 서 정 보 -
책제목 : none
지은이 : 미상
진열위치 : -
책가격 : 0


ch05_this


Member

this

  • class 안에 instance 멤버를 가리키는 참조 변수

    this()

  • 생성자에서 'this()' 를 이용하여 다른 생성자를 호출할 수 있다

  • 생성자의 첫번째 라인에서만 사용 가능

package ch05_this;
public class Member {
	private String id;
	private String name;
	private int age;
	
	public Member() {
		System.out.println("- Member() -");
		id = "none";
		name = "none";
		age = 0;
	}
	public Member(String id) {
		this(); // 이것을 사용하면 아래의 //처리한 코드를 굳이 쓸 필요가 없음 
		// () 안에 매개변수를 쓰고 사용해도 됨
//		this(id, "none", 0);
		// 주의사항 : 생성자의 첫번째 라인에서만 가능
		System.out.println("- Member(String id) -");
		this.id = id;
//		this.name ="none"; // 굳이 넣을 필요 없음
//		this.age = 0;
	}
	// this는 클래스 안의 멤버를 뜻
	public Member(String id, String name, int age) {
		System.out.println("- Member(String _id, String _name, int _age) -");
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		if (name.length() <= 10) {
			this.name = name;
		} else {
			System.out.println("이름은 10글자 까지만 가능");
		}
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if (age >= 0 && age <= 130) {
			this.age = age;
		} else {
			System.out.println("나이는 0 ~ 130 사이만 가능");
		}
	}
	public void info() {
		System.out.println("--- 회 원   정 보 ---");
		System.out.println("ID	: " + id);
		System.out.println("이름	: " + name);
		System.out.println("나이	: " + age + " 세");
	}
}

MemberManager

package ch05_this;

public class MemberManager {
	public static void main(String[] args) {
		Member manA = new Member(); 
		manA.info(); 
		Member manB = new Member("002", "asdasd", 20);
		manB.info();
		Member manC = new Member("003");
		manC.info();
	}
}

- Member() -
--- 회 원 정 보 ---
ID : none
이름 : none
나이 : 0 세

- Member(String _id, String _name, int _age) -
--- 회 원 정 보 ---
ID : 002
이름 : asdasd
나이 : 20 세

- Member() -
- Member(String id) -
--- 회 원 정 보 ---
ID : 003
이름 : none
나이 : 0 세


ch06_quiz


Shoes

신발 정보를 가지는 Shoes class 를 정의하고, ShoesManager class 에서 테스트 하세요

  • 제조회사, 모델명, 사이즈, 가격의 관리가 가능합니다
  • 생성자 2개 이상, getter, setter 가 있어야 합니다
  • 사이즈 : 200 ~ 300 mm 만 가능합니다
  • 가격 : -(minus) 값은 사용할 수 없습니다
package ch06_quiz;
public class Shoes {
	private String company;
	private String model;
	private int size;
	private int price;
	public Shoes() {
		company = "none";
		model = "none";
		size = 0;
		price = 0;
	}
	public Shoes(String company, String model) {
		this(company, model,0,0);
	}
	public Shoes(String company, String model, int size, int price) {
		this.company = company;
		this.model = model;
		if(size>=200 && size <=300) {
			this.size = size;
		} else System.out.println("200 ~ 300 mm 사이즈만 가능");
		if(price>=0) {
			this.price = price;
		} else System.out.println("0이상만 가능");
	}
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
	public String getModel() {
		return model;
	}
	public void setModel(String model) {
		this.model = model;
	}
	public int getSize() {
		return size;
	}
	public void setSize(int size) {
		if(size>=200 && size <=300) {
			this.size = size;
		} else System.out.println("200 ~ 300 mm 사이즈만 가능");
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		if(price>=0) {
			this.price = price;
		} else System.out.println("0이상만 가능");
	}
	public void info() {
		System.out.println("--- 신 발   정 보 ---");
		System.out.println("제조회사 : " + company);
		System.out.println("모델명   : " + model);
		System.out.println("사이즈   : " + size + " mm");
		System.out.println("가격     : " + price + " 원");
	}
}

ShoesManager

package ch06_quiz;
public class ShoesManager {
	public static void main(String[] args) {
		Shoes s1 = new Shoes();
		s1.setCompany("아디다스");
		s1.setModel("ABC");
		s1.setSize(210);
		s1.setPrice(-2000);
		s1.info();
		Shoes s2 = new Shoes("나이키", "에어포스");
		s2.info();
		Shoes s3 = new Shoes("뉴발", "GHI", 250, 30000);
		s3.info();
		Shoes s4 = new Shoes("잘못입력", "ㅁㄴㅇㄹ", 310, -20000);
		s4.info();
	}
}

0이상만 가능
--- 신 발 정 보 ---
제조회사 : 아디다스
모델명 : ABC
사이즈 : 210 mm
가격 : 0 원

200 ~ 300 mm 사이즈만 가능
--- 신 발 정 보 ---
제조회사 : 나이키
모델명 : 에어포스
사이즈 : 0 mm
가격 : 0 원

--- 신 발 정 보 ---
제조회사 : 뉴발
모델명 : GHI
사이즈 : 250 mm
가격 : 30000 원

200 ~ 300 mm 사이즈만 가능
0이상만 가능
--- 신 발 정 보 ---
제조회사 : 잘못입력
모델명 : ㅁㄴㅇㄹ
사이즈 : 0 mm
가격 : 0 원


ch07_accessA


First

package ch07_accessA;
public class First {
	public int pubData;
	protected int proData;
	int defData;
	private int priData;
	void defaultMethod() {}
	public void publicMethod() {}
}

Second

package ch07_accessA;
class Second {
	public int pubData;
	protected int proData;
	int defData;
	private int priData;
	void defaultMethod() {}
	public void publicMethod() {}
}

AreaOne

접근 제한자

  • 다른 class 에서 class 또는 class 멤버의 접근을 허용할지를 결정
  • public : 모든 class 에서 접근이 가능
  • protected : 같은 package, 상속받은 하위 class 에서 접근 가능
  • default : 같은 package 내에서만 접근 가능
  • private : class 안에서만 접근 가능, 외부에서는 접근 불가
class 내부같은 package하위 class다른 package
publicOOOO
protectedOOOX
defaultOOXX
privateOXXX
package ch07_accessA;

public class AreaOne {
	public static void main(String[] args) {
		First firstA = new First();
		firstA.pubData=1;
		firstA.proData=2;
		firstA.defData=3;
//		firstA.priData=4; Error
		firstA.defaultMethod();
		firstA.publicMethod();
		Second secondA = new Second();
		secondA.pubData=1;
		secondA.proData=2;
		secondA.defData=3;
//		secondA.priData=4; Error
		secondA.defaultMethod();
		secondA.publicMethod();
	}
}

ch07_accessB


AreaTwo

package ch07_accessB;

import ch07_accessA.First;

public class AreaTwo {
	public static void main(String[] args) {
		// 다른 package에 있는 class 를 사용하려면 import 해야함 / ctrl + shift + o
		// 다른 package는 public 선언된 것만 가능
		First firstB = new First();
		firstB.pubData = 1;
//		firstB.proData = 2;
//		firstB.defData = 3;
//		firstB.priData = 4;
//		firstB.defaultMethod();
		firstB.publicMethod();
		// class 자체가 public 이 아니기 때문에 다른 패키지에선 사용 불가
		// import 도 안됨
//		Second secondB = new Second(); 
	} 
}

ch08_static


ExStatic

static

  • static 영역을 따로 잡을 수 있음
  • 가장 먼저 작동, 로드되는 순간 딱 1번
  • 생성자보다 먼저
  • static 멤버에 대한 초기화가 이루어짐
  • instance 멤버는 사용 불가
package ch08_static;

public class ExStatic {
	public static int staValue; // 다같이 씀
	private int priValue;
	static {
		System.out.println("- static area -");
		staValue =0; 
//		priValue =0; Error <- 이유 : 객체가 생성되기 전 / 생성자가 아직 만들어지지 않음
	}
	public ExStatic() {
		++ staValue; // static 이 선언되면 비스듬해짐
		++ priValue;
		System.out.println("staValue : " + staValue + " - priValue : " + priValue);
	}
	public static void staticMethod() {
		System.out.println("- staticMethod() -");
		System.out.println("staValue : " + staValue);
//		System.out.println("priValue : " + priValue); Error
		int a = 0;
	}
	public void info() {
		System.out.println("staValue : " + staValue);
		System.out.println("priValue : " + priValue); 
	}
}

StaticTest

static

  • class 에서 공통으로 사용되는 멤버
package ch08_static;
public class StaticTest {
	public static void main(String[] args) {
		// 객체와 상관없이 사용 할 수 있음
		// 객체 생성 없이 사용 가능
		ExStatic.staValue = 0;
		ExStatic.staticMethod();
		ExStatic esA = new ExStatic();
		ExStatic esB = new ExStatic();
		ExStatic.staValue =7; //객체 생성없이 바로 불러와서 사용 가능
		esA.staValue = 10; // static은 공용이기 때문에 하나를 바꾸면 같이 바뀜
		esB.staValue = 5;
		esA.info();
		esB.info();
        // 출력 시 마지막 esB.staValue =5; 를 마지막으로 값이 변한걸 확인가능
	} 
}

- static area -
- staticMethod() -
staValue : 0
staValue : 1 - priValue : 1
staValue : 2 - priValue : 1

staValue : 5
priValue : 1
staValue : 5
priValue : 1


ch09_final


FinalTest

final

  • 한 번 설정하면 변경 불가!
  • final 선언된 변수는 값을 한 번 설정하고 나면 수정 불가
  • final 선언된 변수명은 전부 대문자
package ch09_final;
public class FinalTest {
	public static void main(String[] args) {
		final double PI;
		PI = 3.141592;
//		PI = 3.14; Error // 위에서 이미 설정했기 때문에 수정 불가
		final int TEN = 10;
	}
}

ExFinal

선언 시 반드시 초기화를 해야 함

package ch09_final;
public class ExFinal {
	// 생성자에서 초기화 / 반드시 해야함
	private final int A;
	
	public ExFinal() {
		A = 1;
	}
	public ExFinal(int a) {
		A = a;
	}
	
	// 멤버필드에서 선언과 동시에 초기화
	private final int B = 2;
	
	// static final 을 사용하려면 
	// static area에서 먼저 초기화
	private static final int C;
	// static 영역
	static {
		C = 0;
	}
	
	// 선언과 동시에 초기화
	private static final int D = 4;
}

ch10_quiz


BankBook

  • 하나의 은행 상품을 관리하는 BankBook class 를 정의
  • BankBookManager class 에서 테스트
  • 이율 : 한번의 설정으로 모든 계좌의 이율 변경 가능
  • 계좌번호 : 한번 설정 후 변경 불가
  • 고객명, 잔액

기능

  • 입/출금, 통장 정보 확인, 이율 확인/변경 가능
package ch10_quiz;
public class BankBook {
	private static double rate; // 이율
	private final String account; // 계좌번호
	private String name;          // 고객명
	private int balance;          // 잔액
	
	static { rate = 2; } // static 영역 따로 설정 가능 -> rate 설정 
	
    public BankBook(String account, String name, int balance) {
		this.account = account;
		this.name = name;
		this.balance = balance;
	}
    
	public BankBook(String account, String name) {
		this(account, name, 0); // 계좌번호와 이름만 입력했을 때 잔액은 0원으로 설정되도록 함
	}
	
	// 입금
	public void deposit(int money) {
		if(money > 0) {
			this.balance += money;
			System.out.println("입금액 : " + money + " 원");
			System.out.println("잔  액 : " + balance + " 원");
		} else {
			System.out.println("입금액 오류~");
		}
	}
	
	// 출금
	public void withdraw(int money) {
		if(money > 0 && money <= this.balance) {
			this.balance -= money;
			System.out.println("출금액 : " + money + " 원");
			System.out.println("잔  액 : " + balance + " 원");
		} else {
			System.out.println("출금액 오류~");
		}
	}
	
	// 계좌 정보
	public void info() {
		System.out.println("--- 계 좌   정 보 ---");
		System.out.println("계좌번호 : " + account);
		System.out.println("고객명   : " + name);
		System.out.println("잔액     : " + balance + " 원");
		System.out.println("현재이율 : " + rate + " %");
	}
	
	// 이율 확인
	public static void currentRate() {
		System.out.println("현재 이율 : " + rate + " %");
	}
	
	// 이율 변경
    // 해당 메서드로 rate를 변경하면 static 이 선언되었으므로
	// Manager class에서 info() method 사용시 모든 rate가 수정되어 출력됨
	public static void changeRate(double change) {
		if(change > 0) {
			rate = change;
			System.out.println("변경 이율 : " + rate + " %");
		}
	}
}

BankBookManager

package ch10_quiz;


public class BankBookManager {
	public static void main(String[] args) {
		BankBook manA = new BankBook("000123-12-001", "manA");
		manA.deposit(-20000);
		manA.deposit(20000);
		manA.info();
		
		System.out.println();
		
		BankBook manB = new BankBook("000123-12-002", "manB", 10000);
		manB.info();
		manB.withdraw(10001);
		manB.withdraw(9999);
		manB.info();
		
		System.out.println();
		
		manA.changeRate(2.3);
		manA.info();
		manB.info();
	}
}

입금액 오류~
입금액 : 20000 원
잔 액 : 20000 원
--- 계 좌 정 보 ---
계좌번호 : 000123-12-001
고객명 : manA
잔액 : 20000 원
현재이율 : 2.0 %

--- 계 좌 정 보 ---
계좌번호 : 000123-12-002
고객명 : manB
잔액 : 10000 원
현재이율 : 2.0 %
출금액 오류~
출금액 : 9999 원
잔 액 : 1 원
--- 계 좌 정 보 ---
계좌번호 : 000123-12-002
고객명 : manB
잔액 : 1 원
현재이율 : 2.0 %

변경 이율 : 2.3 %
--- 계 좌 정 보 ---
계좌번호 : 000123-12-001
고객명 : manA
잔액 : 20000 원
현재이율 : 2.3 %
--- 계 좌 정 보 ---
계좌번호 : 000123-12-002
고객명 : manB
잔액 : 1 원
현재이율 : 2.3 %

profile
Fintech

0개의 댓글