본문 바로가기

Wanna be a Programmer/Java Programming

Java Programming - Static vs Instance, 접근제한자


Instance vs Static variable, method


- Instance variable의 경우 각 객체마다 instance variable이 생성된다.

- static 변수는 하나이므로 불변의 값 혹은 여러 곳에 공통적으로 쓰이는 값(파이), 고정적으로 할당을 해놓고 바뀌지 않는 변수는 static으로 작성한다.



static 


메소드, attribute(local 변수 X), nested class(class 안에 선언된 class)에 사용되는 제한자(modifier)

    ex) static class A { static class B { } }

class의 멤버가 된다.(객체의 것이 아니라 class의 것이다)

호출 : class이름.멤버 ex) class A { static int a; static void go() {} } A.a=10; A.go();

static 메소드, 변수는 그 class에서 생성된 모든 객체들이 똑같은 값, 똑같은 기능을 실행하는 경우 class의 멤버(소속)로 처리

구문 : 변수 접근제한자 static type 이름[=];

        메소드 접근제한자 static returnType 이름([매개변수]) { }

static 메소드는 static 멤버만 접근 가능 instance변수, 메소드 접근 불가능

 

Instance 멤버 변수

Field class block 안에 선언된 변수

class 멤버 변수

 


Class Loading과 동시에 클래스 내의 모든 메소드가 메모리에 올라간다..?

 

메소드영역메소드코드

Static영역

Static멤버(변수,메소드)

Constant pool

final 변수

CustomerDTO() {}

CustomerDTO(string name, int age) {}

getName() {}

setName() {}

getAge() {}

setAge() {}

getTotalInstanceCount() {}

int totalInstanceCount

getTotalInstanceCount() {}

 

Class영역(Area) class별로 구분


변수(Variable)

 

 

변수종류

선언

묵시적 초기화

저장메모리

접근범위

(scope, life cycle)

Field

Instance

class block

0

Heap

객체 생성~객체소멸 

객체를 참조할 수 있을 

때까지

Static Class

class block->

static 제한자

0

class영역의 static영역

프로그램 시작~

프로그램 종료

Local Method

메소드 block

X

실행Stack

메소드가 실행하는 동안

선언부 실행~메소드 종료

local method를 사용할 경우에는 변수에 default값을 할당해야만 한다.

  

Singleton 디자인 Pattern

- 오직 하나의 객체만 생성할 수 있는 class

- 일하는 객체를 정의하는 class → business service



접근제한자

 

UML

같은 class

같은 package

다른 class

다른 package

어떤 상황에서든 접근가능

private

-

O

X

X

X

package

friendly

X

O

O

X

X

protected

#

O

O

X

X

상속 : O(super)

public

+

O

O

O

O