본문 바로가기
JAVA

JAVA 메소드(Method) 개념과 사용 방법

by 윈투 2022. 4. 10.

 

자바 프로그램에서 가장 먼저 접하게 되는 메소드

 

JAVA를 배우기 시작하면서 사실은 메소드를 접하게 된다. 그 메소드의 이름은 main()이다. 수업이나 책에서도 바로 메소드의 개념을 전하면 배운는 사람이 부담스러울 것 같아서 그냥 우선은 사용해 보라고 하지만 main은 분명 메소드이다.

 

 

자바 프로그램의 시작은 main 이라는 이름의 메소드를 실행하는 데서 부터 시작한다.

Method의 중괄호 내에 존재하는 문장들이 위에서 아래로 순차적으로 실행.

class FirstProgram {

  public static void main(String[] args){
     System.out.println("Welcome to Java");
  }

}

 

main메소드 이외에소 개발자가 직접 정의해서 메소드를 사용할 수 있다.

메소드는 반환을 하지 않거나 하나의 값만 반환을 한다

 

package com.model;

package com.model;

public class MethodDef {
        
         //매개변수 파라미타= (int num1, int num2), 메소드에 쓰이는 변수 역시 메소드 여역 안에서만 적용되고 그 이외의 지역에서는 할당된 영역이 삭제된다.
         //똑같은 이름으로 method를 정의할 수는 없다, 반드시 메소드는 클래스 안에 있어야 한다.
         //method는 기능을 정의하는 것이다. 기능을 필요할 때마다 빼서 쓸 수 있게 만드는 것이다.
         //while, if 등은 java가 이름을 부여해준 키워드였고 색깔이 변하는 것이 다르다. 
         //()는 입력을 넣어주는 부분이다. 그 부분에 변수를 선언해주면 된다. 
         //두 개 이상의 값이면 괄호 안에 컴마로 지정을 해준다.
         //개수는 제한이 없지만 많아도 5~6개를 쓰는 게 일반적이다.    
         public static int plus( int num1, int num2 ){   
           
     
                
                 int result;                                                                                           //int 타입으로 반환하겠다고 해서 메소드 이름 앞에 int를 쓴다. 내가 전달하고자 하는 데이터의 자료형을 적어 준 것이다.
       
                 result= num1 + num2;
                 
                 //값을 전달해주고 있는 것이다. 지금은 변수가 와 있지만 상수도 올 수 있고 연산식도 올 수 있다. 
                 //만나면 그 이하의 명령문이 아무리 많아도 벗어나서 호출한 자리로 벗어난다. 값을 반환할 수도 있고 벗어날 수도 있다는 두 가지 기능으로 쓰인다. 
                 //return 단독으로도 쓰인다. 
                 return result;
                        
                 //매개변수= 파라미터,  매서드를 호출하면서 전달하는 데이터는 인자라고 부른다.
                
                 //int num1, num2;
                 //num1 =20;
                 //num2 =30;
                
                 //System.out.println(num1+num2);

}

         public static void minus( int num1, int num2){ //method는 반드시 클래스 안에 위치해야 한다. 무엇인가에 대한 기능을 정의 한 것이다.
                 //method의 순서는 상관이 없다. 클래스 영역 안에만 위치하면 된다. 
                 //그것이 java의 약속인다. 반환할 타입이 없을 때는 앞에 void를 쓴다.
                 //int num1, num2;
                 //num1 =50;
                 //num2 =20;
                
                System. out.println( num1- num2);
}
        
         public static void divide( int num1, int num2){  //전달할 값이 없을 때 void라고 쓴다.
                 if( num2==0){
                        
                        System. out.println( "0으로 나눌 수 없습니다" );
                         return; //메서드를 수행한 다음에 메소드를 수행한 쪽을 값을 전달한다. 메서드 안에서 사용할 때 2가지 의미를 가진다. 1. 값을 반환한다. 2. 현재 매서드를 벗어나서 나를 호출해 준 쪽으로 이동하라는 의미를 가지고 있다.
                
                }
                
                System. out.println( "num1/num2=" +( num1/ num2));
        }

         public static void main(String[] args){  //메인은 JVM이 호출하는 method이다. 같은 클래스에서 정의된 메소드는 메인 안에서 호출에서 쓸 수 있다.
        
                 int num1 = 40, num2 = 50; //이렇게 변수를 선언하고 변수를 매서드 값으로 넣을 수도 있다.
                 int result = plus(num1 , num2 );  //위에서 정한 자료 형식이나 개수를 맞추어서 호출을 해야 한다. return에 의해서 돌아오고 난 다음에는 50이 있는 것처럼 작동한다.
                
                System. out.println( "result="+ result);
                
                 minus(70,20);  //하나의 기능을 정의해 두면 언제든 다시 불러서 쓸 수 있다. //코드의 가독성을 높여준다.
                 plus(100, 500);   
                
                 divide(12,6);
                 divide(2,0); //영으로 나누기는 할 수 없다. 0으로 나누면 에러가 난다.
                
                
        }
        
        
}

//계산기라는 것 중 더하기와 뻬기 기능을 두고 정의를 해보고 있다.
 
result=90
50
num1/num2=2
0으로 나눌 수 없습니다
 

 

변수는 CPU에서 명령을 내려주기 위해서 JVM에 명령을 내려주려고 하는데 그러기 위해서는 CPU가 참고할 수 있는 데이터를 메모리에 담아야 한다.


그렇게 하기 위해서 메모리의 데이터 저장 공간 할당을 요청하고 그 내용을 참조할 수 있도록 하기위해서 선언하는 것이다.

하지만 지금까지 배운 8개의 기본 자료형만 보면 하나의 글자, 실수, 정수, true,false 형으로만 표현할 수 있는 것은 너무 한계가 있다.


이것보다 조금 더 긴 형태의 문자들을 넣을 수 있는 방식의 자료형이 String이다. 여기서 앞의 S가 대문자라는 것을 기억하자.


String을 잘 이해하기 위해서는 객체지향을 잘 알아야 한다.

 

 

 

package com.model;

public class LocalVariable {
        
         public static void main(String[] args){
                 boolean scope = true;
                 //int num = 10; //역시 메인 메서드 영역 안에서 유효한 변수이다. 이렇게 main에서 선언을 하면 이전에 num을 선언하면 겹쳐지기 때문에 에러 메시지가 쓰이게 된다. main 안의 다른 조건문, 반복문 등의 영역 안에도 영향을 미친다.{}가 영역의 범위를 의미한다.  
                
                 //System.out.println(count); 위에서부터 순차적으로 실행이 되기 때문에 에러를 낸다. 선언한 이후에 변수를 사용할 수 있다.
                
                 int count=10;
                
                 if( scope){
                         int num = 1;
                         //int num = 3;  //변수는 같은 이름으로 선언을 할 수 없다.
                         num++;
                        System. out.println( num);
                } else{
                         int num = 5; //위의 변수와 같은 이름인데 에러가 나지 않고 있다. if(){}의 영역을 벗어났기 때문에 다시 선언을 할 수 있따. if 영역과 else 영역은 분리되어 있다. if영역 안에서 선언된 변수는 if 영역 안에서만 영향을 미친다. 영역을 벗어나면 변수로 할당되었던 공간을 지워버린다.메모리의 효율성을 위해서 그렇게 한다.   
                         num++;
                        System. out.println( num);
                        
                }
                
                 //System.out.println(num ); 영역을 벗어나서 num 을 선언한 적이 없다는 에러 메시지를 보여준다. 로컬 변수, 지역 변수, 로컬 베리어블라는 이름으로 이 부분을 칭하고 있다.
                
                 simple(); //아무것도 전달하지 않기 때문에 호출할 때도 메소드 이름으로만 호출이 된다.

                
        }
        
         public static void simple(){  //다른 영역의 num과 겹쳐서 에러가 나지 않는다. 메소드 역시 자신의 영역을 가지고 있고 num은 로컬 베리어블로 작용하고 있따.
                 int num = 3;
                
                System. out.println( num);
        }

}

 

실행 결과

2
3

 

 

 

package com.model;

public class ScopeVariable {
        
         public static void main(String[] args){
                 boolean scope = true;
                 if( scope){
                         int num= 1;
                         num++;
                        System. out.println( num);
                } else{
                         int num= 2;
                        System. out.println( num);
                }
                
                 simple();
                
                
        }
         public static void simple(){  //()안에 들어가는 값이 없을 때 int 형을 앞에 지정해주면 에러가 난다. 그래서 ()값이 없을 때는 void를 붙여 주어야 한다.
        
                 int num= 3;
                System. out.println( num);
                
        }

}

 

실행 결과

2
3

 

 

 

 

댓글