<method 함수>
복잡한 것을 정리해서 다시 단순하게 만드는 도구
연관된 코드를 모아서 그룹핑하고 이름을 붙인것
<익숙한 method>
public class FirstMethod {
public static void main(String[] args) {
System.out.println("Hello Method");
System.out.println(Math.floor(1.1));
}
}
println은 입력값을 모니터에 출력해주는 method
math 라는 class 안에 소속되어있는 floor()는 입력값을 받아 내림해서 출력해주는 method
main 이라는 이름의 method
java 앱을 만들때는 class를 만들고 그것을 실행시킬때는 main이라는 method를 사용함
<Method의 기본 형식>
public class WhyMethod {
public static void main(String[] args) {
// 코드 100000000줄
System.out.println("-");
System.out.println("A");
System.out.println("A");
// 100000000
System.out.println("-");
System.out.println("A");
System.out.println("A");
}
}
원래 이렇게 1억줄을 써야되는 코드인데
public class WhyMethod {
public static void printTwoTimesA() {
System.out.println("-");
System.out.println("A");
System.out.println("A");
이렇게 method를 정의를 해주면
public class WhyMethod {
public static void printTwoTimesA() {
System.out.println("-");
System.out.println("A");
System.out.println("A");
}
public static void main(String[] args) {
// 코드 100000000줄
printTwoTimesA();
// 코드 100000000줄
printTwoTimesA();
// 100000000
printTwoTimesA();
}
}
이렇게 간단하게 정리할 수 있다
public class WhyMethod {
public static void main(String[] args) {
// 코드 100000000줄
System.out.println("-");
System.out.println("A");
System.out.println("A");;
// 코드 100000000줄
System.out.println("-");
System.out.println("A");
System.out.println("A");
// 100000000
System.out.println("-");
System.out.println("A");
System.out.println("A");
}
}
더 빠르게 하려면 이 상태에서 반복되는 코드를 refactor>extract Method (Alt+Shift+M) 를 통해
public class WhyMethod {
public static void main(String[] args) {
// 코드 100000000줄
printTwoTimesA();
// 코드 100000000줄
printTwoTimesA();
// 코드 100000000줄
printTwoTimesA();
}
public static void printTwoTimesA() {
System.out.println("-");
System.out.println("A");
System.out.println("A");
}
}
이렇게 똑같은 결과를 만들어줄 수 있다
<Method의 입력값>
public class WhyMethod {
public static void main(String[] args) {
// 코드 100000000줄
printTwoTimesA();
// 코드 100000000줄
printTwoTimesA();
// 코드 100000000줄
printTwoTimesA();
printTwoTimesB();
}
public static void printTwoTimesA() {
System.out.println("-");
System.out.println("a");
System.out.println("a");
}
public static void printTwoTimesB() {
System.out.println("-");
System.out.println("b");
System.out.println("b");
}
}
이렇게 비효율적으로 하려면 시간이 많이 드니
public class WhyMethod {
public static void main(String[] args) {
// 코드 100000000줄
printTwoTimes("A");
// 코드 100000000줄
printTwoTimes("a");
// 코드 100000000줄
printTwoTimes("a");
printTwoTimes("b");
}
public static void printTwoTimes(String text) {
System.out.println("-");
System.out.println(text);
System.out.println(text);
}
}
아예 method 를 만들때 data type이 문자열(String)이고 text 라는 변수값이 들어가면 된다고 정의하면 훨씬 간편한 코드를 짤수 있다
public class WhyMethod {
public static void main(String[] args) {
//인자(arguments) e.g.)"a", "b", "-"
printTwoTimes("a","-");
// 코드 100000000줄
printTwoTimes("a","*");
// 코드 100000000줄
printTwoTimes("a","&");
printTwoTimes("b","!");
}
//매개변수(parameter) e.g.)text, delimiter
public static void printTwoTimes(String text, String delimiter) {
System.out.println(delimiter);
System.out.println(text);
System.out.println(text);
}
}
이렇게 하면 구분자(delimiter) 도 동시에 처리 가능
*매개변수(parameter): method를 밖에서 주입한 것을 method 안으로 보내주는 매개자 e.g.)text, delimiter
*인자(arguments): 함수 안으로 넣은 구체적인 값 e.g.)"a", "b", "-"
<method의 출력>
public class OutputMethod {
public static String a() {
//...
return "a";
}
public static int one() {
//...
return 1;
}
public static void main(String[] args) {
System.out.println(a());
System.out.println(one());
}
}
1. method의 return 값 뒤에 있는 값이 실행결과다.
2. return 값은 method를 종료시킨다.
3. return 값의 data type 이 뭔지 정의해줘야 한다. *void-리턴 값이 없음
public class WhyMethod {
public static void main(String[] args) {
//인자, argument
printTwoTimes("a","-");
System.out.println(twoTimes("a", "-"));
// 코드 100000000줄
printTwoTimes("a","*");
// 코드 100000000줄
printTwoTimes("a","&");
printTwoTimes("b","!");
}
public static String twotimes(String text, String delimiter) {
String out = "";
out = out + delimiter + "\n";
out = out + text + "\n";
return out;
}
//매개변수, parameter
public static void printTwoTimes(String text, String delimiter) {
System.out.println(delimiter);
System.out.println(text);
System.out.println(text);
}
}
여기에서
public class WhyMethod {
public static void main(String[] args) {
printTwoTimes("a","-");
System.out.println(twoTimes("a", "-"));
이 두개는 같은 코드지만
밑에는 출력 기능을 빼고 return 값을 갖기 때문에 아래 예시와 같이 여러곳에서 사용 가능하다
import java.io.FileWriter;
import java.io.IOException;
public class WhyMethod {
public static void main(String[] args) throws IOException {
System.out.println(twoTimes("a", "-"));
FileWriter fw = new FileWriter("out.txt");
fw.write(twoTimes("a","*"));
fw.close();
// Email.send("eoging@a.com", "two times a", "twotimes("a", "&"));
// 위는 이메일을 보내는 코드가 있다고 가정할때
}
public static String twoTimes(String text, String delimiter) {
String out = "";
out = out + delimiter + "\n";
out = out + text + "\n";
out = out + text + "\n";
return out;
}
}
<method의 활용>
public class AccountingApp {
public static void main(String[] args) {
//공급가액
double valueOfSupply = 10000.0;
//부가가치세율
double vatRate = 0.1;
//부가세
double vat = valueOfSupply*vatRate;
//합계
double total = valueOfSupply + vat;
System.out.println("Value of supply : "+valueOfSupply);
System.out.println("VAT : "+vat);
System.out.println("Total : "+total);
}
}
예시 double vat = valueOfSupply*vatRate; 라는 코드는 간단하지만, 이 코드가 1억 줄이라고 가정을 하면 너무 복잡함.
그리고 이것이 1억군데서 쓰이고 있는데 버그가 생긴다면 쓰이고 있는 부분마다 가서 일일이 수정을 해야됨.
이 코드를 method로 지정해주면 어떤 코드인지 명확하게 알려주고 일처리를 쉽고 빠르게 할수 있음.
//부가세
double vat = valueOfSupply*vatRate;
// double vat = getVAT();
//합계
double total = valueOfSupply + vat;
// double total = getTotal();
이렇게 정의하려고 함
public class AccountingApp {
public static void getVAT() {
return valueOfSupply*vatRate;
}
public static void getTotal() {
return valueOfSupply + vat;
}
public static void main(String[] args) {
getVAT()와 getTotal()을 정의해주고
public class AccountingApp {
//공급가액
public static double valueOfSupply = 10000.0;
//부가가치세율
public static double vatRate = 0.1;
public static double getVAT() {
return valueOfSupply*vatRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static void main(String[] args) {
getVAT()와 getTotal()앞에 있던 void를 double 로 바꿔주면서 출력값의 data type이 double 형임을 알려줌
main 안에 있던 지역변수 valueOfSupply 와 vatRate 를 AccountingApp과 main 사이로 가져와 앱 전체에서 쓰일수 있도록 하고 public static을 붙여줌
vat를 getVAT()로 바꿔줌
public class AccountingApp {
//공급가액
public static double valueOfSupply = 10000.0;
//부가가치세율
public static double vatRate = 0.1;
public static double getVAT() {
return valueOfSupply*vatRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static void main(String[] args) {
//부가세
// double vat = valueOfSupply*vatRate;
double vat = getVAT();
//합계
// double total = valueOfSupply + vat;
double total = getTotal();
System.out.println("Value of supply : "+valueOfSupply);
System.out.println("VAT : "+vat);
System.out.println("Total : "+total);
}
}
이런 결과가 나오고 최종적으로 더 이상 필요없는 부분까지 지워주면
public class AccountingApp {
public static double valueOfSupply = 10000.0;
public static double vatRate = 0.1;
public static double getVAT() {
return valueOfSupply*vatRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static void main(String[] args) {
System.out.println("Value of supply : "+valueOfSupply);
System.out.println("VAT : "+getVAT());
System.out.println("Total : "+getTotal());
}
}
이렇게 나옴.
method를 이용하면
1. 코드의 가독성을 획기적으로 높일수 있고
2. 한번 작성한 코드를 method로 호출하면 되기 때문에 재사용할수 있고
3. 본문에 있는 method를 수정하면 앱 내의 모든 곳에 동시에 적용이 됨
'입문 > 생활코딩' 카테고리의 다른 글
JAVA - 제어문 (0) | 2022.12.07 |
---|---|
JAVA (0) | 2022.11.27 |
WEB1-HTML & Internet (0) | 2022.11.23 |