티스토리 뷰

728x90
반응형

캡슐화

 

캡슐화는 상속과 마찬가지로 자바 객체지향 프로그래밍의 중요 개념 중 하나이다.

 

먼저 간단하게 정의하자면, 

 

캡슐화 관련이 있는 필드와 메서드를 하나의 클래스로 묶어 데이터를 외부로부터 보호하는 일이다.

 

구체적으로 나누자면 첫 째로는 데이터 보호, 두 번째로는 내부 데이터의 불필요한 노출 방지에 그 목적이 있다.

 

즉, 캡슐화의 가장 큰 장점은 데이터 은닉(data hiding)에 있다고 볼 수 있다.

 

외부로부터 객체의 필드와 메서드가 함부로 변경 되는 것을 막고,

 

데이터가 변경 되더라도 다른 객체에 영향을 주지 않도록 할 수 있다.

 

이는 코드 확장시에 오류를 최소화 하는데 도움이 되며, 당연히 유지보수에도 장점이 된다.

 


패키지

 

패키지(Package)는 관련이 있는 클래스와 인터페이스의 묶음을 의미한다.

 

필드와 메서드를 클래스로 묶어 효율적으로 관리 했듯이,

 

클래스와 인터페이스를 패키지로 묶어 효율적으로 관리하는 데 그 목적이 있다고 할 수 있다.

 

자바에서 패키지는 물리적인 디렉토리(Directory)이며, 패키지에 속한 클래스와 인터페에스는 그 디렉토리에 속해있다.

 

디렉토리의 계층구조간 구분은 점(.)으로 표현되며,

 

패키지가 있는 경우 소스 코드의 첫 번째 줄에 반드시 package 패키지명이 표시되어야 한다.

 

구체적인 사용 방법은 다음과 같다.

// 패키지를 생성했을 때
package practicepack.test; // 패키지 구문 포함. 패키지가 없다면 구문 필요없음

public class PackageEx {

}

자바에는 기본적인 패키지가 많이 있는데, 그 중 하나가 자주 사용하는 String 클래스이며

 

그 실제 이름은 java.lang.String이다. 여기서 java.lang은 패키지 명을 나타내고, 점(.)을 사용하여 계층구도를 표시한다.

 

이렇게 패키지를 만드는 것의 큰 장점 하나는 클래스의 충돌을 방지해준다는 것이다.

 

같은 이름의 클래스를 가지고 있더라도 다른 패키지에 소속되어 있으면 중복정의로 충돌이 발생하지 않는다.

 

이어서 다른 패키지의 클래스를 사용하기 위한 방법에 대해 알아보자.

 

import문은 패키지 구문과 클래스문 사이에 작성되며, 다른 패키지와 클래스를 불러오는 데 쓰인다.

import 패키지명.클래스명; 또는 import 패키지명.*;

import문의 사용 방법은 위와 같으며, import 패키지명.*;을 사용하면

 

해당 패키지의 모든 클래스를 패키지명 없이 사용할 수 있게 된다.

 

예를 들어보자.

package practicepack.test;

public class ExampleImp {
		public int a = 10;
		public void print() {
			System.out.println("Import문 테스트")
}
package practicepack.test2; 

import practicepack.test.ExampleImp // import문 작성

public class PackageImp {
		public static void main(String[] args) {
			ExampleImp x = new ExampleImp(); // 패키지명을 생략 가능
		}
}

참고로 import문 없이 패키지를 불러오면 다음과 같은 코드가 된다.

package practicepack.test2; // import문을 사용하지 않는 경우, 다른 패키지 클래스 사용방법

public class PackageImp {
		public static void main(String[] args) {
			practicepack.test.ExampleImp example = new practicepack.test.ExampleImp();
		}
}

import문을 사용했을 때 훨씬 짧고 간결한 코드가 완성됨을 볼 수 있다.

 

추가로 import문은 컴파일 시에 처리가 되기 때문에 프로그램의 성능에는 영향을 미치지 않는다고 한다.

반응형

'Java+Spring > Java' 카테고리의 다른 글

[Java]다형성(Polymorphism)  (0) 2022.07.15
[Java]Getter/Setter 메서드  (0) 2022.07.15
[Java]접근 제어자(Access Modifier)  (0) 2022.07.15
[Java]Object 클래스  (2) 2022.07.13
[Java]super vs. super()  (0) 2022.07.13
[Java]메서드 오버라이딩(Method Overriding)  (0) 2022.07.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
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
글 보관함