0. 메소드 3요소 : Return type, Method name, Parameter

 

1. 메소드의 접근

 1) Member Method, Instance Method : 멤버변수와 같은 개념

 2) Class Method, Static Method : 클래스변수와 같은 개념

 public class MethodTest{
 public static void main(String[] args) {
  MethodTest mt = new MethodTest();
  mt.display();
  display2();
  SubTest st = new SubTest();
  st.display3();
  SubTest2.display4();
 }

 void display(){  //Member Method, Instance Method
  System.out.println("Hello, World");
 }
 static void display2(){ //Class Method, Static Method
 System.out.println("Hello, World2");
 }
}

class SubTest{
 void display3(){  //Member Method, Instance Method
  System.out.println("Hello, World3");
 }
}

class SubTest2{
 static void display4(){  //Member Method, Instance Method
  System.out.println("Hello, World4");
 }
}

 

2. Method 호출

 1) Call by value

 public class MethodTest1{
 public static void main(String[] args) {
  int result, a, b; //argument
  a=10; b=50; 
  result = hap(a,b); 
  display(a,b,result);
  a=1; b=5;
  result = hap(a,b); 
  display(a,b,result); 
 }
 static void display(int a, int b, int result){
  System.out.println(a+"부터"+b+"까지합="+result);
 }
 static int hap(int start,int last){//parameter
  int sum = 0;
  for(int i=start ; i<=last ; i++ ){
   sum += i;
  }
  return sum;
 } 
}

 1. 합계를 출력하는 메소드에

시작값과 끝값의 입력을 받아 

각각 다른 결과값을 가져올 수 있다.

 2. 출력 메소드 역시 입력값에 따라 다른 출력을 가져올 수 있다.

 

 3. Call by value는 Value type이 대상이기 때문에 값복사를 하며, 별도의 공간 2개가 따로 만들어진다. 상대방에게 영향을 주지 않는다.

 

 2) Call by Reference

 public class MethodTest2{
 int a, b;
 public static void main(String[] args) {    
  MethodTest2 mt2 = new MethodTest2();
  mt2.a = 5; mt2.b=9;
  System.out.println("mt2.a="+mt2.a+"mt2.b="+mt2.b);  
  swap(mt2);
  System.out.println("mt2.a="+mt2.a+"mt2.b="+mt2.b);
 }
 static void swap(MethodTest2 mt){
  int tmp;
  tmp = mt.a; mt.a=mt.b; mt.b=tmp; 
 }
}

  생성자의 변수로 주소값을 넘겨준다.

 public class MethodTest3{
 public static void main(String[] args) {  
  int [] array = method();
  System.out.printf("%d, %d",array[0],array[1]);
 }
 static int[] method(){
  int[] array ={5,6};
  return array;
 }
}

  배열로 받는 방법.

 

 3)Varargs (Variable Arguments)

public class MethodTest4{
 public static void main(String[] args) {
  method(1,2,3,3,"string",'A',false);  //아무거나 넣어도 된다.
 }
 static void method(Object ... array){
  for (Object obj : array ){   
   System.out.print(obj + "\t");   
  }
 }
}

 

 Variable Arguments :  

 메소드에 인자값을 다양하게 (갯수/형) 주어도 메소드에서 입력받을 수 있다.

 배열처럼 사용하지만 배열이 아니라는의미인

... 을 사용하여 모든 형을 Object로 받는다.

 

 4) Recursive Methods (재귀 함수)

  - 굳이 반복문으로 표현 할 수 있는 것을 재귀함수로 사용하지말자. (메모리 사용량 증가)

 

 5) Method Overloading(오버로딩) (메소드 중복정의) //오버라이딩이랑 다르다.

  - 메소드의 이름이 같아도 입력 parameter가 다르면 사용 할 수 있다.

 public class MethodTest6{
 public static void main(String[] args) {
  display();
  display(3);
  display(3,5);
  display(3.4);
 }
 static double display(double a){  return 1.2;}
 static void display(int a){}
 static char display(int a, int b){ return 'A';}
 static void display(){}
}

 

 6) static Methods

  - 생성자 없이 클래스명으로 접근하기위해서

  - 왜 main ()는 static인가? : 생성자 없이 바로 main()를 실행하기 위해서.

 

 

 

ps-------------------------------------

-return 은 메소드의 끝을 의미하며, 그 뒤에는 문장이 올 수 없다. 하지만 조건문 속에서는 가능하다.(조건적 return)

 static void exampleMethod( ){
intsu;
//...
System.out.println("Hello");
if (su< 10)
return;
System.out.println("World");
}

 

-String 은 Call by value의 예외이다. (값을 바꿀 수 없다)

+ Recent posts