Menu
Coddy logo textTech

정적 메서드

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 16번째.

정적 변수가 인스턴스가 아닌 클래스에 속하는 것과 마찬가지로, 정적 메서드 또한 클래스 자체에 속합니다. 객체를 생성하지 않고도 이를 호출할 수 있습니다.

static 키워드를 추가하여 정적 메서드를 선언합니다:

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static int multiply(int a, int b) {
        return a * b;
    }
}

// 객체를 생성하지 않고 호출
int sum = MathHelper.add(5, 3);      // 8
int product = MathHelper.multiply(4, 2);  // 8

정적 메서드에는 한 가지 중요한 제한 사항이 있습니다: 이들은 인스턴스 변수나 인스턴스 메서드에 직접 접근할 수 없습니다. 정적 메서드는 객체 없이 존재하므로, 작업할 this 참조가 없습니다.

public class Counter {
    private int count;              // 인스턴스 변수
    private static int total;       // 정적 변수
    
    public static void incrementTotal() {
        total++;      // OK - 정적 변수에 접근
        // count++;   // 오류! 인스턴스 변수에 접근할 수 없음
    }
}

정적 메서드는 객체 상태에 의존하지 않는 유틸리티 작업에 이상적입니다. Math.sqrt()Integer.parseInt()와 같은 메서드를 생각해 보세요. 이들은 개별 객체보다는 클래스 수준에서 의미가 있는 기능을 제공합니다.

challenge icon

챌린지

쉬움

객체를 생성할 필요 없이 유용한 문자열 조작 메서드를 제공하는 StringUtils 유틸리티 클래스를 만들어 봅시다. 정적 메서드(static methods)를 실습하기에 완벽한 예제입니다!

코드를 정리하기 위해 두 개의 파일을 생성합니다:

  • StringUtils.java: 일반적인 문자열 연산을 수행하는 정적 메서드를 포함한 유틸리티 클래스를 생성합니다:
    • 주어진 문자열에서 모음(a, e, i, o, u - 대소문자 모두 포함)의 개수를 반환하는 정적 메서드 countVowels(String text)
    • 문자열을 뒤집어서 반환하는 정적 메서드 reverse(String text)
    • 문자열을 앞에서부터 읽으나 뒤에서부터 읽으나 동일하면(대소문자 구분 없음) true를, 그렇지 않으면 false를 반환하는 정적 메서드 isPalindrome(String text)
  • Main.java: 유틸리티 클래스를 사용하여 문자열을 처리합니다. 하나의 입력으로 텍스트 문자열을 받습니다. 클래스 이름을 통해 각 정적 메서드를 직접 호출하고 다음 세 줄을 출력합니다:
    • Vowels: [count]
    • Reversed: [reversed string]
    • Palindrome: true 또는 Palindrome: false

분석할 텍스트 문자열 하나를 입력으로 받게 됩니다.

정적 메서드는 인스턴스를 먼저 생성하지 않고 클래스 이름(예: StringUtils.countVowels(text))을 사용하여 호출한다는 점을 기억하세요. 덕분에 유틸리티 클래스는 호출 간에 상태를 유지할 필요가 없는 작업을 수행할 때 매우 편리합니다.

치트 시트

정적 메서드는 클래스 자체에 속하며 객체를 생성하지 않고도 호출할 수 있습니다. static 키워드를 사용하여 선언합니다:

public class MathHelper {
    public static int add(int a, int b) {
        return a + b;
    }
}

// 객체를 생성하지 않고 호출
int sum = MathHelper.add(5, 3);  // 8

중요한 제한 사항: 정적 메서드는 객체 없이 존재하며 this 참조가 없기 때문에 인스턴스 변수나 인스턴스 메서드에 직접 접근할 수 없습니다:

public class Counter {
    private int count;              // 인스턴스 변수
    private static int total;       // 정적 변수
    
    public static void incrementTotal() {
        total++;      // OK - 정적 변수에 접근
        // count++;   // 오류! 인스턴스 변수에 접근할 수 없음
    }
}

정적 메서드는 Math.sqrt() 또는 Integer.parseInt()와 같이 객체 상태에 의존하지 않는 유틸리티 작업에 이상적입니다.

직접 해보기

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        
        // TODO: StringUtils 정적 메서드를 사용하여 텍스트 분석
        // StringUtils.countVowels(text)를 호출하여 모음 개수 가져오기
        // StringUtils.reverse(text)를 호출하여 뒤집힌 문자열 가져오기
        // StringUtils.isPalindrome(text)를 호출하여 회문 여부 확인
        
        // TODO: 다음 형식으로 결과 출력:
        // Vowels: [count]
        // Reversed: [reversed string]
        // Palindrome: true/false
        
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨