본문 바로가기
Programming/JAVA

이론_8. 메서드

by yoon9i 2024. 3. 6.
/*
    <메서드>

    ◎ 메서드(Method)는 클래스(Class)가 포함하는 멤버(Member) 중 하나로, 호출(Call) 가능한 단위이다.
    ◎ 메서드 명명은 카멜 케이스를 이용하고, 주로 '동사 + 목적어' 의 형태를 가진다.
      가령, `addUser`,`deleteUser` 와 같은 꼴.
      단, 'to 타입' 과 같은 형식(가령 toString 및 toArray 등)을 가지기도 하고, 반환 타입이 논리형(boolean) 인 경우
      3인칭 단수형의 '동사' 를 이름(가령 equals 및 matches 등)으로 가지기도 한다.
    ◎ 메서드의 명명에는 예외가 있을 수 있으나 카멜 케이스를 지키는 것에는 예외가 없다

        [접근 제한자(Access Modifier)] [static|abstract|final]? [반환타입|void] [메서드 이름] ([메게 변수(Parameter),...]?)
        [throws [예외,...]]?{
            //구현부
        }
        ->[] 는 실제로 작성하면 안된다. ex) 접근제한자 static|abstract...형태이다.([]없음)
        ->[]:한 묶음 / [A|B] : A,B중의 하나 / void : 반환타입이 없을때 씀. / []? : 유무상관없음(둘중하나가 오거나 아예 없거나)
          ([A,...]?) : (int a) or (int a, int b,...)

            - static : 메서드의 정적 여부.
            - abstract : 메서드의 추상 여부.
            - final : 메서드의 최종 여부.
            - void : 메서드의 반환 타입이 없음을 의미함.
            - throws : 해당 메서드 호출 시 발생할 수 있는 예외(Exception) 한 개 이상을 명시한다.
                       해당 메서드를 호출하는 컨텍스트(Context)는 해당 예외에 대한 처리가 되어있어야한다.
            - 메서드는 정적이면서 추상적이 거나 최종일 수 없고, 추상적이면서 정적이거나 최종적일 수 없으며 최종적이면서
              정적이거나 추상적일 수 없다.(static,abstract,final 중 하나만 쓰라는 뜻)
            -추상 메서드
                → abstract 키워드를 이용하여 추상적인 메서드를 선언할 수 있다.
                → 메서드가 추상적일 경우 구현부 ( { , } ) 를 가지지 않아야 하며 세미콜론(;) 으로 끝내야 한다.

                  ex) public void move(){...}  => public abstract void move();

                → 추상 메서드를 한 개 이상 포함하고 있는 클래스는 반드시 추상적이어야 한다.

        public abstract void someAbstractMethod(); //추상 메서드의 예

        public static void main(String[] args){
            //...
        }

            - 접근 제한자는 public 이다.
            - 정적이고( static ) 추상적 ( abstract ) 이지 않다.
            - 반환 타입이 없다.
            - 메서드의 이름은 main 이다.
            - 매개 변수는 String[] 타입의 args 한개가 있다.



    <return>

    ◎ return 키워드는 어떠한 메서드의 반환 타입이 있을 때( void 가 아닐때) 해당 메서드의 호출 결과를 반환(Return) 해주기 위해
      사용 하는 키워드이다. return 반환값; 형식으로 사용한다
    ◎ 메서드의 반환 타입이 있는 경우 ( void 가 아닐 때) 모든 경우의 수에서 반환 값을 반환하는 구문이 작성되어야만 한다.
    ◎ 메서드의 반환 타입이 없을 때 ( void 일때) 에도 사용할 수 있는데 단순히 return; 로 사용할 수 있다.
    ◎ 반환 값의 유무와 관계 없이 return 은 해당 메서드의 실행을 즉시 중단시킨다.



    <호출>

    ◎ 메서드를 호출(Call)하기 위해서는 해당 메서드를 멤버로 가지고 있는 클래스(혹은 객체)에 접근하여 메서드 이름을 적고 괄호 안에 요구되는
      매게 변수의 구조와 일치하는 전달 인자를 전달해야 한다.



    <재귀호출(Recursive Call)>

    ◎ 재귀호출이란, 어떠한 메서드 x의 구현부 내에 동일한 메서드 x를 호출하는것을 의미한다.



    <오버로딩(Overloading)>

    ◎ 메서드 오버로딩(Method Overloading) 은 동일한 이름을 가지는 메서드 두개 이상에 대해 매개변수 구조를 다르게하여
      메서드를 정의하는 것이다.



    <가변인자(Variable Arguments)> : 변할수있는 인자들이다.

    ◎ 어떠한 타입 T에 대해서 정해지지 않은 개수의 인자를 전달 받기 위해 사용한다.
      단, 0개의 인자도 허용함으로 유의한다.
    ◎ 메서드 매개변수 구조 선언시 가변인자는 마지막에 한개만 존재해야 한다.
    ◎ 가변인자 `T...`는 실질적으로 T에 대한 배열(T[])로 인식됨으로 사용에 유의한다.

        public static int sum(int...nums) {...}

        위 코드에서 가변인자 nums 는 사실 정수형 배열(int[])이다.



    <재정의(Override)>

    ◎ 메서드 재정의(Override)는 상속 받고 있는 부모(몇 단계 부모인가는 상관 없음) 가 가진 최종적이지 않은 메서드의 구현부를
      새로 작성하는 것이다.

    ◎ 자식 타입에서 재정의된 메서드의 구현부는 부모 타입인 자식 객체를 가지는 변수를 통해 호출하더라도 재정의된 내용이 실행된다.
    ◎ 재정의 되기 전의 (원래)메서드에 접근하는 방법은 재저으이 메서드 구현부 내에서 super 키워드를 이용하는 방법 밖에 없다.
    ◎ 메서드 재정의시 @Override 어노테이션(Annotation)을 사용해야 한다.





*/

'Programming > JAVA' 카테고리의 다른 글

이론_10. String 클래스  (0) 2024.03.06
이론_9. 클래스  (0) 2024.03.06
이론_7. WHILE  (0) 2024.03.06
이론_6. SWITCH  (0) 2024.03.06
이론_5. FOR 문 & 향상된 FOR  (0) 2024.03.06