[JAVA] 패키지

MINJEE·2024년 1월 14일

SMHRD_8_Java

목록 보기
7/10
post-thumbnail

패키지 (Package)

모듈 > 패키지 > 클래스

  • 모듈(module) : 여러 패키지와 이미지 등 자원을 모아 놓은 컨테이너
    • 모듈 파일(.jmod)로 저장
      (C:\Program Files\Java\jdk-17\jmods 디렉터리에 존재)
    • 모듈화 목적 : 응용프로그램 실행 시 꼭 필요한 모듈들로만 실행 구축 → 컴퓨터 시스템의 불필요한 부담 감소
  • 패키지(package) : 관련 클래스 파일들을 묶어 놓은 디렉터리
    • package선언문이 없는 자바 소스 파일은 디폴트 패키지에 소속됨
    • JDK의 주요 패키지 : java.lang, java.util, java.io, java.awt, javax.swing

🔷 java.lang.Object 클래스

  • 모든 클래스의 슈퍼클래스
  • 모든 클래스가 상속받는 공통 메소드 포함
  • 메소드
    • boolean 클래스변수.equals(Object obj) : obj가 가리키는 객체와 메모리 주소가 같으면 true (객체1 == 객체2 와 결과 동일)
      (객체가 값으로 저장되어 있으면 내용 비교!!)
    • Class 클래스변수.getClass() : 런타임 클래스 객체 리턴
      (결과형태: 패키지명.클래스명)
    • int 클래스변수.hashCode() : 해시코드 값 리턴 (실행할 때마다 다를 수 있음)
    • String 클래스변수.toString() : 객체를 문자열 표현
      (클래스변수 출력과 결과 동일)
  • equals()메소드와 toString()메소드는 클래스 내에서 오버라이딩하여 많이 사용
  • 일반적으로 equals(), hashCode() 메소드는 값 자체가 같으면 true, 아니면 false를 반환하도록 오버라이딩하여 사용

🔷 java.lang.Wrapper 클래스

  • 기본타입을 클래스화한 8개 클래스(Byte, Short, Integer, Long, Character, Float, Double, Boolean)를 총칭
  • 데이터타입 중 기본타입을 객체로 다루기 위해 사용

🔹 박싱과 언박싱

  • 박싱(boxing) : 기본타입의 값을 Wrapper객체로 변환하는 것 = Wrapper 객체 생성
    • 래퍼클래스명 래퍼변수 = 래퍼클래스명.valueOf(기본타입값/문자열);
    • ex. Integer ten = Integer.valueOf(10); (10 대신 “10”도 가능)
    • 자동 박싱 : 래퍼클래스명 래퍼변수 = 기본타입값;
  • 언박싱(unboxing) : Wrapper객체에 들어있는 기본타입의 값을 빼내는 것(박싱의 반대)
    • 데이터타입 변수명 = 래퍼변수.타입Value();
    • ex. int n = ten.intValue(); (int n = 10; 과 동일한 결과)
    • 자동 언박싱 : 데이터타입 변수명 = 래퍼변수;

🔹 관련 메소드

  • 메소드 (언박싱에서 =의 오른쪽에 해당하는 부분)
    • 래퍼변수.floatValue() : float타입으로 리턴
    • 래퍼변수.intValue() : int타입으로 리턴
    • 래퍼변수.longValue() : long타입으로 리턴
    • 래퍼변수.shortValue() : short타입으로 리턴
  • Integer클래스의 메소드
    • Integer.parseInt(String s) : 문자열s를 10진 정수로 리턴 (문자열이므로 “ “ 사용!)
    • Integer.parseInt(String s, int radix) : 문자열s를 진법의 정수로 리턴
    • Integer.toBinaryString(int i) : 정수 i를 이진수 표현으로 문자열 리턴
    • Integer.toHexString(int i) : 정수 i를 16진수 표현으로 문자열 리턴
    • Integer.toOctalString(int i) : 정수 i를 8진수 표현으로 문자열 리턴
    • Integer.toString(int i) : 정수 i를 문자열로 리턴
    • Integer.bitCount(int i) : 정수 i의 2진수 표현에서 1의 개수 리턴
  • 문자열 과 기본타입 변환 (위에는 래퍼클래스명이 Integer일 경우)
    • 래퍼클래스명.parse타입(문자열) : 문자열 → 기본타입 변환
    • 래퍼클래스명.toString(기본타입값) : 기본타입 → 문자열 변환
// 예시 : Wrapper클래스 사용해보기
public class WrapperEx {
	public static void main(String[] args) {
		// Character클래스 사용
		System.out.println(Character.toLowerCase('A')); // 'A'를 소문자로 변환
		char c1='4', c2='F';
		if(Character.isDigit(c1)) // 문자 c1이 숫자이면 true
			System.out.println(c1 + "는 숫자");
		if(Character.isAlphabetic(c2)) // 문자 c2가 영문자이면 true
			System.out.println(c2 + "는 영문자");

		// Integer클래스 사용
		System.out.println(Integer.parseInt("28")); // 문자열 "28"을 10진수로 변환
		System.out.println(Integer.toString(28)); // 정수 28을 문자열로 변환
		System.out.println(Integer.toBinaryString(28)); // 28을 2진수 문자열로 변환
		System.out.println(Integer.bitCount(28)); // 28에 대한 2진수의 1의 개수
		Integer i = Integer.valueOf(28);
		System.out.println(i.doubleValue()); // 정수를 double 값으로 변환. 28.0

		// Double클래스 사용
		Double d = Double.valueOf(3.14);
		System.out.println(dtoString()); // Double을 문자열 "3.14"로 변환
		System.out.println(Double.parseDouble("3.14")); // 문자열을 실수 3.14로 변환

		// Boolean클래스 사용
		boolean b = (4>3); // b는 true
		System.out.println(Boolean.toString(b)); // true를 문자열 "true"로 변환
		System.out.println(Boolean.parseBoolean("false")); // 문자열을 false로 변환
	}
}

🔷 java.lang.String 클래스

  • 문자열 리터럴 : 자바 가상 기계 내부에서 리터럴 테이블에 저장되고 관리, 응용프로그램에서 공유
  • new로 생성된 문자열 : Heap공간에 문자열 객체 생성, 공유x
// 모두 "abc"문자열

// "abc"는 문자열 리터럴
String s1 = "abc"; 
String t1 = "abc"; //s1과 t1은 문자열 리터럴 테이블에서 같은 "abc"를 가리킴

//new생성자로 문자열 생성
String s2 = new String("abc"); 
String t2 = new String("abc"); //s2와 t2는 힙 공간에 따로 생성됌
char data[] = {'a','b','c'}; 
String s3 = new String(data);
  • 문자열 객체는 수정 불가능 (문자열 리터럴이든 new로 생성했든 수정x)
  • 메서드
    • 변수.charAt(int 인덱스) : 인덱스에 있는 문자 값 리턴
    • 변수.codePointAt(int 인덱스) : 인덱스에 있는 유니코드 값 리턴
    • 변수.compareTo(String 다른문자열) : 두 문자열을 사전적 순서 기준으로 비교(같으면 0, 다른문자열보다 먼저 나오면 음수, 아니면 양수 리턴)
    • 변수.concat(String 문자열) : 현 문자열 뒤에 문자열을 덧붙인 문자열 리턴
    • 변수.contains(CharSequence 문자들) : 문자들을 포함하면 true (ex. “우리나라 대한민국 만세”.contains(”대한민국 만세”) → true, .contains(”우리나라 만세”) → false)
    • 변수.length() : 문자열 길이(문자 개수) 리턴
    • 변수.replace(Charsequence 원래문자들, Charsequence 새로운문자들) : 원래문자들 부분을 새로운 문자들로 변경한 문자열 리턴
    • 변수.split(String 구분자) : 구분자를 기준으로 문자열을 분리하여 배열로 리턴
    • 변수.subString(int 인덱스) : 인덱스부터 시작하는 서브문자열 리턴
    • 변수.toLowerCase() : 소문자로 변경한 문자열 리턴
    • 변수.toUpperCase() : 대문자로 변경한 문자열 리턴
    • 변수.trim() : 앞뒤 공백 제거한 문자열 리턴
  • 두 문자열 비교 : equals(), compareTo() 사용 (절대 == 사용금지)
    • 변수.equals(String 문자열) : 같으면 true, 아니면 false
    • 변수.compareTo(String 다른문자열) : 같으면 0, 사전에서 다른문자열보다 먼저 나오면 음수, 아니면 양수

🔷 java.lang.StringBuffer 클래스

  • 가변문자열을 다루는 클래스
  • String 클래스와 달리 수정 가능 (따로 업데이트 안해도 됨)
  • StringBuffer 변수 = new StringBuffer(문자열);
StringBuffer sb = new StringBuffer("This");
sb.append(" is pencil."); // sb = "This is pencil." (자동 업데이트)
sb.insert(7, " my"); // sb = "This is my pencil."
sb.replace(8, 10, "your"); // sb = "This is your pencil."
System.out.println(sb); // "This is your pencil." 출력

🔷 java.util.StringTokenizer 클래스

  • 구분자를 기준으로 문자열을 분리하는 클래스
  • 토큰(token) : 구분 문자로 분리된 문자열
String 문자열변수 = "name=minjee&age=26&addr=seoul";

StringTokenizer  st = new StringTokenizer(문자열변수, "&"); //구분문자 : &
st.countTokens(); //3, 토큰 개수
while(st.hasMoreTokens()) { //다음 토큰 존재 여부 (토큰 하나씩 모두 출력)
		String token = st.nextToken();  //"가나다", 다음 토큰 얻어내기
		System.out.print(token + "  "); 
} // name=minjee  age=26  addr=seoul

StringTokenizer st = new StringTokenizer(문자열변수, "&="); // 구분문자 2개 : &, =
st.countTokens(); //6
while(st.hasMoreTokens() { 
		String token = st.nextToken(); 
		System.out.print(token + "  "); 
} // name  minjee  age  26  addr  seoul

🔷 java.lang.Math 클래스

  • 기본 산술 연산 메소드를 제공하는 클래스
  • 모든 클래스는 static으로 선언
  • Math.random() : 0~1(1은 불포함) 실수난수 생성
    • java.util.Random 클래스 이용 가능 Random 랜덤변수 = new Random();
    • 랜덤변수.nextInt(n); 0~n-1 정수 범위 난수 발생
Math.abs(-3.14) //3.14, 절대값
Math.sqrt(9.0) //3.0, 제곱근
Math.exp(2) //7.3890..., e의 2승
Math.round(3.14) //3, 반올림
(int)(Math.random()*45 + 1) //1~46(46포함x) 실수난수의 정수형으로 변환하여 정수 난수 생성
profile
개발, 분석 배운 내용 정리하기!

0개의 댓글