java 공부 12강 [패키지와 static] - 평범한 회사원

프로그램|2018. 10. 19. 18:11
















패키지는 서로 관련이 있는 여러 클래스들을 하나로 묶어 사용할 수 있게 한다.

관계있는 클래스와 인터페이스 등을 하나의 단위로 묶은 디렉토리라 할 수 있습니다. 어느 정도 규모가 있는 프로그램을 작성할 때 관련 있는 것들끼리 패키지로 만들어 사용하면 효과적으로 진행할 수 있습니다. 그리고 패키지는 계층화를 할 수 있고 코드 재사용성을 높일 수 있다.


패키지 선언은 소스 코드 중에 맨 앞에(맨위에) 있어야 합니다. 물론 주석은 패키지 선언보다 앞에 작성 가능합니다.


package 패키지 경로;


로 하시면 됩니다. 


패키지는 논리적 코드가 아니라 관련 형식들을 하나의 묶음으로 만드는 것이라 코드에 관한 설명이 필요 없습니다. 바로 간단한 패키지를 만들어 봅시다. 여기에서는 편의상 제가쓰는 이클립스를 사용하겠습니다.





먼저 Java 프로젝트를 생성한 후에 패키지를 추가합니다.



그리고 패키지에 클래스를 추가하세요. 여기에서는 DemoPackage 이름의 클래스를 추가할게요.



New Java Package 창에서 패키지 이름을 입력하여 FInish 버튼을 누르면 패키지는 만들어집니다.


그리고 패키지에 클래스를 추가하세요. 여기에서는 DemoPackage 이름의 클래스를 추가할게요.


만들어진 소스 코드에는 패키지 선언문이 자동으로 작성한 상태입니다.


package myFirstPack;


public class DemoPackage {


}






여기에서는 바로 진입점 main 메서드를 추가하여 실행할게요.


▷ 소스 1.1 첫 번째 패키지


실행결과 입니다.




static


프로그래밍 용어로써의 Static은 정적의,고정의 뜻으로 생각하면 됩니다

자바에서 어떻게 사용이 되는지 보겠습니다.

먼저, 자바는 Statically Type Variable (정적 타입 변수)를 가깁니다.


예를 들어,

이렇게 변수를 가진다고 가정을 할때

int a = 1;


int라는 자료형을 미리 정해줌으로써 a 변수는 정수 실제 데이터 만 담을수 있습니다.

미리 자료형을 고정하므로 Static개념이라고 생각하면됩니다.


많은 스크립트 언어가 윗 개념과의 반대인 Dynamically Type Variable(동적 타입 변수)를 가진다.

예를 들어, 자바스크립트에서는 아래와 같이 변수를 사용합니다.


var a = 1;


여기서는 var(Variable의 약자) 이라는 변수 표시와 함께 변수명 a를 선언 했을때, 실제데이터의 종류에 따라 동적으로

타입이 결정된다. 윗 예시는 실제데이터가 정수형 이므로 a의 자료형은 정수형이 되는것이다. 


두번째로, 자바는 static 예약어를 제공한다. 윗 개념에서 살펴 보았드시, Static은 정적의 고정의 뜻으로 생각하면 된다. 


아래의 예시를 보자.


public class StaticTest{

 static public int a = 1;

 public int b = 3;

 static public void add(){


 }


}


윗 예시는 int 형 변수 a 를 static 예악어를 통해 고정시켜 놓았다. 어딜 고정 시켜 놓은 것 일까?

답은 메모리에 미리 고정시켜 놓은것이다.

클래스 안의 변수를 사용하기 위해서는 인스턴스를 생성해야 한다. 

ex)

 StaticTest st = new StaticTest(); 

 st.a;

 st.add; 


<인스턴스 변수. 변수 or 메서드>

하지만, static 예약어를 사용하면 인스턴스를 생성하기 전에 미리 메모리에 올려놔 고정시킨다.

이렇게 되면 무슨 특징이 있을까? 아래와 같은 특징이 있다.


1. 인스턴스를 생성한 후 이용가능 하던 변수가 static 예약어를 사용함으로써, 미리 메모리에 올라가 있으므로, 인스턴스 생성 없이 바로 사용가능하다.


  StaticTest.a; 

  StaticTest.add();  

<클래스.변수 or 메서드>


2. StaticTest 의 인스턴스를 몇개를 생성하든 a의 변수는 이미 메모리에 올라가 있으므로,


  인스턴스 마다 변수 a가 생기는 것이 아니라 메모리에 미리 올라가 있던 변수 a를 공유한다. 

  따라서 static 예약어를 사용한 변수는 공유변수 라고도 불린다.

  변수a를 공유하므로 변수a크기 만큼 메모리를 아낄 수 도 있다. 

  메서드도 똑같이 생각하면 된다.


3. 만약 변수b를 static 메서드 add안에다가 사용하면 오류가 발생한다. 

  이유는 int b는 StaticTest의 인스턴스가 생성되어야 쓸수 있는 멤버변수지만,

  static public void add()는 인스턴스가 생기길 기다려주지 않고 바로 메모리에 올라가기 때문에 

  StaticTest안에 일반 멤버변수 b는 쓰지 못한다.



여기까지가 준비한 포스팅 내용이다. 프로그래밍 개념으로서의 static은 고정하다, 정적입니다. 

라는 뜻으로 자바 뿐만 아니라 static 개념이 나오는 모든 프로그래밍을 윗 개념으로 이해하면 좋을 것 입니다.


이상입니다 : )

댓글()