[Java] Method - Instance ,Static,Variable 및 4가지 형태

메소드

 

*method ()

 - (업무)을 구분하여 정의하기위해서.

 - 중복코드를 줄일 수 있다.

 - 호출하여 정해진 일을 수행한다.

 - instance method, static method 두 가지로 정의할 수 있다.

작성법)

 1. method정의)

  접근지정자  반환형  method( 매개변수,,,,,,, ){

 }

 

2.호출)

 

   -static method

      클래스명.method( ,,, );

   -instance method

     객체화)

        클래스명 객체명=new 클래스명();

     객체를 사용한 호출)

     객체명.method( ,,, );

 

*static method

 - 객체화 없이 호출하여 사용하는 method.

 - instance variable에 저장된 값을 사용하지 않고, 업무를 처리해야하는 경우.

        instance variable -객체가 가지고 있는 값을 사용하지 않는다.

       -parameter로 전달되는 값이나  static 변수에 있는 값을 사용하여 일처리.

 

public : 클래스 외부에서 호출가능.

protected : 같은 패키지의 다른 클래스에서 호출가능.

               패키지가 다르면 상속관계의 자식클래스에서만 호출가능.

default : 접근지정자를 기술하지 않는다.

            같은 패키지의 다른클래스에서 호출가능.

            패키지가 다르면 자식클래스에서도 호출할 수 없다.

private : 클래스 내부에서만 호출가능.

final : Override 방지

static : 객체화없이 method를 직접 호출해서 사용.

synchronized : 동기화 처리

 

 작성법)

   1.선언)

    public static void method( 매개변수,,,,, ){

         업무로직 정의        

    }

  2.호출)

     클래스명.method( ,,,, );

ex)

*두개의 정수를 입력받아서 더한 값을 콘솔에 출력하는 일.

public class  Operator{

    //1.method정의

    public static void plus( int num, int num2){

       int result=0;

       result= num+num2;

       System.out.println( num+” + “+ num2+ “ = “ + result);

    }

 

   public static void main(String[] args){

     //2. 호출

    Operator.plus( 1, 2 );

   }

}

package day0122;

 

/**

* static method : 객체화 하지 않고 클래스명으로 직접 호출할 수 있는 method<br>

* 객체가 가지고 있는 값을 사용하지 않고, parameter로 입력되는 값이나 static 변수에 입력된<br>

* 값으로 업무를 구현해야할 때 사용함

*/

public class UseStaticMethod {

 

// public static int dayOfMonth=22;

 

/**

* 콘솔에 메시지를 출력하는 일

*/

// public static void printMessage() {

// System.out.println("안녕하세요? 오늘은 " +dayOfMonth + "일 입니다.");

// }//printMessage

 

/**

* 두개의 정수를 입력받아서 더한 값을 콘솔에 출력하는 일.

*/

public static void printNumber(int number, int number2) {

int result=0;

result = number+number2;

System.out.println(number +" + "+ number2 + " = " + result);

}//printNumber

 

public static void main(String[] args) {

//호출

UseStaticMethod.printNumber(1,2);

}

 

}//class

콘솔 출력

1 + 2 = 3

 

*instance method

 - instance variable, static variable, local variable, parameter 사용하여

  업무를 처리할 때. ( 객체가 가지고 있는 값을 사용하여 업무를 처리할 때 )

-객체화 후 사용.
-

사용법)

1.method 정의)

   public void method(매개변수,,,){

     업무 구현

   }

2.객체생성)

   클래스명 객체명=new 클래스명();

3.호출)

  객체명.mehod( ,,,, );

package day0122;

 

/**

* Instance Method 사용 <br>

* Instance variable, static variable, local variable, parameter를 사용하여 업무를 처리할 때 정의

*/

public class UseInstanceMethod {

 

int dayOfMonth;

 

/**

* Instance 변수를 사용하여 콘솔에 일자를 출력하는 일

*/

public void printDay() {

System.out.println(dayOfMonth + "일");

}

//prinDay

 

public static void main(String[] args) {

// printDay(); //static영역에서는 instance영역의 자원을 직접 사용할 수가 없다

 

//객체화) 클래스명 객체명=new 클래스명() ;

UseInstanceMethod uim=new UseInstanceMethod();

//호출 )

uim.printDay();

uim.dayOfMonth=22;

uim.printDay();

 

uim.dayOfMonth++;

uim.dayOfMonth++;

uim.printDay();

 

//인스턴스 변수는 객체마다 같은 이름의 변수가 생성되고 사용된다 (객체마다 따로 생성)

UseInstanceMethod uim2=new UseInstanceMethod();

uim2.dayOfMonth=31;

 

 

uim2.printDay();

uim.printDay();

 

}//main

 

}//class

콘솔 출력

0일

22일

24일

31일

24일

 

*method4가지 형태

  고정일, 가변일, 고정값, 가변값

 

1.고정일 반환 값 없고, 매개변수 없는 형.

  -항상 같은 일을 수행한다.

  public void typeA(){

   //: 입력 값이 없으므로 항상 같은 일을 수행.

  }// 호출한 곳으로 돌아가!!

 호출)

   객체명.typeA();

 

2.가변일 반환 값 없고, 매개변수 있는 형.

  public void typeB( int i ){

   //매개변수를 사용한 일 => 매개변수에 따라 다른 일을 수행 => 가변 일.

    //22를 사용하여 업무를 처리, 23을 사용하여 업무로직 처리

  }//호출한 곳으로 돌아가!!!

호출) – method의 매개변수의 개수와 데이터 형이 일치해야 한다.

   객체명.typeB( 22 );

   객체명.typeB( 23 );

 

*값으로 사용하는  method

 -method의 가장 마지막 줄에 반드시 return 이 나와야한다.

  return 사용법)

    return ;

 

3.고정 값 반환형 있고, 매개변수 없는 형.

    public int typeC(){

      //=> 결과

      return 21;

    }

   호출)

   데이터형 변수명=객체명.typeC();

   int i=객체명.typeC(); // int i=리턴값;

 

4.가변 값 반환형 있고, 매개변수 있는 형.

    public int typeD(double d ){

       //

       return (int)d;

    }

 호출)

         int 변수명=객체명.typeD(1.22);

 

특수문자         기능                                  사용법

\n 줄 변경 문자열 \n문자열
\r return 커서를 해당 줄에 가장 앞으로 이동.
(Windows에서는 줄을 변경 )
\t Tab 출력 문자열 \t문자열
\’ 홑 따옴표 출력 문자열 \’문자열\’ 문자열
\” 쌍 따옴표 출력 문자열 \”문자열\” 문자열
\\ \ 문자열 \\문자열 문자열” –   Windows애서 경로를 표현할 때 사용
\b backspace 문자열\b”
\f 프린터의 한줄 변경 문자열\f문자열

package day0122;

 

/**

* method 의 4가지 형태.

*/

public class MethodType {

 

/**

* 고정일 - 항상 같은 일을 수행한다. <br>

* 반환 값 없고, 매개 변수도 없는 형

*/

public void typeA() {

System.out.println("고정일");

}//typeA

 

/**

* 가변일 - 입력하는 값에 따라 변환

* @param 반환 값

*/

public void typeB(int param) {

System.out.println("가변일 : " + param);

}//typeB

 

/**

* 고정값 - 항상 같은 값을 반환

* 반환 값 없고, 매개 변수 없는 형

* @retrun 올해

*/

public int typeC() {

int year=2025;

return year;

}//typeC

 

/**

* 가변 값 - 반환 형 있고, 매개변수 있는 형.

* @param d 실수의 입력 값

* @return 정수로 변환 된 값

*/

public int typeD(double d) {

 

return (int)d;

}//typeD

 

public static void main(String[] args) {

 

//객체화 : 클래스명 객체명=new 클래스명 ();

MethodType mt=new MethodType(); //객체명 mt

//method 호출

System.out.println("-----------고정일 호출------------");

mt.typeA();

System.out.println("-----------가변 일 호출------------");

mt.typeB(23);

mt.typeB(23);

System.out.println("-----------고정값 호출------------");

mt.typeC();

//반환형이 있는 method는 값이므로 사용(출력,연산,재할당)을 해야함

System.out.println("출력 : " + mt.typeC() );

System.out.println("연산 : " + mt.typeC()+1 );

int i=mt.typeC();

System.out.println("재할당된 값 : " +i);

System.out.println("-----------가변 값 호출------------");

mt.typeD(2025.1);

System.out.println("출력 : " +mt.typeD(1.22));

System.out.println("연산 : " +(mt.typeD(2025.01))+1);

i=mt.typeD(3.16);

System.out.println("재할당 된 값 : " +i);

 

}//main

 

}//class

콘솔 출력

-----------고정일 호출------------

고정일

-----------가변 일 호출------------

가변일 : 23

가변일 : 23

-----------고정값 호출------------

출력 : 2025

연산 : 20251

재할당된 값 : 2025

-----------가변 값 호출------------

출력 : 1

연산 : 20251

재할당 된 값 : 3

 

*Variable Arguments ( 가변 인수 )

- method parameter는 하나이지만, 입력되는 값이 동적일때.
- JDK1.5에서부터 지원되는 기능.
- System.out.printf(), System.out.format()에 적용.
- 매개변수가 여러 개 정의될때 V.A는 가장 마지막에만 기술 할 수 있다.
- V.A method안에 배열로 처리된다.
-

문법)

   데이터  매개변수명

사용법)

 1. method 선언)

   public void method(  데이터  매개변수명 ){

   

     //V.A의 매개변수명은 배열로 처리된다.

     // 배열이 들어오면 반복문을 사용하여처리

   }

 2. 호출)

  - 일반 method parameter의 데이터형과 개수를 맞춰서 호출해야한다.

  - V.A는 데이터형만 일치한다면 개수는 상관 없음.

    객체명.method();

    객체명.method( 1 );

    객체명.method( 1, 2, 3, 4, 5 , 6 );

 

*매개 변수가 여러 개 정의된 경우  V.A가장 마지막에서 정의할 수 있다.

public void test( int i, int … j  ){

public void test(int … j , int i ){ //error

public void test( int , int … j , String s ){ //error

*Escape Character ( 특수문자 )

 -문자열 안에서 사용하는 기능을 가진 문자.

 - \ 시작하는 한글자 (\n)

 - 제공되는 특수문자 이외의 문자를 사용하면 error 가 발생한다.

문법)

 “\문자

 

*매개 변수가 여러 개 정의된 경우  V.A가장 마지막에서 정의할 수 있다.

public void test( int i, int … j  ){

public void test(int … j , int i ){ //error

public void test( int , int … j , String s ){ //error

*Escape Character ( 특수문자 )

 -문자열 안에서 사용하는 기능을 가진 문자.

 - \ 시작하는 한글자 (\n)

 - 제공되는 특수문자 이외의 문자를 사용하면 error 가 발생한다.

문법)

 “\문자

 

package day0122;

 

/**

* JDK1.5에서 부터 지원되는 Variable Arguments의 사용<br>

* 매개변수는 하나이지만 인수 (입력값 (argument)를 여러개 넣을 수 있는 기능.)

*/

public class UseVariableArguments {

 

/**

* V.A의 사용

* @param va 정수의 값을 몇개든 입력할 수 있다.

*/

public void vaMethod(int ...va) {

//V.A는 배열로 처리된다.

System.out.println(va);

for(int i=0 ; i < va.length; i++) {

System.out.println(va[i]);

}//end for

}//vaMethod

 

public void va2( int i, int ...j ) {

 

}

public void va3( int i, char c, int...j ) {

 

}

//V.A는 가장 마지막에만 정의해야한다.

// public void va4(int ...i, int j) {

// }

 

public static void main(String[] args) {

//객체화 ) 클래스명 객체명=new 클래스명();

 

UseVariableArguments uva=new UseVariableArguments();

//V.A를 가지고 있는 method를 호출

uva.vaMethod();

System.out.println("-------------");

uva.vaMethod(1);

System.out.println("-------------");

uva.vaMethod(1,2,3,4,5,6,7); //42억개 가능

 

}//main

 

}//class

콘솔 출력

[I@1f32e575

-------------

[I@279f2327

1

-------------

[I@2ff4acd0

1

2

3

4

5

6

7