정적(Static)은 '고정된'이라는 의미

정적 멤버

  • 클래스에 고정된 멤버
  • 객체를 생성하지 않고 사용할 수 있는 필드메서드
    • 필드 : 정적 필드
    • 메서드 : 정적 메서드
  • 객체가 없어도 클래스 별 메모리에 할당 됨.

정적 멤버 선언

  • 정적 필드와 정적 메서드를 선언하려면, 필드와 메서드 선언 시 Static키워드를 붙이면 된다.
    • public class 클래스 {
      	// 정적 필드
          static 타입 필드 [= 초기값];
          
          // 정적 메서드
          static 리턴타입 메서드 ( 매개변수 선언, ... ) {
          	...
          }
      }
  • 클래스 로더가 클래스(바이트코드)를 로딩해서 메서드 메모리 영역에 적재할 때, 클래스 별로 관리 된다.
    • 정적 멤버는 클래스에 고정된 멤버이기 때문.
    • 인스턴스 멤버는 객체가 생성될때마다 새로운 메모리공간(주로 Heap)에 객체별로 관리된다.
      • 각 인스턴스는 고유한 값을 가지게 된다.
    • 어떤 객체라도 "공통된" 또는 "변하지 않는" 또는 "객체마다 가지고 있을 필요가 없는" 공용 데이터는 정적 필드로 선언하는 것이 좋다.
      • ex) Circle 클래스에서 원의 넓이와 둘레를 구하는 메서드를 제공 중이다.
        • 이 때, 반지름(radius)필드 값은 원의 객체마다 다르지만 파이(π)는 모든 원 객체가 동일하다.
          • public class Circle {
            	int radius;
            	static double pi = 3.14159;
            }
        • 이 때, 원의 넓이와 둘레를 구하는 방법(메서드)는 모든 원 객체가 동일하다.
          • public class Circle {
                int radius;
                static double pi = 3.14159;
            
                static double getArea(int radius) {
                    return pi * radius * radius;
                }
            
                static double getRound(int radius) {
                    return 2 * pi * radius;
                }
            }

정적 멤버 사용

클래스.필드;
클래스.메서드( 파라미터 값, ...);

주의 사항

객체가 없어도 사용가능하기 때문에, 정적 메서드 내부에 인스턴스 필드나 인스턴스 메서드를 사용할 수 없다.

 

반응형

'Programming Language > JAVA' 카테고리의 다른 글

[JAVA] for문 vs .stream() 비교  (4) 2024.11.13

+ Recent posts