Java /day08 / 23.09.01(금) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

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

P07_method


MethodEx01

메서드 ( method )

  • class 안에 하나의 기능을 가진 작은 프로그램

반환타입

  • 메서드의 실행이 종료되면서 호출부로 돌아갈 때 보내지는 값의 자료형
  • 기본 자료형, 참조 자료형, void( 반환값이 없을 때 )

메서드명

  • 메서드 실행(호출)시에 사용하는 이름

매개변수

  • 호출부에서 보내지는 값을 보관하는 변수( 필수x)

메서드 호출 : 메서드명을 사용해서 실행

  • 메서드명( 인자값 );
    -> 메서드 정의부에 매개변수가 있으면, 메서드 호출시에 해당 타입에 맞는 값을 보내야 함
//접근제한자 지정예약어	반환타입 메서드명 매개변수
	public     static     void     main(   String[] args) {
	hi();
	dataSand(10);
	System.out.println(returnPi());
	double pi = returnPi();
	System.out.println("원주율  : "+ pi);
		
	String stn = "시작";
	stn = sendReceive(stn);
	System.out.println(stn);
} // main()
	
public static String sendReceive(String stn) {
	System.out.println("받은 문자열 : " + stn);
	stn = "종료";
	return stn;
}

return

  • 메서드 실행에서 나온 결과물을 호출부로 보낼 때 사용
  • 반환값은 딱 하나만 가능
public static double returnPi() {
	return 3.141592;
}
	
public static void dataSand(int paramiter) {
	System.out.println("받은 데이터 : " + paramiter);
}
	
// 메서드 정의 : 메서드 호출시에 실행하는 기능 구현
public static void hi() {
	System.out.println("안녕 ^~^");
}

안녕 ^~^
받은 데이터 : 10
3.141592
원주율 : 3.141592
받은 문자열 : 시작
종료


MethodEx02

import java.util.Scanner;

public class MethodEx02 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int data = inputInt(scanner);
		System.out.println("data : " + data);
		
	} // main
	// 잦은 호출은 좋지 않다. -> 호출 지역에서 만들어서 하나로 사용
	public static int inputInt(Scanner scanner) {
		System.out.print("데이터 입력 > ");
		int data = scanner.nextInt();
		return  data;
	}
}

데이터 입력 > 1
data : 1


MethodEx03

코드를 보는데 머리로 이해가 잘 안되면 그려보자

public class MethodEx03 {
	public static void main(String[] args) {
		
		int[] arr = new int[3];
		
		lifeTestA();
		System.out.println("lTA / arr[0] : " + arr[0]);

		lifeTestB(arr);
		System.out.println("lTB / arr[0] : " + arr[0]);
		System.out.println("lTB / arr[0] : " + arr[1]);
		System.out.println("lTB / arr[0] : " + arr[2]);
		
		arr= lifeTestC();
		System.out.println("lTC / arr[0] : " + arr[0]);
		
	} // main
	public static void lifeTestA() {
		int[] arr = new int[3];
		arr[0] = 10;
	}
	
	public static void lifeTestB(int[] arr) {
		for(int i=0; i<arr.length;i++) {
			arr[i] = i+1;
		}
	}
	
	public static int[] lifeTestC() {
		return new int[3];
	}
}

lTA / arr[0] : 0
lTB / arr[0] : 1
lTB / arr[0] : 2
lTB / arr[0] : 3
lTC / arr[0] : 0


MethodEx04

  • 메서드 실행 중 return 문을 실행시 바로 호출부로 이동
  • return 문 여러 번 사용 가능
  • 모든 경우의 수가 return 에 담겨야 함
import java.util.Scanner;

public class MethodEx04 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		char subject = inputSubject("Java : j , Python : p 선택 >> ", scanner);
		
		if(checkSubject(subject)) {
			System.out.println("ㅅㄱ");
		}
	} // main
	
	public static char inputSubject(String menu, Scanner scanner) {
		System.out.println(menu);
		char value = scanner.next().charAt(0);
		return value;
	}
	public static boolean checkSubject(char subject) {
		switch(subject) {
		case 'j':
		case 'J':
			System.out.println("Java 를 선택");
			return true;
		case 'p':
		case 'P':
			System.out.println("Python 를 선택");
			return true;
		}
		System.out.println(" - end - ");
		return false;
	}
}

Java : j , Python : p 선택 >>
p
Python 를 선택
ㅅㄱ


QuinzMethod / 내 코드

#1

이름, 나이, 성별, 키를 입력받아서 반환하는 각각의 메서드를 구현하세요

Main Method

public static void main(String[] args) {
		
	String name = "";
	char gen = ' ';
	int age=0;
	double h =0;
	
	name = inputName(name, scanner);
	age = inputAge(age, scanner);
	gen = inputGen(gen, scanner);
	h = inputH(h, scanner);
	System.out.println("--- 입 력  정 보 ---");
	System.out.println("이름 : " + name);
	System.out.println("나이 : "+ age + "세");
	System.out.println("성별 : "+ gen);
	System.out.println("키   : "+ h+"cm");
}

method

	// #1
	public static String inputName(String name, Scanner scanner) {
		System.out.print("이름 입력 > ");
		name = scanner.next();
		return name;
	}
	public static int inputAge(int age, Scanner scanner) {
		System.out.print("나이 입력 > ");
		age = scanner.nextInt();
		return age;
	}
	public static char inputGen(char gen, Scanner scanner) {
		System.out.print("성별 입력 > ");
		gen = scanner.next().charAt(0);
		return gen;
	}
	public static double inputH(double h, Scanner scanner) {
		System.out.print("키   입력 > ");
		h = scanner.nextDouble();
		return h;
	}
	

이름 입력 > 윤범헌
나이 입력 > 28
성별 입력 > 남자
키 입력 > 123.4
--- 입 력 정 보 ---
이름 : 윤범헌
나이 : 28세
성별 : 남
키 : 123.4cm

#2

정수 하나를 입력받아서 반환하는 메서드를 구현합니다
위 메서드를 사용해서 변수 2개를 각각 초기화 합니다
두개의 변수를 사용해서, 두수 중 큰수를 찾아서 반환하는 메서드를 구현하세요

  • 변수에 들어가는 값은 1 이상의 값만 가능하고, 같은 값이면 0 을 반환합니다

Main Method

int num1 = inputInt("숫자 입력 > ", scanner);
int num2 = inputInt("숫자 입력 > ", scanner);
System.out.println("num1 : " + num1);
System.out.println("num2 : " + num2);
		
int max = maxInt(num1, num2);
System.out.println("max : "+max);

method

	// #2
	public static int inputInt(String message, Scanner scanner) {
		System.out.print(message);
		int value = scanner.nextInt(); 
		return value;
	}
	public static int maxInt(int num1, int num2) {
		if(num1 >=1 && num2 >=1) {
			if(num1 > num2) {
				return num1;
			} else if(num1<num2) {
				return num2;
			} else if(num1 == num2) {
				return 0;
			}
		}
		System.out.println("숫자 1 이상 입력");
		return -1 ;
	}

숫자 입력 > 45
숫자 입력 > 34
num1 : 45
num2 : 34
max : 45

#Ex

  • 생성하려는 숫자(정수) 범위의 시작, 마지막 값을 넘겨 받아서,
  • 해당 범위의 랜덤값을 반환하는 메서드를 구현하세요

Main Method

int rv = rangeRandom(random,1,10);
System.out.println("rv : " + rv);

method

// #Ex
public static int rangeRandom(Random random, int start, int end) {
	if(end < start) {
		System.out.println("- range error -");
		return -1;
	}
	return random.nextInt(end - start + 1) +start;
}

rv : 1

#3

  • 아래의 배열에 한번에 같은 값이 들어갈때까지 진행하는 메서드를 구현하세요
  • 값 : 1 ~ 5

Main Method

int[] data = new int[3];
int cnt=0;
cnt = same(random, data);
System.out.println("돌아간 횟수 : " + cnt);
for(int i=0; i<data.length; i++) {
	System.out.print("data[" + i+ "] : " + data[i] + " ");
}
System.out.println();
cnt = same2(random, data);
System.out.println("돌아간 횟수 : " + cnt);
for(int i=0; i<data.length; i++) {
	System.out.print("data[" + i+ "] : " + data[i] + " ");
}

method #3

	// #3 // 내 코드 문제점 : 한 번에 만드는 것이 아니라 만든 후 수정임 
	public static int same(Random random, int[] data) {
		int cnt =0;
		boolean run = true;
		int r = 0;
		data[0] = random.nextInt(5)+1;
		while(run) {
			for(int i=1; i<data.length; i++) {
				data[i] = random.nextInt(5)+1;
				if(data[0]!=data[i]) {
					i--;
				} cnt++;
			}
			if(data.length==3) run = false;
		}
		return cnt;
	}
	// 만들어보자
	public static int same2(Random random, int[] data) {
		int cnt =0;
		boolean run = true;
		int a= 0;
		while(run) {
			cnt++;
			for(int i=0; i< data.length; i++) {
				data[i] = random.nextInt(5) +1;
				System.out.print(data[i] + " ");
			}
			System.out.println();
			a = data[0];
			for(int i=1; i< data.length; i++) {
				if(a!=data[i]) {
					break;
				}
				if(a== data[data.length-1]) run = false;
			}
		}
		return cnt;
	}
}

첫 메소드

돌아간 횟수 : 34
data[0] : 2 data[1] : 2 data[2] : 2

개선 메소드

2 5 3
5 4 3
4 1 3
4 4 5
3 1 1
1 4 5
3 4 4
5 3 3
4 1 1
1 2 5
4 1 1
3 3 3
돌아간 횟수 : 12
data[0] : 3 data[1] : 3 data[2] : 3


QuizMethod // 강사님 코드

import java.util.Random;
import java.util.Scanner;

import javafx.scene.chart.PieChart.Data;

public class QuizMethodT {

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		// #1
		// 이름, 나이, 성별, 키를 입력받아서 반환하는 각각의 메서드를 구현하세요
		String name = inputString("이름 입력 > ", scanner);
		int age = inputInteger("나이 입력 > ", scanner);
		char gender = inputCharacter("성별 입력 > ", scanner);
		double height = inputDouble("키   입력 > ", scanner);
		
		System.out.println();
		
		System.out.println("--- 입 력   정 보 ---");
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age + " 세");
		System.out.println("성별 : " + gender);
		System.out.println("키   : " + height + " cm");
		
		
		// #2
		int dataA = rangeInputInt(scanner, 1, 10);
		int dataB= rangeInputInt(scanner, 1, 10);
		int max = findMax(dataA, dataB);
		if(max != 0) {
			System.out.println(dataA + " , " + dataB + " 중 큰수 : " + max);
		} else {
			System.out.println(dataA + " , " + dataB + " 같은수");
		}

		// #3
		// 아래의 배열에 한번에 같은 값이 들어갈때까지 진행하는 메서드를 구현하세요
		// - 값 : 1 ~ 5
		int[] data = new int[3];
		sameArray(data);
	}

	// #1
	public static double inputDouble(String message, Scanner scanner) {
		System.out.print(message);
		double value = scanner.nextDouble();
		return value;
	}
	
	public static char inputCharacter(String message, Scanner scanner) {
		System.out.print(message);
		char value = scanner.next().charAt(0);
		return value;
	}

	public static int inputInteger(String message, Scanner scanner) {
		System.out.print(message);
		int value = scanner.nextInt();
		return value;
	}

	public static String inputString(String message, Scanner scaner) {
		System.out.print(message);
		String value = scaner.next();
		return value;
	}

	// #2
	// 정수 하나를 입력받아서 반환하는 메서드를 구현합니다
	// 위 메서드를 사용해서 변수 2개를 각각 초기화 합니다
	// 두개의 변수를 사용해서, 두수 중 큰수를 찾아서 반환하는 메서드를 구현하세요
	// - 변수에 들어가는 값은 1 이상의 값만 가능하고, 같은 값이면 0 을 반환합니다
	public static int findMax(int a, int b) {
		if (a > b)
			return a;
		else if (b > a)
			return b;
		else
			return 0;
	}

	public static int rangeInputInt(Scanner scanner, int start, int end) {
		int value = 0;
		while (true) {
			System.out.print(start + " ~ " + end + " 사이의 값 입력 > ");
			value = scanner.nextInt();
			if (value >= start && value <= end)
				break;
		}
		return value;
	}

	// #3
	// 아래의 배열에 한번에 같은 값이 들어갈때까지 진행하는 메서드를 구현하세요
	// - 값 : 1 ~ 5
	// #3-1
		public static void sameArray(int[] arr) {
			Random random = new Random();
			int count = 0; // 시도 횟수
			while(true) {
				++count;
				setArray(arr, random); // 데이터 입력
				showArray(arr, count); // 데이터 출력
				if(sameCheck(arr))     // 데이터 확인 ( 성공 : true, 실패 : false )
					break;
			}
		}
	// #3-2
	public static void setArray(int[] arr, Random random) {
		for(int i=0 ; i<arr.length ; i++) {
			arr[i] = rangeRandom(random, 1, 5);
		}
	}
	// #3-3
	public static void showArray(int[] arr, int count) {
		System.out.print(count + " 회 : ");
		for(int i=0 ; i<arr.length ; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
	// #3-4
	public static boolean sameCheck(int[] arr) {
		int p = arr[0];
		for(int i=1 ; i<arr.length ; i++) {
			if(arr[i] != p)
				return false;
		}
		return true;
	}
	// #Ex
	public static int rangeRandom(Random random, int start, int end) {
		if (end < start) {
			System.out.println("- range error -");
			return -1;
		}
		return random.nextInt(end - start + 1) + start;
	}
}

P08_class


ExClassBasic


Human

객체 지향 프로그램 ( OOP : Object Oriented Programming )

  • class 를 사용해서 객체를 생성하고,
    이렇게 만들어진 객체를 사용해서 하나의 프로그램을 만드는 것

class

  • 객체를 만들기 위한 설계도
  • 객체에 대한 속성과 기능을 코드로서 구현한 것

객체 ( Object )

  • class 를 사용해서 만들어진 것, instance 라고도 함
  • 하나의 class 로 여러개의 instance를 생성할 수 있다

class 구성

  • 멤버 필드 : 변수 ( instance 변수 ) -> 객체 고유의 데이터
    멤버 메서드 : 객체 기능, 동작 구현

하나의 파일에 여러 class를 만들 수 있지만
public는 파일명과 같은 class 에 붙어야 한다

package ch01_basic;
class Human{
	// 멤버 필드
	String name; 
	int age;
	char gen;
	double height;
	// 멤버 메서드
	void info() {
		System.out.println("안녕 나는 " + name + "야");
		System.out.println("--- 내 정보임 ㅋㅋ ---");
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
	}
	void run() {
		System.out.println(name + "달려잇!");
	}
}
public class ExClassBasic { 
	public static void main(String[] args) {
		Human manA = new Human();
		manA.name = "manA";
		manA.age = 20;
		System.out.println("이름 : " + manA.name);
		System.out.println("나이 : " + manA.age);
		
		System.out.println();
		
		Human manB = new Human();
		manB.name = "manB";
		manB.age = 500;
		manB.info();
		manB.run();
	}
}

이름 : manA
나이 : 20

안녕 나는 manB야
--- 내 정보임 ㅋㅋ ---
이름 : manB
나이 : 500
manB달려잇!


Monitor

package ch01_basic;

import java.util.Scanner;

public class Monitor {
	String company;	// 제조 회사
	String size; 	// 화면 크기
	String panel;	// 패널 형태
	
	void setInfo(String _company, String _size, String _panel) {
		company = _company;
		size = _size;
		panel = _panel;
	}
	
	void inputInfo() {
		Scanner scanner = new Scanner(System.in);
		System.out.print("제조회사 입력 > ");
		company = scanner.next();
		System.out.print("화면크기 입력 > ");
		size = scanner.next();
		System.out.print("패널형태 입력 > ");
		panel = scanner.next();
	}
	
	void info () {
		System.out.println("--- 모니터 정보 ---");
		System.out.println("제조회사 : " + company);
		System.out.println("화면크기 : " + size + "인치");
		System.out.println("패널형태 : " + panel);
	}
	
}

MonitorManager

package ch01_basic;

public class MonitorManager {
	public static void main(String[] args) {
		Monitor proA = new Monitor();
		proA.company = "Lg";
		proA.size = "24";
		proA.panel = "평면";
		proA.info();
		
		System.out.println();
		
		Monitor proB = new Monitor();
		proB.setInfo("삼성", "39", "커브드");
		proB.info();
		
		System.out.println();
		
		Monitor proC = new Monitor();
		proC.inputInfo();
	}
}

--- 모니터 정보 ---
제조회사 : Lg
화면크기 : 24인치
패널형태 : 평면

--- 모니터 정보 ---
제조회사 : 삼성
화면크기 : 39인치
패널형태 : 커브드

제조회사 입력 > gd
화면크기 입력 > 123
패널형태 입력 > afds
--- 모니터 정보 ---
제조회사 : gd
화면크기 : 123인치
패널형태 : afds


Book

package ch01_basic;

import java.util.Scanner;

/*
 * Book class 를 정의하고, BookManager class에서 테스트 하세요
 * - 책제목, 지은이, 진열위치, 가격의 관리가 가능합니다.
 */
public class Book {
	String title;
	String author;
	String area;
	int price;
	
	void info(){
		System.out.println("--- 책 정보 ---");
		System.out.println("  제목   : " + title);
		System.out.println("지은이   : " + author);
		System.out.println("진열위치 : " + area);
		System.out.println("가격     : " + price + "원");
	}
	void setInfo(String _title, String _author, String _area, int _price) {
		title = _title;
		author = _author;
		area = _area;
		price = _price;
	}
	void inputInfo() {
		Scanner sc = new Scanner(System.in);
		System.out.print("책제목 입력 > ");
		title = sc.next();
		System.out.print("지은이 입력 > ");
		author = sc.next();
		System.out.print("진열위치 입력 > ");
		area = sc.next();
		System.out.print("가격 입력 > ");
		price = sc.nextInt();
		
	}
}

BookManager

package ch01_basic;

public class BookManager {
	public static void main(String[] args) {
		Book b1 = new Book();
		b1.setInfo("dasdsa", "김덕배", "강남", 5000);
		b1.info();
		System.out.println();
		Book b2 = new Book();
		b2.inputInfo();
		b2.info();
	}
}

--- 책 정보 ---
제목 : dasdsa
지은이 : 김덕배
진열위치 : 강남
가격 : 5000원

책제목 입력 > asdads
지은이 입력 > asdasd
진열위치 입력 > a3
가격 입력 > 12356
--- 책 정보 ---
제목 : asdads
지은이 : asdasd
진열위치 : a3
가격 : 12356원


Car

package ch01_basic;

import java.util.Scanner;

/*
 * Car class 를 정의하고, CarManager class 에서 테스트 하세요
 * - 차량의 제조회사, 모델명, 색상, 가격의 관리가 가능합니다
 */
public class Car {
	String company;
	String model;
	char color;
	int price;
	
	void info() {
		System.out.println("--- 차 관리 ---");
		System.out.println("제조회사 : " + company);
		System.out.println("모델명   : " + model);
		System.out.println("색상     : " + color);
		System.out.println("가격     : " + price);
	}
	void setInfo(String _company, String _model,char _color,int _price) {
		company = _company;
		model = _model;
		color = _color;
		price = _price;
	}
	void inputInfo() {
		Scanner sc = new Scanner(System.in);
		System.out.print("제조회사 입력 > ");
		company = sc.next();
		System.out.print("모델명 입력 > ");
		model = sc.next();
		System.out.print("색상 입력 > ");
		color = sc.next().charAt(0);
		System.out.print("가격 입력 > ");
		price = sc.nextInt();
	}
}

CarManager

package ch01_basic;

public class CarManager {
	public static void main(String[] args) {
		Car B = new Car();
		B.setInfo("B", "비비", 'b', 12345);
		B.info();
		
		Car C = new Car();
		C.inputInfo();
		C.info();
	}
}

--- 차 관리 ---
제조회사 : B
모델명 : 비비
색상 : b
가격 : 12345
제조회사 입력 > A
모델명 입력 > 한글
색상 입력 > y
가격 입력 > 1234
--- 차 관리 ---
제조회사 : A
모델명 : 한글
색상 : y
가격 : 1234


ch02_overloading


ExOverLoading

package ch02_overloading;
/*
 * 메서드 오버로딩 ( method overloading )
 * - class 안에 같은 이름의 메서드를 여러개 정의하는 것
 *   매개변수 갯수, 타입만 다르면 하나의 이름으로 여러개의 메서드를 정의할 수 있다.
 * - 반환타입은 오버로딩 조건에 해당하지 않음
 *   
 */
class Add{
	void addInt(int a, int b) {
		System.out.println("- addInt(int a, int b) - ");
		int sum = a+b;
		result(a,b,sum);
	}
	void addDouble(double a, double b) {
		System.out.println("- addDouble(double a, double b) - ");
		double sum = a+b;
		result(a,b,sum);
	}
	
	void result(int a, int b, int sum) {
		System.out.println(a + " + " +b + " = " + sum);
	}
	void result(double a, double b, double sum) {
		System.out.println(a + " + " +b + " = " + sum);
	}
	
	void addData(int a, int b) {
		System.out.println("- addInt(int a, int b) - ");
		int sum = a+b;
		result(a,b,sum);
	}
	void addData(double a, double b) {
		System.out.println("- addDouble(double a, double b) - ");
		double sum = a+b;
		result(a,b,sum);
	}
}

public class ExOverLoading {
	public static void main(String[] args) {
		
		Add testA = new Add();
		testA.addInt(12, 34);
		testA.addDouble(12.34, 56.78);
		
		System.out.println();
		
		testA.addData(7, 23);
		testA.addData(12.221, 1231.32);
	}
}

- addInt(int a, int b) -
12 + 34 = 46
- addDouble(double a, double b) -
12.34 + 56.78 = 69.12

- addInt(int a, int b) -
7 + 23 = 30
- addDouble(double a, double b) -
12.221 + 1231.32 = 1243.541


Max

Max class 를 정의하고, DataManager class 에서 테스트 하세요

  • 두 개의 값을 넘겨받고, 두 수 중에서 큰 수를 찾아서 반환하는 기능이 있다
  • 정수, 실수 타입 각각의 메서드
public class Max {
	int findMax (int a, int b) {
		if(a>b) return a;
		if(b>a) return b;
		else return 0;
	}
	double findMax (double a, double b) {
		if(a>b) return a;
		if(b>a) return b;
		else return 0;
	}
}

ShowArray

ShowArray class 를 정의하고, DataManager class 에서 테스트 하세요

  • 배열 변수 값을 넘겨받아서, 해당 배열의 값을 모두 출력하는 기능을 가지고 있습니다
  • int, char 타입 배열의 값을 각각 출력하는 메서드
public class ShowArray {
	void printArr(int[] arr) {
		for(int i=0; i<arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
	}
	void printArr(char[] arr) {
		for(int i=0; i<arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
	}
}

DataManager

public class DataManager {
	public static void main(String[] args) {
		Max max = new Max();
		int a = max.findMax(1, 1);
		double b = max.findMax(1.2, 1.3);
		System.out.println("int : " + a + ", double : " + b);
		
		Random r = new Random();
		ShowArray sa = new ShowArray();
		int[] arrI = new int[r.nextInt(10)+1];
		char[] arrC = new char[r.nextInt(10)+1];
		for(int i=0; i<arrI.length; i++) {
			arrI[i] = r.nextInt(10);
		}
		for(int i=0; i<arrC.length; i++) {
			arrC[i] = (char)(65+r.nextInt(26));
		}
		sa.printArr(arrI);
		System.out.println();
		sa.printArr(arrC);
	}
}

int : 0, double : 1.3
6 1 4 0 8
S D C W H H I A

profile
Fintech

1개의 댓글

comment-user-thumbnail
2023년 9월 3일

안녕^~^

답글 달기