자바는 패키지, 모듈, 클래스가 있다. 이들의 관계를 각각 알아보자.
패키지(package)란 폴더와 유사한 개념이다. 한 폴더 내에 동일한 이름의 파일이 있을 수 없다. 하지만 폴더가 다르다면 동일한 이름의 파일이 있을 수 있다. 자바도 동일한 패키지 내에 동일한 class파일이 있을 수 없다. 하지만 패키지가 다를경우 동일한 이름의 class들이 여럿 존재할 수 있다. 서로 관련있는 클래스나 인터페이스의 컴파일된 클래스 파일들을 한곳에 묶어놓은 것이다. 여러 관련 파일이 존재하는 폴더의 개념과 같다.
우리는 여태 패키지를 사용해왔다. Scanner 객체를 사용할때 import java.util.Scanner; 코드를 작성한것을 기억 할것이다. 이게 Scanner클래스를 사용하기위해 Scanner클래스가 있는 경로인 java.util을 작성한것이다. 다른것도 이렇게 사용하면 된다. 여태 작성한 모든 실습문제에 나는 패키지를 사용해왔다. 동일한 RealQuestion 패키지가 각각 4장 5장 프로젝트 폴더안에 들어있다. 여기서 Package 부분을 지우고 포스팅 해왔습니다. 실제로 지운게 아닙니다.
혹시 본인의 노트북이나 데스크탑이 파일과 폴더를 정리해본 적이 있거나 정리해놓은 상태로 사용하는 사람이 있는가? 그 편의성은 어마어마 할 것이다. 자바 프로젝트 또한 패키지로 동일한 성격의 클래스들을 잘 정리해 놓으면 클래스를 사용할때 편리할 것이다. 잘 정리해서 사용합시다.
모듈(module)이란 패키지들을 묶어놓은 것을 말한다. 패키지의 패키지 폴더의 폴더 라고 보면 된다. 자바를 배포하는 오라클은 자바 API를 모듈화하여 JDK 안의 jmods 폴더에 넣어두었다. 그러니까 우리가 Scanner 클래스를 작성하지 않고 사용할 수 있는 이유가 JDK를 다운받을때 그 안에 있기 때문이다.
Wrapper클래스는 앞서 JDK에 있는 8개의 데이터타입을 통칭하는 단어이다. Integer, Double 이런것들.
이들을 객체로 다루는 이유는 변환하기 위함이 대부분이다. 예를들어 int로 설정된 10을 String로 바꾸고 싶다면 어떻게 해야할까? 이때 사용하는것이 객체이다. String s = Integer.toString(10)으로 하던지 int i=10 을 바꾸고 싶다면
String s = Integer.toString(i) 하면 된다. 꽤 자주 쓰이니 암기하는 편이 편하다.
이때 기본 타입 int i =10; 을 Integer객체로 변환하는 것을 박싱(boxing) 이라 하고 반대를 언박싱(unboxing)이라 한다.
String으로 생성된 객체는 모두 힙(Heap)메모리에 동적으로 각각 생성 됩니다. 동일한 문자열이 각각 생성 되는겁니다. 객체니까요. 힙 메모리는 메모리의 4가지 영역중 사용자가 관리하는 영역 이라고 보시면 됩니다.
String은 많이 사용되므로 어느정도 함수들을 아는것도 중요하다.
1. 문자열 비교: int compareTo(String s)
-> 현재 스트링과 매개변수로 주어진 s의 스트링을 사전순으로 비교해 같으면 0 먼저나오면 음수 후에나오면 양수 리턴합니다.
2. 문자열 합침: String concat(String s)
-> 앞의 문자열에 s 를 이어붙입니다.
3. 공백 제거: String trim()
->문자열의 앞과 뒤에있는 공백을 제거한 문자열을 리턴합니다.
4. 문자열의 특정문자 찾기: char charAt(int index)
->String의 특정위치의 문자를 리턴해줍니다. 찾는 문자가 총 몇개 있는지 셀 수도 있죠.
String와 같이 문자열을 다루는 클래스중 StringBuffer클래스도 있습니다. 이 클래스는 문자열을 저장하는 가변 공간(버퍼)을 가지고 문자열을 다루기 때문에 문자열의 수정이 가능합니다. 간단한 문자열은 String클래스로 처리하고 문장이다 싶으면 StringBuffer을 쓰는게 좋아보인다. 나중에 파일 입출력 부분을 공부할때 StringBuffer는 잘쓰이니 까먹지 않았으면 한다.
StringTokenizer 클래스.. 중요합니다. 유용하게 사용할 수 있어요. 기본적으로 문자열을 잘라서 여러 개의 문자열로 분리해줍니다. 엑셀을 사용해 보았으면 특정 문자 (쉼표, 공백 등등)로 셀하나를 잘라 여러개로 나누는걸 해본적 있을텐데요, 자바는 StringTokenizer로 할 수 있습니다. 자바 처음 공부했을때 이걸 이해 못해서 책의 끝까지 이해 못했던 기억이 있네요. 지금 읽는 분들은 잘 이해하고 넘어갔으면 좋겠습니다.
Math클래스는 산술연산을 제공합니다. Math.random()을 활용해서 난수를 생성했었는데 Math객체를 만들지 않고 사용했습니다. Math는 모든 멤버가 static이니까 가능한겁니다. static으로 선언된 함수나 변수는 어디서든 접근 할수 있다고 배웠습니다.
나머지들도 다 예제와 함께 해보길 바랍니다. 그래야 실습문제를 풀 수 있을겁니다.
'[책]명품 JAVA Programming' 카테고리의 다른 글
명품 자바 프로그래밍 6장 OpenChallenge&실습문제 (0) | 2021.01.16 |
---|---|
명품 자바 프로그래밍 5장 OpenChallenge&실습문제 (0) | 2021.01.05 |
명품 자바 프로그래밍 5장 요약 (0) | 2021.01.02 |
명품 자바 프로그래밍 4장 OpenChallenge&실습문제 (0) | 2021.01.01 |
명품 자바 프로그래밍 4장 요약 (0) | 2020.12.29 |