반응형
 

자바에서의 static: 개념과 활용 방법

자바(Java)에서 static 키워드는 클래스 멤버(변수, 메서드, 블록)에 적용되어 객체가 아닌 클래스 자체에 속하게 만듭니다. 이를 통해 메모리 효율성과 코드 재사용성을 높일 수 있습니다. 이 글에서는 static 키워드의 개념, 자바에서 다루는 방법, 그리고 다양한 활용 예시를 살펴보겠습니다.


static 키워드란?

static 키워드는 클래스 수준의 멤버를 정의할 때 사용됩니다. 일반적으로 클래스 멤버는 객체마다 개별적으로 생성되지만, static 멤버는 클래스에 하나만 존재하며 모든 객체가 공유합니다.

특징:
  1. 클래스에 속함: 객체가 아닌 클래스 자체에 속합니다.
  2. 공유: 모든 객체가 같은 static 멤버를 공유합니다.
  3. 객체 생성 없이 접근 가능: 클래스 이름을 통해 직접 접근할 수 있습니다.

static 변수

static 변수는 클래스 수준에서 하나만 생성되며, 모든 인스턴스가 공유합니다.

예제:
public class Counter {	
    static int count = 0; // static 변수

    public Counter() {
	    count++;
    }

    public static void displayCount() {
	    System.out.println("현재 객체 수: " + count);
    }
}

public class Main {
    public static void main(String[] args) {
        new Counter();
        new Counter();
        Counter.displayCount(); // 클래스 이름을 통해 접근
    }
}
출력 결과:
 
현재 객체 수: 2

static 메서드

static 메서드는 객체 없이 클래스 이름으로 호출할 수 있습니다. static 변수만 직접 접근할 수 있으며, 인스턴스 변수는 사용할 수 없습니다.

예제:
public class MathUtils {
    public static int add(int a, int b) {
	    return a + b;
	}

    public static int multiply(int a, int b) {
  		return a * b;
    }
}

public class Main {
    public static void main(String[] args) {
        int sum = MathUtils.add(5, 10); // static 메서드 호출
        int product = MathUtils.multiply(3, 4);

        System.out.println("합계: " + sum);
        System.out.println("곱셈: " + product);
    }
}
출력 결과:
 
합계: 15
곱셈: 12

static 블록

static 블록은 클래스가 로드될 때 한 번만 실행됩니다. 주로 static 변수의 초기화에 사용됩니다.

예제:
public class Config {
    static String appName;
    static int version;

    static {
        appName = "MyApplication";
        version = 1;
        System.out.println("Config 클래스가 로드되었습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println("앱 이름: " + Config.appName);
        System.out.println("버전: " + Config.version);
    }
}
출력 결과:
 
Config 클래스가 로드되었습니다.
앱 이름: MyApplication
버전: 1

static의 활용 예시

1. 싱글톤 패턴

싱글톤 패턴에서 static 키워드는 클래스의 인스턴스가 하나만 존재하도록 보장합니다.

public class Singleton {
    private static Singleton instance;

    private Singleton() {
    // private 생성자
    }

    public static Singleton getInstance() {
        if (instance == null) {
	        instance = new Singleton();
        }
        return instance;
    }
}
2. 유틸리티 클래스

static 메서드로 구성된 클래스는 반복적으로 사용되는 기능을 제공할 수 있습니다.

public class StringUtils {
    public static boolean isEmpty(String str) {
	    return str == null || str.isEmpty();
    }
}
3. 상수 정의

staticfinal을 함께 사용하여 상수를 정의할 수 있습니다.

public class Constants {
    public static final double PI = 3.14159;
    public static final String APP_NAME = "StaticApp";
}

public class Main {
    public static void main(String[] args) {
        System.out.println("PI: " + Constants.PI);
        System.out.println("앱 이름: " + Constants.APP_NAME);
    }
}
출력 결과:
 
PI: 3.14159
앱 이름: StaticApp

마치며

static 키워드는 클래스 수준에서 멤버를 정의하고 공유하는 데 유용합니다. 유틸리티 메서드, 상수 정의, 싱글톤 패턴 등 다양한 상황에서 활용될 수 있으며, 객체 지향 프로그래밍에서 메모리 사용과 코드 재사용성을 개선하는 데 중요한 역할을 합니다. static 키워드를 이해하고 적절히 활용하여 더 효율적인 자바 코드를 작성해보세요!

 
반응형

'개발 부트캠프 > 백엔드' 카테고리의 다른 글

[Java] 디자인 패턴  (0) 2025.01.04
[Java] 상속, 오버로딩, 오버라이딩  (1) 2025.01.03
[Java] 패키지 & 접근 제어자  (0) 2025.01.03
[Java] 생성자  (0) 2025.01.03
[Java] Class & Object (클래스 & 객체)  (0) 2025.01.03
반응형
 

클래스와 객체

프로그래밍 언어에서 클래스(Class)와 객체(Object)는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념입니다. 이를 이해하면 복잡한 문제를 더 구조적이고 효율적으로 해결할 수 있습니다. 이 글에서는 클래스와 객체의 개념을 설명하고, 자바(Java)에서 이를 다루는 방법을 예시와 함께 소개합니다.


클래스(Class)란?

클래스는 객체를 생성하기 위한 청사진(Blueprint)이나 설계도입니다. 클래스는 데이터(필드)와 이 데이터를 조작하는 메서드로 구성됩니다. 예를 들어, 현실 세계에서 "자동차"는 하나의 클래스에 해당할 수 있습니다. 이 클래스는 다음과 같은 속성과 동작을 가질 수 있습니다:

  • 속성(필드): 색상, 제조사, 속도
  • 동작(메서드): 가속하기, 브레이크 밟기, 방향 전환

자바에서 클래스는 class 키워드를 사용하여 정의됩니다.

public class Car {
    // 필드
    String color;
    String manufacturer;
    int speed;

    // 메서드
    void accelerate() {
        speed += 10;
        System.out.println("속도가 증가했습니다. 현재 속도: " + speed);
    }

    void brake() {
        speed -= 10;
        if (speed < 0) {
        	speed = 0;
    	}
        System.out.println("속도가 감소했습니다. 현재 속도: " + speed);
    }
}

객체(Object)란?

객체는 클래스로부터 생성된 실제 사용 가능한 인스턴스(instance)입니다. 자동차라는 클래스를 정의한 후, "빨간 자동차"와 "파란 자동차"는 각각 클래스의 인스턴스, 즉 객체가 됩니다. 객체는 클래스가 정의한 속성과 메서드를 사용하여 동작합니다.

자바에서 객체는 new 키워드를 사용하여 생성됩니다.

public class Main {
	public static void main(String[] args) {
        // Car 클래스의 객체 생성
        Car myCar = new Car();

        // 객체의 필드 초기화
        myCar.color = "빨간색";
        myCar.manufacturer = "현대";
        myCar.speed = 0;

        // 객체의 메서드 호출
        myCar.accelerate();
        myCar.brake();
    }
}

출력 결과는 다음과 같습니다:

 
속도가 증가했습니다. 현재 속도: 10
속도가 감소했습니다. 현재 속도: 0

클래스와 객체의 관계

클래스와 객체의 관계는 "설계도와 제품"에 비유할 수 있습니다.

  • 클래스는 설계도이며, 객체는 설계도를 기반으로 만들어진 실제 제품입니다.
  • 클래스는 객체의 구조와 동작을 정의하고, 객체는 이를 활용하여 실제 작업을 수행합니다.

자바에서 클래스와 객체 활용하기

자바에서 클래스와 객체를 사용하는 일반적인 과정은 다음과 같습니다:

  1. 클래스 정의: 객체의 구조와 동작을 정의합니다.
  2. 객체 생성: 클래스의 인스턴스를 생성합니다.
  3. 필드 및 메서드 사용: 생성된 객체를 통해 데이터를 저장하거나 조작합니다.

다음은 또 다른 간단한 예입니다:

public class Person {
    // 필드
    String name;
    int age;

    // 메서드
    void introduce() {
	    System.out.println("안녕하세요, 제 이름은 " + name + "이고, 나이는 " + age + "살입니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        // Person 클래스의 객체 생성
        Person person = new Person();

        // 객체의 필드 초기화
        person.name = "홍길동";
        person.age = 25;

        // 객체의 메서드 호출
        person.introduce();
    }
}

출력 결과는 다음과 같습니다:

 
안녕하세요, 제 이름은 홍길동이고, 나이는 25살입니다.

마치며

클래스와 객체는 자바를 포함한 객체 지향 프로그래밍 언어에서 매우 중요한 요소입니다. 클래스를 사용하면 코드 재사용성을 높이고, 객체를 사용하면 데이터와 동작을 논리적으로 묶을 수 있습니다. 자바의 클래스와 객체를 잘 활용하면 복잡한 문제도 체계적으로 해결할 수 있습니다.

반응형

'개발 부트캠프 > 백엔드' 카테고리의 다른 글

[Java] 상속, 오버로딩, 오버라이딩  (1) 2025.01.03
[Java] static  (0) 2025.01.03
[Java] 패키지 & 접근 제어자  (0) 2025.01.03
[Java] 생성자  (0) 2025.01.03
[Java] GC(Garbage Collection)  (2) 2024.12.06

+ Recent posts