Java 메소드

임유진·2025년 7월 3일

Java

목록 보기
6/12
post-thumbnail

🧩 메소드 선언 형식

Java 메소드는 아래와 같은 형태로 선언합니다.

반환형 메소드명([arguments]) {
    [body]
}

📝 주요 키워드

  • void: 반환값이 없음을 의미
  • return: 메소드 내부에서 결과를 반환할 때 사용

🛠️ static 메소드

static을 붙이면 객체 생성 없이 클래스 이름으로 바로 메소드를 호출할 수 있습니다.

  • 예시 코드:

    public class MethodLab {
    
        static void add(int a, int b) {
            System.out.println(a + b);
        }
    
        public static void main(String[] args) {
            MethodLab.add(10, 20);
            add(10, 20); // 같은 클래스 안에서는 클래스명 생략 가능
        }
    }
    예시 코드2
    package step02;
    
    class Person2 {
        String name;
        int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
    public class MethodLab2 {
    
        static Person2 getPerson2() {
            return new Person2();
        }
    
        static void setPerson2(Person2 p) {
            p.setName("가오리");
            System.out.println(p.name);
        }
    
        public static void main(String[] args) {
            Person2 p1 = MethodLab2.getPerson2();
            MethodLab2.setPerson2(p1);
    
            Person2 p2 = new Person2();
            MethodLab2.setPerson2(p2);
            System.out.println("p2 객체 생성 시 이름 : " + p2.name);
            p2.setName("가올가올");
            System.out.println("p2 이름 수정 후 : " + p2.name);
            setPerson2(p2);
            System.out.println("p2 setPerson2 후 : " + p2.name);
        }
    }

출처 : https://velog.io/@yonii/JAVA-Static%EC%9D%B4%EB%9E%80

static 키워드 활용

static클래스에 귀속된 멤버에 붙이며, 객체 생성 없이 접근할 수 있습니다.

📝 사용 사례

상황static 사용 여부예시 코드
모든 값에 대해 동일한 동작 수행OMath.abs(-5)
객체별 다른 상태가 필요한 동작 수행X (인스턴스 메소드)data.length()

static 사용 예시

  1. 객체 상태에 의존하지 않는 기능

    int absValue = Math.abs(-10);
  2. 공유해야 하는 값

    public class Counter {
        static int totalCount = 0;
    }
  3. 객체 생성 비용 감소

    double result = Math.pow(2, 3);

static 사용 불가 예시

객체의 상태에 의존하는 기능은 static으로 선언할 수 없습니다.

String data = "Hello";
int len = data.length();
char c = data.charAt(2);

static 초기화 블록

클래스 로딩 시 1회만 실행됩니다.

static {
    System.out.println("class loaded");
}

static을 활용한 Singleton 구현

외부에서 생성자 호출을 막고 단일 인스턴스를 제공합니다.

private static Model model = new Model();
private Model(){}
public static Model getModel() {
    return model;
}

🧩 Lombok 어노테이션으로 코드 간결화

Lombok은 반복적인 코드를 컴파일 시 자동 생성합니다.


주요 Lombok 어노테이션

📝 @Getter

모든 필드의 Getter 메소드 자동 생성

@Getter
public class Person {
    String name;
    int age;
}

📝 @Setter

모든 필드의 Setter 메소드 자동 생성

@Setter
public class Person {
    String name;
    int age;
}

📝 @AllArgsConstructor

모든 필드를 초기화하는 생성자 자동 생성

@AllArgsConstructor
public class Person {
    String name;
    int age;
}

📝 @NoArgsConstructor

기본 생성자(매개변수 없는 생성자) 자동 생성

@NoArgsConstructor
public class Person {
    String name;
    int age;
}

📝 @RequiredArgsConstructor

final 또는 @NonNull 필드만 초기화하는 생성자 생성

@RequiredArgsConstructor
public class Person {
    private final String name;
    private final int age;
    private String address;
}

생성자 어노테이션 세부 옵션

옵션설명
staticName정적 팩토리 메소드 생성
access생성자의 접근 제한자 지정 (PUBLIC, PRIVATE 등)
onConstructor생성자의 접근 제어자 설정
forcefinal 필드를 강제로 기본값(null, 0)으로 초기화

📝 staticName

: 정적 팩토리 메소드 생성

  • 모든 생성자 어노테이션에 사용 가능

  • @AllArgsConstructor에 사용 시

    @AllArgaConstructor(staticName = "of")
    public class Person {
      private String name;
      private int age;
      private String address;
    
      public static Person of(String name, int age, String address){
        new Person(name, age, address);
      }
    }

📝 access

: 접근 제한자 지정

  • PUBLIC : 기본값이며, 모든 클래스에서 생성자에 접근 가능
  • PROTECTED : 같은 패키지의 클래스와 상속받은 클래스에서 생성자에 접근 가능
  • PACKAGE : 같은 패키지의 클래스에서 생성자에 접근 가능
  • PRIVATE : 해당 클래스 내부에서만 생성자에 접근 가능
  • 이외에도 NONEMODULE 접근 제어자가 있지만 일반적으로 사용 안함

📝 onConstructor

: 생성자의 접근 제어자 설정. 기본값은 public

📝 force

: final 필드가 선언된 경우 컴파일 타임에 기본값을 0/null/false`로 설정

  • @NoArgsConstructor 어노테이션에서만 사용 가능
  • 옵션 지정할 경우 primitive type에 맞는 기본값이 설정됨
    public class Person {
      private final String name = null;
      private final int age = 0;
      private String address;
    }

📌 전체 요약 표

구분설명
static 메소드클래스 로딩 시 생성, 객체 없이 호출 가능
인스턴스 메소드객체 상태에 의존, 반드시 인스턴스 생성 후 호출
Lombok Getter/Setter반복되는 접근자 메소드 자동 생성
Lombok 생성자 어노테이션다양한 생성자 자동 생성 및 초기화 옵션 지원
Singleton 패턴static 필드 + private 생성자로 단일 인스턴스 보장

📚 참고자료

profile
말하는 고구마

0개의 댓글