
메서드 ( method )
반환타입
- 메서드의 실행이 종료되면서 호출부로 돌아갈 때 보내지는 값의 자료형
- 기본 자료형, 참조 자료형, 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
받은 문자열 : 시작
종료
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
코드를 보는데 머리로 이해가 잘 안되면 그려보자
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
- 메서드 실행 중 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 를 선택
ㅅㄱ
이름, 나이, 성별, 키를 입력받아서 반환하는 각각의 메서드를 구현하세요
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");
}
// #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개를 각각 초기화 합니다
두개의 변수를 사용해서, 두수 중 큰수를 찾아서 반환하는 메서드를 구현하세요
- 변수에 들어가는 값은 1 이상의 값만 가능하고, 같은 값이면 0 을 반환합니다
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);
// #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
- 생성하려는 숫자(정수) 범위의 시작, 마지막 값을 넘겨 받아서,
- 해당 범위의 랜덤값을 반환하는 메서드를 구현하세요
int rv = rangeRandom(random,1,10);
System.out.println("rv : " + rv);
// #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
- 아래의 배열에 한번에 같은 값이 들어갈때까지 진행하는 메서드를 구현하세요
- 값 : 1 ~ 5
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] + " ");
}
// #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
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;
}
}
객체 지향 프로그램 ( OOP : Object Oriented Programming )
class
객체 ( Object )
class 구성
하나의 파일에 여러 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달려잇!
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);
}
}
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
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();
}
}
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원
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();
}
}
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
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 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 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] + " ");
}
}
}
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
안녕^~^