static

이강용·2024년 1월 30일
0

CS

목록 보기
9/109

What is static?

  • 클래스의 인스턴스가 아닌 클래스에 속하며 클래스의 변수, 메서드 등을 공유하는 데 사용됨. 이를 통해 해당 클래스로 만들어지는 객체 사이에서 중복되는 메서드, 속성을 효율적으로 정의할 때 씀
  1. 정적 변수 (Static Variables)
  • static 키워드를 사용하여 클래스 수준에서 변수를 선언할 수 있음. 이러한 변수는 모든 객체 인스턴스가 공유하며, 클래스의 인스턴스화와 관계없이 클래스 이름으로 직접 접근할 수 있음. 이를 통해 클래스 수준에서 데이터를 공유하거나 상태를 유지할 수 있음
public class MyClass{
	public static int staticVariable = 10;
}
  1. 정적 메서드 (Static Methods)
  • static 키워드를 사용하여 정적 메서드를 정의할 수 있음. 정적 메서드는 클래스 수준에서 호출되며 객체 인스턴스를 필요로하지 않음. 주로 유틸리티 메서드나 도우미 함수를 만들 때 사용
public class MathUtils {
    public static int add(int a, int b) {
        return a + b;
    }
}

package programmers;

public class Person {
	
	// 멤버변수(속성)
	String name;
	int IQ;
	int str;
    private static final String GUDOC = "leesfact";
	
	
	// 생성자
	public Person(String name, int IQ, int str) {
		this.name = name;
		this.IQ = IQ;
		this.str = str;
	}
	
	public Person() {
		this.name = "leesfact";
		this.IQ = 156;
		this.str = 999;
	}
	
	public void levelup() {
		this.IQ += 1;
		this.str += 1;
		System.out.println(this.name + "의 지능과 힘이 증가했습니다! " + this.IQ + "/" + this.str);
		
	}
    
    private static void(Person a , Person b){
		System.out.println(a.name + "&" + b.name + "이 대화를 시작했다!");
    	
    }
	
	public static void main(String[] args) {
		Person a = new Person(); // 객체 -> 인스턴스
		a.levelup();
		
		Person b = new Person("홍철",999, 0);
		b.levelup();
        Person.talk(a,b);
        System.out.println(Person.GUDOC);
	}
}

static의 단점

단점설명
메모리 관리스태틱 변수는 프로그램 실행 중 메모리 상주, 메모리 사용량 증가, 큰 데이터 구조체 사용 시 메모리 낭비 가능
스레드 안전성여러 스레드에서 스태틱 변수에 동시 접근 시 스레드 안전성 문제 발생 가능, 동기화 부재 시 예기치 않은 결과 발생 가능
테스트 어려움스태틱 메서드는 객체 지향 모델과 어울리지 않아 테스트 어려움, 모의 객체(Mock objects)를 활용한 테스트 어려움
객체 지향 원칙 위배스태틱 변수와 메서드는 객체 지향 설계 원칙 위배 가능, 데이터와 메서드 분리 경향 증가
유연성 감소스태틱 변수와 메서드는 상속과 다형성을 제한할 수 있으며, 서브클래스에서 스태틱 멤버 오버라이드 및 확장 어려움
GC 회수 불가능스태틱 변수와 메서드는 Method Area에 위치하며, 가비지 컬렉터(GC)가 메모리 회수를 수행하지 않습니다.
profile
HW + SW = 1

0개의 댓글