자바의 함수와 메서드

2024. 1. 27. 03:21Java

반응형

함수란 무엇인가?

함수(또는 메서드) 는 어떤 반복적인 작업을 수행하도록 하기 위한 코드 덩어리이다.

‘작업’을 ‘반복’적으로 수행할 수 있도록 ‘재사용’하는 것에 초점이 있다.

메서드의 선언

public int sum(int a, int b) {
    return a + b;
}
  • 메서드 시그니쳐 (Method Signature) : 함수의 이름과 파라미터 이름을 포함한 부분 sum(int a, int b)
  • 접근 제어자 (Access Specifier) : 함수의 사용(접근)을 제어. 자바에서는 4가지 종류를 지원한다.
    • Public : 어플리케이션 내 어떤 클래스에서도 사용 가능
    • Private : 같은 클래스 내에서만 사용 가능
    • Protected : 같은 패키지나 다른 패키지에서 상속받은 클래스에서만 사용 가능
    • Default : 같은 패키지에서만 사용 가능
  • 반환 타입 (Return Type) : 함수가 처리를 마치고 반환할 데이터의 자료형 int
  • 메서드 이름 (Method Name) : 함수의 기능과 관련하여 명명하고, 함수의 이름으로 호출한다. sum
  • 파라미터 목록 (Parameter List) : 콤마(,) 로 구분하며, 괄호 안에 들어 있는 함수 처리에 필요한 데이터의 목록 (int a, int b)
  • 메서드 바디 (Method Body) : 함수의 몸체. 함수가 어떻게 동작할 지 설명하며, 중괄호로 둘러싸여 있다.

메서드의 명명

  • 동작을 정의하므로 동사형으로 명명한다.
  • 첫 글자는 소문자로 시작하고, 여러 단어로 이루어진 경우 대문자로 구분한다.
  • ex. sum(), area(), areaOfCircle()

메서드의 종류

  • 시스템에 의해 미리 정의된 메서드

    • System.out.println()
  • 유저가 정의한 메서드

      public void findEvenOdd(int num) {
          if (num % 2 == 0) {
              System.out.println("even");
          } else {
              System.out.println("odd");
          }
      }
    
      findEvenOdd(5) // odd
  • 정적 메서드 (static method)

    • 메서드 이름 이전에 static 키워드를 입력하여 생성할 수 있다.

    • 정적(static) 메서드이므로 객체 인스턴스를 새로 생성하지 않고도 호출할 수 있다.

    • ex. main()

      public class Main() {
        static void show() {
            System.out.println("Static Method");
        }
      
        show(); // static Method
      }
  • 인스턴스 메서드 (instance method)

    • non-static 메서드로, 객체 인스턴스를 새로 생성하고 내부에서 호출해야 한다.

      public class Main() {
        public void findEvenOdd(int num){
            if (num % 2 == 0) {
                System.out.println("even");
            } else {
                System.out.println("odd");
            }
        }
      
        Main m = new Main();
        m.findEvenOdd(4); // even
      }
    • 인스턴스 메서드에도 두 종류가 있다.

      • 접근자 메서드 (Accessor Method) : 일명 Getter. 접근 제어자가 private인 필드의 데이터를 가져오는 역할을 한다.

        public int getId() {
          return id;
        }
      • 수정자 메서드 (Mutator Method) : 일명 Setter. 접근 제어자가 private인 필드의 데이터를 수정하는 역할을 한다.

        public void setRoll(int roll) {
          this.roll = roll;
        }
  • 추상 메서드 (Abstract Method)

    • 메서드 바디가 비어있는 메서드

    • 추상 클래스 내에서 정의된다.

    • 추상 메서드의 동작은 추상 클래스를 상속받은 클래스에서 정의해서 사용하게 된다.

      public class Main extends ab { // 추상 클래스 구현
        public static void main(String[] args) {
            Main m = new Main();
            m.abMethod(); //abstract method
        }
      
        void abMethod() { // 추상 메서드 구현
            System.out.println("abstract method");
        }
      }
      
      abstract class ab { // 추상 클래스 정의
        abstract void abMethod(); // 추상 메서드 정의
      } 
  • 팩토리 메서드 (Factory Method)

    • 자신이 속한 클래스 객체를 반환하는 메서드
    • 모든 정적 메서드는 팩토리 메서드이다.

그래서 메서드를 왜? 메서드 사용의 장점

  • 재사용성 (Reusablilty) : 메서드는 코드를 한번 작성하면 메서드 이름을 부르는 것만으로 호출되므로 여러번 재사용할 수 있다.
  • 추상화 (Abstraction) : 메서드의 내부 구현은 매우 복잡해질 수 있지만, 호출하는 입장에서는 이름이 명확하면 구체적인 동작을 몰라도 사용할 수 있다.
  • 향상된 가독성 (Improved Readability) : 코드 덩어리를 작게 쪼개어 잘 명명된 메서드들로 만들면 가독성 높은 코드를 만들 수 있다.
  • 관심사 분리 (Separation of concerns) : 다른 역할을 하는 메서드를 각각 분리함으로써 서로 다른 동작과 책임을 갖게 할 수 있다.
  • 향상된 모듈화 (Improved modulrity) : 작게 쪼개어진 메서드들은 관리 가능한 모듈로 동작할 수 있다.
  • 테스트 최적화 (Improved testablilty) : 작게 쪼개어진 메서드들은 디버그, 테스트하기 용이해진다.
  • 향상된 성능 (Improved performance) : 메서드를 잘 쪼개어 구조화하면, 코드의 양도 줄이고 가독성도 올리고 캐싱도 잘 할 수 있다.

Resources

반응형

'Java' 카테고리의 다른 글

자바의 예외처리  (1) 2024.01.30
자바의 반복문  (0) 2024.01.28
자바의 조건문  (0) 2024.01.27
자바의 변수와 데이터타입  (1) 2024.01.25
자바의 기본 체계  (0) 2024.01.23