본문 바로가기
Java/Java 활용 개념 정리

[Java] package에 대해서(패키지)

by Dev dreamer 2023. 2. 6.

 

 

💡 1. package( 패키지 )


 

패키지

 

➡ 기능이 비슷한 클래스를 모아서 관리하기 쉽게 하기 위해 / package 외부에서 접근하는 것을 막을 때 사용한다.

 

 

외부에서 package 클래스 내부에 접근하는 방법!

➡ class, full name 을 알아야 한다.

➡ 접근 권한을 알아야 한다.(public)

➡ import 구문을 이해해야 한다.

 

🔍 클래스의 이름은 2가지이다.

➡ 기본 이름 :OOClass

➡ 패키지를 포함한 이름(class full name): OO. OOO. OOClass

 

 

🔍 package 내부에 있는 클래스의 접근권한이 생략되면 기본적으로 default 접근권한을 가진다.

      <public 접근 권한이 아니다>

 

 

default 접근권한

1️⃣ package 내부에 있는 클래스에게는 public 접근권한을 갖는다.

2️⃣ package 외부에 있는 클래스에게는 private 접근권한을 갖는다.

 

 

 

 

public 접근권한일 때 외부에서 접근이 가능한데

이때 패키지를 포함한 이름을 모두 사용해서 객체를 생성하거나.

import 를 통해 해당 클래스를 가져오고 이름만 쓰는 경우 2가지가 있다.

 

 

💡 2. package 로 구성된 자바 API에 접근하기!


🔍 자바 API에 접근 및 활용하기.

 

 

 

우리가 만들 때 뿐만 아니라 다른사람이 만들어 놓은 API를 가져다 쓸 때에도 package를 고려해야한다.

 

외부에 필요한 기능들을 package로 묶어서 여러개의 클래스들을 가져다 쓰는것을 API 라고 한다.

 

이러한 클래스들의 집합을 압축해서 만든 파일이 .jar 파일이다.

 

 

자바에서 제공해주는 api는 기본적으로 .jar 파일로 제공되는데 그 파일이름이 jrt-fs.jar이다.

 

이 파일을 압축을 풀어보면 java package 안에 lang package, util package 등 여러가지 package 들이 있다.

(실제로 압축을 풀 필요는 없음.)

 

lang package 는 아주 자주 사용하는 기본 클래스들이 들어있다. 기본 자료형과 관련 되어있는 클래스들로

 

그래서 모든 클래스 들에 default 값으로 들어있다.

 

util package는 뭔가 도움을 주는 클래스들로 대표적으고 ArrayList가 있다.

 

io package 는 입출력 관련 스트림을 포함한 클래스들

 

sql 은 데이터 베이스와 관련된 클래스

 

net 은 네트워킹 관련 클래스 이다.

 

 

lang package에 들어있는 String 클래스에서만 해도 수많은 메소드들이 있다.

당연시 String 클래스는 public 이기 때문에 우리가 해당 클래스를 이용이 가능한것이다.

 

그런데 java.lang 패키지는 모든 클래스에 default 로 import 되어있고 import 문이 생략되어있다.

 

 

 

💡 3. String 클래스


➡ 자바에서 문자열은 쌍 따음표 " " 로 감싸면 된다.

➡ 자바에서 문자열을 저장하는 기본 자료형(DataType)은 없다.

문자열은 여러가지 조작을 할 수 있기 때문에 별도의 클래스로 자료형(java.lang.String)을 만들어 두었다.

➡ 그 이유로 자바에서 문자열은 책, 영화, 회원 처럼 객체로 취급된다.

String 은 변수 안에 데이터를 직접 넣을 수 없으며 String 클래스로 객체를 생성해 변수에 주소를 저장한다.

 

 

 

 

🔍 3.1 문자열 생성 방법 new로 만들기.

 

String str1 = new String("APPLE");

String str2 = new String("APPLE");

 

위와 같이 String 객체 두개를 생성했다고 하자.

 

이때 두 String 객체의 포함된 Apple 이라는 문자열이 있으므로 이 둘을 = 로 표현해서는 안된다.

 

저 두 변수내부에 들어있는 값은 각 객체 데이터를 담은 곳의 주소이며 Apple이 아니다.

 

따라서 str1은 str2 와 같지 않다.

 

만약 내부의 데이터 값의 같음 유무를 판단하려면 어떻게 해야할까?

 

String 타입 메소드중에 equals() 라는 메소드가 있다.

 

str1.equals(str2); 내부의 데이터 값이 같으면 true 같지 않으면 false를 반환한다.

 

 

🔍 3.2 문자열 상수로 만들기.

 

String str3 = "APPLE";

String str4 = "APPLE";

 

이렇게 ""을 통해서 직접 초기값을 넣은 경우에는 Literal Pool에 객체가 생성된다.

(보통 new 로 생성한 String 은 Heap Area에 생성된다)

 

이때 문자열 상수가 생성되는 메모리 영역을 재활용 한다.

즉 내부의 데이터 값이 같으면 재활용을 해 변수에는 같은 공간을 가르키는 번지수가 존재한다.

 

따라사 str3 == str4 을 비교하면 true 가 나온다.

 

 

 

하지만 기본적으로 String 내부의 값을 비교할때는 equals 로 비교하는게 맞다.

==으로 하면 언제는 true 가 나오고 언제는 no 가 나올 수 있기 때문에 항상 equals 로 하기!!

 

 

 

 

 

 

 


Java 관련 개념을 알려주실 때 그 내부 동작이 어떻게 구현되는지 자세하게 알수 있는 강의입니다.

출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)

댓글