본문 바로가기

개발/Java

용어정리(클래스패스, static변수, 정보은닉, 캡슐화)

반응형

클래스패스


클래스패스란 말 그대로 클래스를 찾기 위한 경로를 나타내는 말입니다.

여러 디렉토리에 산재한 클래스들의 위치를 지정해서 패키지Package에 따라 클래스를 찾게 해줄 수 있는 경로를 의미하는 것입니다

물론 자바 파일을 컴파일을 할 때마다 -classpath 옵션을 적어주어도 되겠지만

특정한 경로에 필요한 클래스가 모여 있다면 클래스패스를 주는 것이 훨씬 더 효율적입니다.

클래스프래스를 환경변수에 잡아주게 되면, 그 디렉토리를 기준으로 클래스 파일을 검하게 되는 것입니다.


예를 들어 C:\class라고 클래스패스를 잡아주었고, 그런다음

C:\Java\A.class 라는 파일이 존재하고,

C:\java\B.java이 있다고 할때 B.java에서 A라는 클래스를 상속햇더나, 객체를 생성하는 코드가 있다면 다음과 같이 컴파일할 것입니다.

C:\javaj>javac B.java

하지만 이러한 경우에는 에러가 발생합니다.


(클래스패스를 환경 변수에서 잡으면 현재 폴더에서는 클래스를 찾지 않습니다.

물론 환경변수를 지정하지 않은 상태하면 현재 촐더에서 현재 )


10-1 static 변수(클래스변수)

■ 한 클래스의 모든 인스턴스가 공유하는 static변수
static으로 선언된 변수는 변수가 선언된 클래스의 모든 인스턴스가 공유하는 변수이다.

static으로 선언된 변수는 메모리 공간에 하나만 존재하며, 어디서나 접근이 가능한 변수이다.
단 어디서나 접근이 가능 하려면 static변수도 public 으로 선언되어야 한다.

■ static 변수의 접근 방법
어떠한 형태로 접근을 하건, 접근의 내용에는 차이가 없다. 다만 접근하는 위치에 따라서 접근의 형태가 달라질 수 있다.

■ static변수의 초기화 시점
일반적으로 다른 언어로 구현된 프로그램은 컴파일이 완료되면 하나의 실행파일이 만들어진다.(확장자가 exe인 파일)
그런데 자바 프로그램은 컴파일이 완료되어도 하나의 실행파일로 만들어지지 앟고 여러새의 클래스 파일들만 생성이 된다.
이런 특직 때문에 자바를 조금 부족한 언어로 새각하는 불들이 있는데, 이는 자바프로그램의 실행 원리와 그에 따른 장점을 이해하지 못한 데이서 비롯된 것이다.
이하나의 실행파일로 만들어진 프로그램은 실행이 되기 위해서 실행파일 전부가 한꺼번에 모미 공간에 올라가야 한다. 하지만 자바는 필요한 만큼만 메모리 공간에 올리는 방식으로 실행이 된다.

- JVM은 실행과정에서 필요한 클래스의 정보를 메모리에 로딩한다.
- 바로 이 Loading 시점에서 static변수가 초기화 된다.

■ static 변수 활용의 예
- 동일한 클래스의 인스턴스 사이에서의 데이터 공유가 필요할 때 static변수는 유용하게 활용된다.
- 클래스 내부, 또는 외부에서 참조의 목적으로 선언된 변수는static final 로 선언하다.

클래스 변수의 용도를 정리해보면 아래와 같다.

인스턴스에 따라서 변하지 않는 값이 필요한 경우 (위의 예에서는 PI)

(이런 경우 final을 이용해서 상수로 선언하는 것이 바람직 하지만 final을 아직 배우지 않았기 때문에 언급하지 않았다)인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고 싶은 경우값의 변경 사항을 모든 인스턴스가 공유해야 하는 경우


클래스변수

클래스를 멤버(변수,메소드) 앞에 붙이면 클래스의 멤버가된다


정보의 은닉이란,

 클래스 내부에서 사용되는 변수(필드) 들을 private 이나 protected 등으로 선언해 줌으로, 자기 클래스, 혹은 자식 클래스 외에는 직접적으로 제어를 불가능하게 해주는 것을 의미합니다

get 과 set 함수를 이용하지 않은 직접 제어 불가를 통해, 변수의 값이 마음대로 바뀌는 것을 제어해주는 것 이지요


캡슐화란 

하나의 추상화된 객체를 하나의 묶음으로 하되, 정보 은닉을 포함하는 것 이지요

어디까지묶을지가 문제 개발자의 경험으로판단된다

반응형
LIST

'개발 > Java' 카테고리의 다른 글

변수(Variable)와 자료형(Data Type), 연산자(Operator)  (0) 2018.05.19
Exception 처리  (0) 2018.05.19
객체지향프로그래밍의 이해와 자바의 이름규칙  (0) 2018.05.19
메모리 구조  (0) 2018.05.19
구조체란?  (0) 2018.05.19