//ch06_모듈과 패키지
📌 패키지 : 서로 관련 있는 클래스나 인터페이스의 컴파일된 클래스 파일들을 한 곳에 묶어놓은 것
📌 모듈 : 자바JDK가 패키지들을 묶는 단위
📌 import 문 : 클래스의 경로명을 컴파일러에게 알려주는 문
ex) import 패키지.클래스;
📌 한 패키지에 있는 여러 클래스를 import 하고자 하는 경우 *를 사용하여 한 번에 선언
ex) import 패키지.*;
📌 패키지 선언 : 자바 소스 파일이 컴파일되어 생기는 클래스 파일은 반드시 패키지에 소속되어야 한다. 클래스가 소속될 패키지 명은 pakage 키워드를 이용해 소스 파일 첫 줄에 선언한다.
ex) pakage 패키지명;
ex) Tools 클래스 작성 후 UI 패키지에 저장
package UI; //Tools 클래스를 컴파일하여 UI 패키지에 저장할 것을 지시
public class Tools { //이제 이 클래스의 경로명은 UI.Tools가 된다.
.....
}
📌 다른 패키지에 있는 클래스에서 Tools 클래스를 사용하고자 할 때
import UI.Tools;
📌Tools 클래스를 사용하는 Line 클래스
package Graphic; // Line 클래스를 Graphic 패키지에 저장
import UI.Tools; // Tools 클래스의 경로명 알림
public class Line {
public void draw() {
Tools t = new Tools();
}
}
📌 디폴트 패키지 = 현재 디렉토리
📌 모듈 : 패키지는 서로 관련 있는 클래스나 인터페이스의 컴파일된 클래스 파일을 한 곳에 담는 컨테이너이고, 모듈은 패키지들을 담는 컨테이너로 모듈파일(.jmod)로 저장한다.
📌 자바 모듈화의 목적
- 자바 컴포넌트들을 필요에 따라 조립하여 사용하기 위함
- 세밀한 모듈화를 통해 필요없는 오듈이 로드되지 않게 하여 컴퓨터 시스템에 불필요한 부담을 줄인다.
- 하드웨어가 열악한 소형 IoT 장치에서도 자바 응용프로그램이 실행되고 성능을 유지하게 한다.
📌 자바를 설치하면 자바 개발 도구인 JDK가 설치되며 이곳에는 개발자들이 사용할 수 있는 많은 클래스들이 패키지에 담기고 다시 모듈에 담겨 제공된다.
📌 System.out.println()에서 System은 JDK의 java.lang페키지에 속한 클래스이다.이러한 자바 API가 없다면 개발자가 화면 출력, 키 입력, 네트워킹 등 모든 기능을 직접 구현해야 한다.
📌 JDK의 표준 패키지는 모듈로 나누어져 JDK를 설치한 디렉터리 밑의 jmods 디렉터리에 담겨있다.
📌 주요 패키지
- java.lang
- System을 비롯하여 문자열, 수학 함수, 입출력 등과 같은 기본적인 클래스와 인터페이스 제공
- 따로 import문을 사용하지 않아도 자동으로 import됨
- java.util
- 날짜, 시간, 벡터, 해시맵 등 다양한 유틸리티 클래스와 인터페이스 제공
- java.io
- 키보드, 모니터, 프린터, 파일 등에 입출력 하는 클래스와 인터페이스 제공
- java.awt와 javax.swing
- 자바 AWT(Abstract Windowing Toolkit)와 swing패키지로서 GUI프로그래밍에 필요한 클래스와 인터페이스 제공
📌 Object 클래스
- java.lang 패키지에 속한 클래스이며 모든 클래스에 강제로 상속된다.
- Object만이 아무 클래스도 상속받지 않는 유일한 클래스로 계층 구조 최상위 클래스이다.
- Object obj = new Object(); //오브젝트 클래스 객체 생성
📌 toString() 메소드 ; 객체를 문자열로 변환
📌 equals() 메소드 ; 레퍼런스 값을 비교하는 것이 아닌 객체의 내용이 같은지 비교하는 메소드
📌Wrapper 클래스 개념
- Byte, Short, Integer, Long, Character, Double, Float, Boolen 클래스가 기본 타입에 해당되는 값을 객체로 다룰 수 있게 하는 클래스
- java.lang에서 제공됨
- 기본 타입과 그에 대응하는 Wrapper 클래스
기본 타입byteshortintlongcharfloatdoubleboolean
Wrapper 클래스 | Byte | Short | Integer | Long | Char | Float | Double | Boolean |
- 정적 메소드는 valueOf()를 호출하여 생성
Integer i = Integer.valueOf(10); //정수 10의 객체화 Character c =Character.valueOf('c'); //문자 'c'의 객체화 Double d = Double.valueOf(3.14); //실수 3.14의 객체화 Boolean b = Boolean.valueOf(true); //불린 값 true의 객체화
- Character를 제외한 나머지 Wrapper 클래스의 경우 문자열로 Wrapper 객체를 생성할 수 있다.
Integer i = Integer.valueOf("10"); Double d = Double.valueOf("3.14");
📌Wrapper 클래스의 활용
메소드설명
static int bitCount(int i) | 정수 i의 이진수 표현에서 1의 개수 리턴 |
float floatValue() | float 타입으로 값 리턴 |
int intValue() | int 타입으로 값 리턴 |
long longValue() | long 타입으로 값 리턴 |
static int parseInt(string s) | 문자열 s를 10진 정수로 변환한 값 리턴 |
static String toString(int i) | 정수 i를 문자열로 변환하여 리턴 |
static Integer valueOf(int i) | 정수 i를 담은 Integer 객체 리턴 |
static Integer valueOf(String s) | 문자열 s를 정수로 변환하여 담고 있는 Integer 객체 리턴 |
📌parse 메소드는 모두 static 타입이므로 Wrapper 클래스의 이름으로 바로 메소드를 호출한다.
📌박싱과 언박싱
- 박싱 : 기본 타입의 값을 Wrapper 객체로 변환하는 것
- 언박싱 : Wrapper 객체에서 기본 타입으로 변환시키는 것
Integer ten = 10; //자동 박싱. Integer ten = Integer.valueOf(10);로 자동 처리
int n = ten; //자동 언박싱. int n = ten.intValue();로 자동 처리
📌String 클래스
char data[] = {'a', 'b', 'c', 'd'};
String str1 = new String(data); //str1 = "abcd";
String str2 = new String("abcd"); //str2 = "abcd";
생성자 | 설명 |
String() | 빈 스트링 객체 생성 |
String(char [] value) | char 배열에 있는 문자들을 스트링 객체로 생성 |
String(String original) | 매개 변수로 주어진 문자열과 동일한 스트링 객체 생성 |
Srting(StringBuffer buffer) | 매개 변수로 주어진 스트링 버퍼의 문자열을 스트링 객체로 생성 |
📌스트링 리터럴과 new String()의 차이
- 스트링 리터럴 : 자바 내부에서 리터럴 테이블로 특별히 관리하여, 동일한 리터럴을 공유시킨다.
- 스트링 생성에 따른 실행 시간을 줄여주지만 한전 만들어지면 수정이 불가능하다.
- new String() : new를 이용하여 생성되는 다른 객체와 동일하게 heap메모리에 생성된다.
- 내용이 같아도 독립적으로 생성되며 실행된다.
📌문자열 비교 : int compareTo(String anotherString)
📌문자열 연결 : String concat(String str)
📌공백 제거 : String trim()
📌문자열의 문자 : char charAt(int index)
📌StringBuffer의 생성과 특징
- java.lang 패키지에 포함
- String객체의 경우 내부의 문자열을 수정할 수 없지만
- StringBuffer 객체는 문자열을 저장하는 가변 버퍼를 가지고 있어 저장된 문자열의 수정이 가능하다.
📌StringTokenizer의 생성과 특징
- java.util 패키지에 포함
- 하나의 문자열을 여러 개의 문자열로 분리하기 위해 사용
'Java > Java 기본 개념' 카테고리의 다른 글
[J06] Java_자바 GUI 기초, AWT와 스윙 (1) (0) | 2021.09.18 |
---|---|
[J05] Java_입출력 스트림과 파일 입출력 (0) | 2021.09.16 |
[J03] Java_상속 (0) | 2021.09.03 |
[J02] Java_클래스와 객체 (0) | 2021.08.27 |
[J01] Java_시작 (0) | 2021.08.20 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!