Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

archive

[이것이 자바다] 06 클래스 - 2 본문

Java/Java 개념 정리

[이것이 자바다] 06 클래스 - 2

안정민 2023. 4. 13. 00:59

1. 정적 멤버

-자바는 클래스 로더 (loader)을 이용해서 클래스를 메소드영역에 저장하고 사용하는데, 정적 멤버란 메소드 영역의 클래스에 고정적으로 위치하는 멤버를 말한다.

-정적 멤버는 객체를 생성할 필요 없이 클래스를 통해 바로 사용이 가능하다.

 

-필드와 메소드는 모두 정적 멤버가 될 수 있음, static 키워드를 추가해주면 된다.

-객체마다 가지고 있을 필요성이 없는 공용적인 필드는 정적 필드로 선언하는 것이 좋음. 예를 들어 Calculator 클래스에서 원의 넓이나 둘레를 구할 때 필요한 파이는 Calculator객체마다 가지고 있을 필요가 없기 떄문에 정적 필드로 선언하는 것이 좋다.

public class Calculator{
   String color;              // 계산기별로 색이 다를 수 있다
   static double PI=3.141592; //계산기에서 사용하는 파이의 값은 동일하다
}

-또 인스턴스 필드를 사용하지 않는 메소드는 정적 메소드로 선언하는 것이 좋다.

public class Calculator{
	String color;
    void setColor(String color){ this.color=color;} //인스턴스 메소드
    static int plus(int x, int y){return x+y;}      // 정적 메소드
}

-즉, static 키워드 사용을 권장하는 두 가지 상황은 다음과 같다

(1) 인스턴스 필드와 독립적으로 매개변수만을 사용하는 메소드일 때

(2) 객체마다 가지고 있을 필요가 없을 때

 

-클래스로 메모리가 로딩된다면 정적 멤버를 바로 사용할 수 있는데, 클래스 이름과 함께 도트(.) 연산자로 접근하면 된다.

** 정적 필드는 객체 생성 없이도 사용할 수 있기 떄문에 생성자에서 초기화 작업을 하지 않는다, 생성자는 객체 생성 후 바로 실행이 되기 때문이다.

 

2. 정적 블록

-정적 필드는 다음과 같이 필드 선언과 동시에 초기값을 주는 것이 일반적이다.

static double pi=3.141592;

-하지만 복잡한 초기화 작업이 필요하다면 정적 블록 (static block)을 이용해야함, 정적 블록은 클래스가 메모리로 로딩될 때 자동으로 실행되며 정적 블록이 클래스 내부에 여러 개 선언이 되어 있으면 선언 순서대로 실행된다.

static{
	...
}

 

 

3. final 필드와 상수

-인스턴스 필드와 정적 필드는 언제든 값을 변경할 수 있다

-그러나 경우에 따라 값을 변경하는 것을 막고 읽기만 허용해야할 때, final 필드와 상수를 선언하여 사용한다.

-final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어 프로그램 실행 도중에 수정할 수 없게 된다.

final 타입필드 [=초기값];

-final 필드는 다음과 같이 선언하며, final 필드에 초기값을 줄 수 있는 방법은 다음 두 가지밖에 없다.

(1) 필드 선언 시에 초기값 대입

(2) 생성자에서 초기값 대입

 

 

4. 상수 선언

- 지구의 무게나 원주율 파이와 같은 불변의 값을 저장하는 필드를 자바에서는 상수(constant)라고 부른다.

-상수는 객체마다 저장을 할 필요가 없고 여러 개의 값을 가져서는 안 되기 때문에 static이면서 final인 특성을 가져야 함, 다음과 같이 선언

static final 타입상수 [=초기값];

-초기값은 선언 시에 주는 것이 일반적이지만 복잡한 초기화가 필요할 경우에는 정적 블록에서 초기화도 할 수 있다.

-상수의 이름은 모두 대문자로 작성하는 것이 관례, 만약 서로 다른 단어가 혼합된 이름이라면 언더바로 단어들을 연결한다.

-또한 상수는 정적필드이므로 클래스로 접근하여 읽을 수 있다.

 

 

5. 접근제한자

-자바에서는 중요한 필드와 메소드가 외부로 노출되지 않도록 해 객체의 무결성 (결점이 없는 성질)을 유지하기 위해 접근 제한자를 사용한다

접근제한자 제한대상 제한 범위
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 같은 패키지 혹은 자식 객체만 사용가능
(default) 클래스, 필드, 생성자, 메소드 같은 패키지
private 필드, 생성자, 메소드 객체 내부

** 클래스를 선언할 때는 네 가지 종류의 접근 제한자 중 public과 default 접근 제한만을 가질 수 있다.

 

 

6. 싱글톤 패턴

**얘는 진짜 처음 들어봄 (ノ゚ο゚)ノ

-애플리케이션 전체에서 단 한 개의 객체만 생성해서 사용하고 싶다면 싱글톤(Singleton)패턴을 적용할 수 있음

-싱글톤 패턴의 핵심은 생성자를 private 접근제한하여 외부에서 new 연산자로 생성자를 호출할 수 없도록 막는 것이다.

private 클래스() {}

-생성자를 호출할 수가 없으니 외부에서 마음대로 객체를 생성하는 것이 불가능해지며, 대신 싱글톤 패턴이 제공하는 정적메소드를 통하여 간접적으로 객체를 얻을 수 있다.