Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
관리 메뉴

어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨

23.03.22 / static 본문

Back - end/JAVA

23.03.22 / static

낫쏘링 2023. 3. 22. 12:00
728x90

public static void hello() {}

public : 전부 접근 가능
private : 같은 클래스 내에서 생성된 객체에서만 접근 가능
protected : 같은 패키지 내에서 생성된 객체에서만 접근 가능 or 다른 패키지에서 상속 받으면 접근 가능
defualt : 같은 패키지 내에서 생성된 객체에서만 접근 가능 (접근 지정자 자리에 아무것도 안쓰면 defualt)
void : 리턴을 하지 않는다.
데이터 타입 : 리턴할 값의 데이터 타입을 입력한다. (String, int, 등... / Class 이름)
그럼 static은 왜 사용할까?
static : 정적인 - 고정되어 있기 때문에 정적임
서로 다른 주소를 생성하면 같은 필드를 받아도 다르게 작동한다.
하지만 static으로 선언된 필드는 아무리 주소가 달라도 같게 작동한다.

 

 

static 변수 (정적 필드) + static 메서드 (정적 메서드) = 정적 멤버(클래스 멤버 : 클래스에 소속된 변수와 메서드라는 뜻)
static - 객체를 사용하지 않겠다. / 클래스에 소속

클래스에 소속되어 있다는 것은?
인스턴스 멤버들은 heap 영역에, 정적 멤버들은 static 영역에 할당된다.
클래스가 메모리에 로딩됨과 함께 저장되는 공간을 차지하기 때문에 프로그램 시작과 동시에 사용 가능하다.
(객체/인스턴스가 객체를 생성해야 이용가능한 반면 인스턴스를 생성하지 않아도 바로 사용 가능)
클래스 이름이 User 일 때

public static User();
User u01 = new User();   // 생성자 메서드를 통해 객체를 생성해서 저장 공간을 할당해줘야
String result = u01.uid;   // 사용 가능한 객체(인스턴스)

String result = User.uid;  // 생성자 메서드 없이 클래스 이름으로 바로 사용 가능한 정적 필드

GC에 의해 쓸모 없는 메모리가 관리되는 heap 영역과 다르게 static 영역언 GC의 관리를 받지 않는다.
때문에 static을 많이 사용하면 시스템 성능에 악영향을 줄 수 있다.
하지만 heap 영역은 메모리를 공유하지 않고 static 영역은 메모리를 모든 객체에게 공유하기 때문에 어디서든 참조 할 수 있으며, 바로 사용 가능하기 때문에 사용성이 좋다.
장점과 단점을 이용해 둘 중 적절하게 사용할 필요가 있다.
(static은 재사용하는 멤버나 잘 변하지 않는 변수나 메서드를 사용할 때 사용하면 좋다.)

static 메서드는 준비가 되지 않는 인스턴스 멤버를 사용할 수 없다.
(인스턴스는 new 생성자를 통해 객체를 생성해야 사용가능하기 때문)



객체 (인스턴스) 인스턴스 멤버

 

1. static 변수, static 메소드는 객체를 생성하지 않아도 사용할 수 있다.

2. static 변수는 객체와 상관없이 하나의 저장공간이므로 모든 객체가 공유해서 사용한다.

즉, 모든 객체에서 공통으로 사용되는 필드에 static을 붙이는 것을 고려한다. (무조건은 X)

3. static 메소드는 인스턴스 멤버를 사용할 수 없다. (준비가 안된 애들은 못가져옴 )

static 메소드가 메모리에서 사용 준비가 끝나도, 인스턴스는 new를 사용해서 객체 생성 해야 사용가능

4. 클래스명, 멤버명으로 사용한다.

변수의 종류

1. 지역변수 (local variable ) : 클래스 중괄호 영역은 포함되지 않으며, 메소드 또는 그 안의 중괄호 영역에서 선언된 변수

2. 매개변수 (parameter) : 메소드 소괄호 안에서 선언되는 변수 (지역변수와 마찬가지로 해당 메소드 안에서만 사용가능)

3. 인스턴스 변수 (instance variable ) : 클래스 중괄호 영역에서 선언된 변수 (static X)

4. 정적 변수, 클래스 변수 (static variable) : 객체 간 공유 가능, 편의성을 위한 것 (static O )

key words 정리

-메소드의 매개변수와 인수

1. 인수,  argument: 메소드를 호출하는 쪽

2. 매개변수, 인자, parameter: 메소드를 정의하는 쪽 (값을 받는 쪽 )

하지만 인수와 인자는 명확하게 구분하지 않고 혼동해서 사용하는 경우가 많다.

728x90