안녕하세요! 쏘코입니다.

 

이번에는 직접 메소드를 구성하는 요소들을 살펴보고, 직접 만들어보도록 하겠습니다.

 

목차


    0. 메소드의 기본 형식

    이제 우리가 직접 메소드를 만들어봅시다.

     

    메소드는 클래스 내부의 요소중 하나였죠?

    그렇기 때문에, 클래스 내부에 생성됩니다.

    이 점만 미리 알고 있으면 아래 내용을 이해하는 데 도움이 됩니다!

     

    만약 -를 1번 출력하고 A를 2번 출력하는 코드를 1억번 반복해야 한다면, 총 3억번 반복해야겠죠?

    그걸 어느 세월에 합니까...

     

     

    이걸 우리는 메소드를 만들어서 보다 효율적으로 처리할 수 있습니다.

    main함수의 윗쪽에

    public static void printTwoTimesA(){}

    를 작성합니다.

    이 말은 public의 static 특징을 가진 void 데이터형을 반환하는 printTwoTimesA라는 메소드를 만들겠다는 이야기와 같습니다.

    그리고 중괄호의 안쪽에 "-", "A", "A"를 출력한다고 적어줍니다.

     

     

    이렇게 만들고 System.out.println() 3번 대신 printTwoTimesA() 1번을 넣어줍니다.

    코드가 엄청나게 간결해졌죠?!!

    코드를 이해하기도 쉽고, 만약 A 대신 다른 알파벳을 출력해야 한다면 1억 번 바꿀 필요 없이 2번만 바꾸면 나머지 전부가 바뀌게 됩니다.

    여러모로 엄청나게 효율성을 증가시킬 수 있겠죠?!

     

     

    좀 더 빠르게 메소드화 시킬 수 있는 방법도 존재합니다.

     

    반복되는 부분을 블록설정하고 오른쪽 단추를 누르고

    Refactor > Extract Interface에 들어가서 원하는 메소드 이름과 접근 권한(public / protected / package / private)을 성정하고 OK를 누르면 메소드가 만들어지고 코드가 메소드화됩니다.

    (접근 권한은 우선 public으로 하시고, 다다음 포스팅에서 추가로 말씀 드리겠습니다!)

    메소드를 만들어야할 때 아주 간편하게 사용할 수 있겠죠?!

     

     

    전체 코드와, 출력값입니다.

    코드가 길든 짧든 동일한 동작을 한다면, 되도록 간결하고 짧은 코드가 좋겠죠?!

     

    public class WhyMethod {
    
    	public static void printTwoTimesA() { // A를 두번 프린트한다!
    		System.out.println("-");
    		System.out.println("A");
    		System.out.println("A");
    	}
    	
    	public static void main(String[] args) {
    		// 1억번 반복된다고 생각!!
    		System.out.println("-");
    		System.out.println("A");
    		System.out.println("A");
    		// 1억번 반복된다고 생각!!
    		System.out.println("-");
    		System.out.println("A");
    		System.out.println("A");
    		// 1억번 반복된다고 생각!!
    		System.out.println("-");
    		System.out.println("A");
    		System.out.println("A");
    		
    		// 이렇게 3억번 반복하면 손해잖아!!
    		
    		// 1억번 반복!!
    		printTwoTimesA();
    		// 1억번 반복!!
    		printTwoTimesA();
    		// 1억번 반복!!
    		printTwoTimesA();
    		
    		// 1억줄의 코드가 1줄로 바뀌게 된 것!
    		// 모든 코드가 동시에 수정되어야 할 때 빠르게 수정 가능!
    		
    		// 선물 (리팩토링 기능 : 결과는 같은데 내용은 효율적)
    		// 블록설정 후 오른쪽 단추 누르고 Refactor의 Extract Interface를 누르면 쉽게 메소드 생성 가능!
    
    	}
    
    }

     


    1. 메소드의 입력

    위에서 만든 printTwoTimesA() 메소드를 조금 바꿔서 B가 출력되도록 하고 싶다면

    메소드 이름도 바꾸고, 내용도 바꿔줘야 합니다.

     

    전에 배웠던 Math.floor() 메소드가 괄호 안에 숫자를 넣으면 매번 다르게 동작했던 것처럼

    괄호 안에 다른 입력값을 입력할 때 다르게 동작하게 만든다면 조금 더 편리하겠죠?

     

    WhyMethod 클래스에서 만들었던 printTwoTimesA() 메소드를 조금 바꿔봅시다.

     

     

    메소드의 소괄호 안에 String text가 들어갔죠?

    이 말은 메소드를 사용할 때 매개변수로 text라는 String형태의 데이터를 받겠다는 의미이기도 하고,

    동시에 메소드 내에서 받아온 데이터를 text라는 이름으로 사용하겠다는 의미이기도 합니다.

     

    만약 구분자도 바꾸고 싶다면 어떻게 하면 될까요?

    콤마(,)로 구분된 매개변수를 2개 받으면 됩니다.

    "-"가 기본이었던 기본자도 사용자로부터 받아올 수 있도록 만들어줍니다.

    delimiter라는 이름으로 받아온 값은 메소드 내에서 delimiter라는 이름으로 사용할 수 있습니다.

     

     

    main 메소드 내에서 사용할 때에는 괄호 안에 String변수를 순서대로 2개 넣어주면 되겠죠?!

     

    public class WhyMethod {
    
    	public static void printTwoTimes(String text, String delimiter) {
    		System.out.println(delimiter);
    		System.out.println(text);
    		System.out.println(text);
    	}
    	
    	public static void main(String[] args) {
    
    		// 1억번 반복!!
    		printTwoTimes("a", "-");
    		// 1억번 반복!!
    		printTwoTimes("a", "*");
    		// 1억번 반복!!
    		printTwoTimes("a", "&");
    		// 1억번 반복!!
    		printTwoTimes("b", "!");
    		
    
    	}
    
    }

     

    전에 뜻도 잘 모르고 사용했던 main함수의 String[] args라는 매개변수가 이제는 이해가 될 수 있겠죠?

    Run Configuration > arguments에 넣은 값들이 디버그 메뉴에서 args라는 배열 안에 들어갔다는 것을 디버거 포스팅에서 공부했었습니다.

    사용자로부터 입력값을 받아서 그 값들을 배열 안에 넣어서 main 함수 내에서 args라는 배열로 사용하겠다는 의미가 되는 것입니다!!

     

    이제는 이해가 되는 이녀석

     

    마지막으로 용어정리를 하면 메소드에서 소괄호 안에 넣어야 하는 값을 우리는 매개변수(parameter)라고 부르고,

    사용할 때 소괄호 안에 넣는 값인자(argument)라고 부릅니다.

     


    이번 포스팅에서 다룬 내용은 매우매우매우 중요하고 자주 사용되는 내용이니,

    여러분의 편한 프로그래밍을 위해서 반드시 이해하고 넘어가주시면 감사하겠습니다!!

     

    다음 포스팅에서는 메소드의 결과로 어떤 값을 반환하는 메소드의 출력과

    지금까지 배운 내용을 바탕으로 메소드를 활용하는 것을 다뤄보도록 하겠습니다!!

     

    오늘도 읽어주셔서 감사합니다 :)

     

    반응형
    • 네이버 블로그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기