IT’s Portfolio

[Java] Lecture - Day 9 λ³Έλ¬Έ

Development Study/Java

[Java] Lecture - Day 9

f1r3_r41n 2023. 12. 12. 01:05
728x90
λ°˜μ‘ν˜•

πŸ–₯ Basic Java - Day 9

πŸ‘‰πŸ» [Chapter 06] λͺ¨λ“ˆκ³Ό νŒ¨ν‚€μ§€ κ°œλ…, μžλ°” νŒ¨ν‚€μ§€ ν™œμš©

νŒ¨ν‚€μ§€μ™€ λͺ¨λ“ˆ

  • Package
    • μ„œλ‘œ κ΄€λ ¨λœ ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ»΄νŒŒμΌν•œ 클래슀 파일(.class) 듀을 λ¬Άμ–΄ 놓은 디렉터리
    • ν•˜λ‚˜μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ ν•œ 개 μ΄μƒμ˜ νŒ¨ν‚€μ§€λ‘œ μž‘μ„±
    • νŒ¨ν‚€μ§€λŠ” jar 파일둜 μ••μΆ• κ°€λŠ₯
    • νŒ¨ν‚€μ§€ κ°œλ…κ³Ό ν•„μš”μ„±
      • 3λͺ…이 λΆ„λ‹΄ν•˜μ—¬ μžλ°” μ‘μš© ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜λŠ” 경우, λ™μΌν•œ μ΄λ¦„μ˜ ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•  κ°€λŠ₯성이 있음
        • ν•©μΉ  λ•Œ 였λ₯˜ λ°œμƒ κ°€λŠ₯μ„±
        • κ°œλ°œμžκ°€ μ„œλ‘œ λ‹€λ₯Έ λ””λ ‰ν„°λ¦¬λ‘œ μ½”λ“œλ₯Ό κ΄€λ¦¬ν•˜μ—¬ 해결함
  • Module
    • JDK 9λΆ€ν„° νŒ¨ν‚€μ§€λ“€μ„ λͺ¨λ“ˆ λ‹¨μœ„λ‘œ λ¬Άμ–΄ 제곡
    • μ—¬λŸ¬ νŒ¨ν‚€μ§€μ™€ 이미지 λ“±μ˜ μžμ›μ„ λͺ¨μ•„ 놓은 μ»¨ν…Œμ΄λ„ˆ
    • ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ„ ν•˜λ‚˜μ˜ .jmod νŒŒμΌμ— μ €μž₯
  • Java 9λΆ€ν„° λͺ¨λ“ˆν™” λ„μž…
    • ν”Œλž«νΌμ˜ λͺ¨λ“ˆν™”
      • Java 9λΆ€ν„° μžλ°” API의 λͺ¨λ“  ν΄λž˜μŠ€λ“€μ„ νŒ¨ν‚€μ§€ κΈ°λ°˜μ—μ„œ λͺ¨λ“ˆλ“€λ‘œ μ™„μ „νžˆ μž¬κ΅¬μ„±
        • μžλ°” APIλ₯Ό μ—¬λŸ¬ λͺ¨λ“ˆ(99개)둜 λΆ„ν• 
      • Java 8κΉŒμ§€λŠ” rt.jar의 ν•œ νŒŒμΌμ— λͺ¨λ“  API μ €μž₯
    • μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“ˆν™”
      • ν΄λž˜μŠ€λ“€μ€ νŒ¨ν‚€μ§€λ‘œ λ§Œλ“€κ³ , λ‹€μ‹œ νŒ¨ν‚€μ§€λ₯Ό λͺ¨λ“ˆλ‘œ λ§Œλ“¦
      • λͺ¨λ“ˆ ν”„λ‘œκ·Έλž˜λ°μ€ μ–΄λ ΅κ³  λ³΅μž‘ν•˜λ―€λ‘œ κΈ°μ‘΄ λ°©μ‹μœΌλ‘œ ν”„λ‘œκ·Έλž¨ μž‘μ„±
  • λͺ¨λ“ˆμ˜ ν˜„μ‹€
    • Java 9λΆ€ν„° μ „λ©΄μ μœΌλ‘œ λ„μž…
    • λ³΅μž‘ν•œ κ°œλ…
    • 큰 μžλ°” μ‘μš© ν”„λ‘œκ·Έλž¨μ—λŠ” 개발, μœ μ§€λ³΄μˆ˜ 등에 적합
    • ν˜„μ‹€μ μœΌλ‘œ λͺ¨λ“ˆλ‘œ λ‚˜λˆ„μ–΄ μžλ°” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  ν•„μš”κ°€ μ—†μŒ

μžλ°” API의 λͺ¨λ“ˆ νŒŒμΌλ“€

  • μžλ°” JDK에 μ œκ³΅λ˜λŠ” λͺ¨λ“ˆ νŒŒμΌλ“€
    • μžλ°”κ°€ μ„€μΉ˜λœ jmods 디렉터리에 λͺ¨λ“ˆ 파일 쑴재
      • .jmod ν™•μž₯자λ₯Ό 가진 파일
      • jdk 10의 경우 99개 λͺ¨λ“ˆ 파일
      • λͺ¨λ“ˆ νŒŒμΌμ€ zip 포멧으둜 μ••μΆ•λœ 파일
  • λͺ¨λ“ˆ νŒŒμΌμ—λŠ” μžλ°” API의 νŒ¨ν‚€μ§€μ™€ ν΄λž˜μŠ€λ“€μ΄ λ“€μ–΄ 있음
  • jmod λͺ…령을 μ΄μš©ν•˜μ—¬ λͺ¨λ“ˆ νŒŒμΌμ— λ“€μ–΄ μžˆλŠ” νŒ¨ν‚€μ§€λ₯Ό ν’€μ–΄λ‚Ό 수 있음

νŒ¨ν‚€μ§€ μ‚¬μš©ν•˜κΈ°, import λ¬Έ

  • λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— μž‘μ„±λœ 클래슀 μ‚¬μš©
    • importλ₯Ό μ΄μš©ν•˜μ§€ μ•ŠλŠ” 경우
      • java.util.Scanner sc = new java.util.Scanner(System.in);
      • μ†ŒμŠ€μ— 클래슀 μ΄λ¦„μ˜ μ™„μ „ 경둜λͺ… μ‚¬μš©
    • ν•„μš”ν•œ 클래슀만 import
      • μ†ŒμŠ€ μ‹œμž‘ 뢀뢄에 클래슀의 경둜λͺ… import
      • import java.util.Scanner;
      • μ†ŒμŠ€μ—λŠ” 클래슀 λͺ…λ§Œ λͺ…μ‹œν•˜λ©΄ 됨
    • νŒ¨ν‚€μ§€ 전체λ₯Ό import
      • μ†ŒμŠ€ μ‹œμž‘ 뢀뢄에 νŒ¨ν‚€μ§€μ˜ '경둜λͺ….*' import
      • import java.util.*;
      • μ†ŒμŠ€μ—λŠ” 클래슀 λͺ…λ§Œ λͺ…μ‹œν•˜λ©΄ 됨
      • java.util νŒ¨ν‚€μ§€ λ‚΄μ˜ λͺ¨λ“  ν΄λž˜μŠ€λ§Œμ„ 지정, ν•˜μœ„ νŒ¨ν‚€μ§€μ˜ ν΄λž˜μŠ€λŠ” ν¬ν•¨ν•˜μ§€ μ•ŠμŒ

νŒ¨ν‚€μ§€ λ§Œλ“€κΈ°

  • 클래슀 파일(.class)이 μ €μž₯λ˜λŠ” μœ„μΉ˜λŠ”?
    • ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€κ°€ 컴파일되면 클래슀 파일 생성
    • 클래슀 νŒŒμΌμ€ νŒ¨ν‚€μ§€λ‘œ μ„ μ–Έλœ 디렉터리에 μ €μž₯
// Tools 클래슀의 경둜λͺ…은 UI.Toolsκ°€ 됨
package UI; // μ•„λž˜ Toolsλ₯Ό μ»΄νŒŒμΌν•˜μ—¬ UI νŒ¨ν‚€μ§€(UI 디렉터리)에 μ €μž₯ν•  것 μ§€μ‹œ
public class Tools {
    ...
}
package Graphic; // μ•„λž˜ Line 클래슀λ₯Ό Graphic νŒ¨ν‚€μ§€μ— μ €μž₯
import UI.Tools; // UI.Tools 클래슀의 경둜λͺ… μž„ν¬νŠΈ
public class Line extends Shape {
    public void draw() {
        Tools t = new Tools();
    }
}
  • νŒ¨ν‚€μ§€ μ„ μ–Έ
    • μ†ŒμŠ€ 파일의 맨 μ•žμ— 컴파일 ν›„ μ €μž₯될 νŒ¨ν‚€μ§€ 지정
      • package νŒ¨ν‚€μ§€λͺ…;

λ””ν΄νŠΈ νŒ¨ν‚€μ§€

  • package 선언문이 μ—†λŠ” μžλ°” μ†ŒμŠ€ 파일의 경우
    • μ»΄νŒŒμΌλŸ¬λŠ” ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ””ν΄νŠΈ νŒ¨ν‚€μ§€μ— μ†Œμ†μ‹œν‚΄
    • λ””ν΄νŠΈ νŒ¨ν‚€μ§€ : ν˜„μž¬ 디렉터리

μžλ°” ν”Œλž«νΌμ˜ λͺ¨λ“ˆν™”

  • μžλ°” ν”Œλž«νΌ
    • μžλ°”μ˜ 개발 ν™˜κ²½(JDK)κ³Ό μžλ°”μ˜ μ‹€ν–‰ ν™˜κ²½(JRE)을 지칭
      • Java SE(μžλ°” API) 포함
    • μžλ°”μ˜ API의 λͺ¨λ“  ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ 개의 λͺ¨λ“ˆλ‘œ μž¬κ΅¬μ„±λ¨
    • λͺ¨λ“ˆ νŒŒμΌμ€ JDK의 jmods 디렉터리에 μ €μž₯ν•˜μ—¬ 배포
  • λͺ¨λ“ˆ νŒŒμΌλ‘œλΆ€ν„° λͺ¨λ“ˆμ„ ν‘ΈλŠ” λͺ…λ Ή
    • jmod extract "jmod 파일 경둜λͺ…"
      • ν˜„μž¬ 디렉터리에 λͺ¨λ“ˆμ΄ ν’€λ¦Ό

λͺ¨λ“ˆ 기반의 μžλ°” μ‹€ν–‰ ν™˜κ²½

  • μžλ°” API 클래슀의 μ»¨ν…Œμ΄λ„ˆ
    • Java 8κΉŒμ§€
      • rt.jar의 단일체에 μžλ°” API의 νŒ¨ν‚€μ§€λ“€μ„ λͺ¨λ‘ λ‹΄μŒ
    • Java 9 이후
      • rt.jarλ₯Ό λ²„λ ΈμŒ
      • μžλ°” APIλ₯Ό λ§Žμ€ 수(99개)의 λͺ¨λ“ˆ νŒŒμΌμ— λ‚˜λˆ„μ–΄ μ €μž₯
  • λ””ν΄νŠΈ μ‹€ν–‰ ν™˜κ²½
    • Java 8κΉŒμ§€
      • μ‹€ν–‰λ˜λŠ” 컴퓨터에 rt.jar μ„€μΉ˜(rt.jar의 크기가 큼)
    • Java 9 이후
      • modules(JRE의 lib 밑에) λΉ„κ³΅κ°œ 파일(109mb)에 λͺ¨λ“ˆ μ €μž₯
      • μ‘μš© ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ modules νŒŒμΌμ—μ„œ ν•„μš”ν•œ λͺ¨λ“ˆ 및 클래슀 λ‘œλ”©
  • λ§žμΆ€ν˜• μ‹€ν–‰ ν™˜κ²½(custom JRE)
    • Java 8κΉŒμ§€
      • μ—†μŒ
      • μ†Œν˜• 기기에 rt.jarλ₯Ό μ„€μΉ˜ν•  수 μ—†λŠ” ν•œκ³„
    • Java 9 이후
      • λ§žμΆ€ν˜• μ‹€ν–‰ ν™˜κ²½ ꡬ좕 κ°€λŠ₯
      • jlink λͺ…령을 μ΄μš©ν•΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 싀행에 ν•„μš”ν•œ λͺ¨λ“ˆλ“€λ‘œ μ‹€ν–‰ ν™˜κ²½ ꡬ좕 κ°€λŠ₯
      • λ©”λͺ¨λ¦¬κ°€ μ—΄μ•…ν•œ μ†Œν˜• 기기에도 μ‘μš© ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ°€λŠ₯
        • DB μ•‘μ„ΈμŠ€κ°€ ν•„μš” μ—†κ³  였직 κΈ°λ³Έ μžλ°” API만 ν•„μš”ν•œ μ†Œν˜• IoT μž₯μΉ˜μ—λŠ” java.base λͺ¨λ“ˆλ§Œ 있으면 됨

JDK의 μ£Όμš” νŒ¨ν‚€μ§€

  • java.lang
    • 슀트링, μˆ˜ν•™ ν•¨μˆ˜, μž…μΆœλ ₯ λ“± μžλ°” ν”„λ‘œκ·Έλž˜λ°μ— ν•„μš”ν•œ 기본적인 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€
    • μžλ™μœΌλ‘œ import 됨
  • java.util
    • λ‚ μ§œ, μ‹œκ°„, 벑터, ν•΄μ‹œλ§΅ λ“±κ³Ό 같은 λ‹€μ–‘ν•œ μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ 제곡
  • java.io
    • ν‚€λ³΄λ“œ, λͺ¨λ‹ˆν„°, ν”„λ¦°νŠΈ, λ””μŠ€ν¬ 등에 μž…μΆœλ ₯을 ν•  수 μžˆλŠ” ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ 제곡
  • java.awt
    • GUI ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜κΈ° μœ„ν•œ AWT νŒ¨ν‚€μ§€
  • javax.swing
    • GUI ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜κΈ° μœ„ν•œ μŠ€μœ™ νŒ¨ν‚€μ§€

Object 클래슀

  • λͺ¨λ“  μžλ°” ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ Objectλ₯Ό 상속받도둝 μžλ™ 컴파일
    • μ΅œμƒμœ„ 클래슀, λͺ¨λ“  클래슀의 슈퍼 클래슀
    • λͺ¨λ“  ν΄λž˜μŠ€κ°€ 상속받아 μ‚¬μš©ν•  곡톡 κΈ°λŠ₯(λ©”μ†Œλ“œ) 포함
    • java.lang νŒ¨ν‚€μ§€μ— 속함
  • μ£Όμš” λ©”μ†Œλ“œ
    • boolean equals(Object obj)
      • objκ°€ κ°€λ¦¬ν‚€λŠ” 객체와 ν˜„μž¬ 객체λ₯Ό λΉ„κ΅ν•˜μ—¬ κ°™μœΌλ©΄ true 리턴
    • Class getClass()
      • ν˜„ 객체의 λŸ°νƒ€μž„ 클래슀λ₯Ό 리턴
      • Class 객체의 getName() λ©”μ†Œλ“œλŠ” 객체의 클래슀 이름 리턴
    • int hashCode()
      • ν˜„ 객체에 λŒ€ν•œ ν•΄μ‹œ μ½”λ“œ κ°’ 리턴
      • ν•΄μ‹œ μ½”λ“œ : 객체가 생성될 λ•Œ 객체λ₯Ό μœ μΌν•˜κ²Œ 식별할 수 있게 λΆ€μ—¬λ˜λŠ” μ •μˆ˜ id κ°’
    • String toString()
      • ν˜„ 객체에 λŒ€ν•œ λ¬Έμžμ—΄ ν‘œν˜„μ„ 리턴
      • 클래슀 μ •μ˜ μ‹œ toString()을 μ˜€λ°”λΌμ΄λ”©ν•˜μ—¬ μžμ‹ λ§Œμ˜ λ¬Έμžμ—΄ 리턴 κ°€λŠ₯
      • μ»΄νŒŒμΌλŸ¬μ— μ˜ν•œ toString() μžλ™ λ³€ν™˜
        • 객체 + λ¬Έμžμ—΄ -> 객체.toString() + λ¬Έμžμ—΄ 둜 μžλ™ λ³€ν™˜
        • 객체λ₯Ό λ‹¨λ…μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 경우 -> 객체.toString() 으둜 μžλ™ λ³€ν™˜
    • void notify()
      • ν˜„ 객체에 λŒ€ν•΄ λŒ€κΈ°ν•˜κ³  μžˆλŠ” ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ₯Ό 깨움
    • void notifyAll()
      • ν˜„ 객체에 λŒ€ν•΄ λŒ€κΈ°ν•˜κ³  μžˆλŠ” λͺ¨λ“  μŠ€λ ˆλ“œλ₯Ό 깨움
    • void wait()
      • λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ 깨울 λ•ŒκΉŒμ§€ ν˜„μž¬ μŠ€λ ˆλ“œλ₯Ό λŒ€κΈ°ν•˜κ²Œ 함

객체 비ꡐ(==)와 equals() λ©”μ†Œλ“œ

Point a = new Point(2,3);
Point b = new Point(2,3);
Point c = a;
if (a==b) System.out.println("a==b"); // false
if (a==c) System.out.println("a==c"); // true
  • == μ—°μ‚°μž
    • 객체 레퍼런슀 비ꡐ
String a = new String("Hello");
String b = new String("Hello");
if (a==b) System.out.println("a==b");
if (a.equals(b)) System.out.println("a와 bλŠ” λ‘˜ λ‹€ Helloμž…λ‹ˆλ‹€.");
  • boolean equals(Object obj)
    • 두 객체의 λ‚΄μš©λ¬Ό 비ꡐ
    • 객체의 λ‚΄μš©λ¬Όμ„ λΉ„κ΅ν•˜κΈ° μœ„ν•΄μ„œλŠ” 클래슀 μž‘μ„±μžκ°€ ν΄λž˜μŠ€μ— equals() λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•΄μ•Ό 함
      • String ν΄λž˜μŠ€λŠ” λ¬Έμžμ—΄μ΄ 같은지 λΉ„κ΅ν•˜λŠ” equals λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ 가지고 있음
class Point {
    int x, y;
    public Point(int x, int y) {
        this.x = x; this.y = y;
    }
    public boolean equals(Object obj) {
        Point p = (Point)obj; // objλ₯Ό Point νƒ€μž…μœΌλ‘œ λ‹€μš΄μΊμŠ€νŒ…
        if(x==p.x&&y==p.y) return true;
        else return false;
    }
}

public class EqualsEx {
    public static void main(String[] args) {
        Point a = new Point(2,3);
        Point b = new Point(2,3);
        Point c = new Point(3,4);
        if(a==b) System.out.println("a==b");
        if(a.equals(b)) System.out.println("a is equal to b");
        if(a.equals(c)) System.out.println("a is equal to c");
    }
}

// Result
a is equal b
  • equals() λ©”μ†Œλ“œ 예제

Wrapper 클래슀

  • Wrapper 클래슀
    • μžλ°”μ˜ κΈ°λ³Έ νƒ€μž…μ„ ν΄λž˜μŠ€ν™”ν•œ 8개 클래슀λ₯Ό 톡칭
      • κΈ°λ³Έ νƒ€μž… : Wrapper 클래슀
        • byte : Byte
        • short : Short
        • int : Integer
        • long : Long
        • char : Character
        • float : Float
        • double : Double
        • boolean : Boolean
  • μš©λ„
    • 객체만 μ‚¬μš©ν•  수 μžˆλŠ” μ»¬λ ‰μ…˜ 등에 κΈ°λ³Έ νƒ€μž…μ˜ 값을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ -> Wrapper 객체둜 λ§Œλ“€μ–΄ μ‚¬μš©
Integer i = Integer.valueOf(10);
Double f = Double.valueOf(3.14);
...
  • κΈ°λ³Έ νƒ€μž…μ˜ κ°’μœΌλ‘œ Wrapper 객체 생성
Integer i = Integer.valueOf("10");
Double f = Double.valueOf("3.14");
...
  • λ¬Έμžμ—΄λ‘œ Wrapper 객체 생성
Float f = Float.valueOf((double)3.14);
  • Float κ°μ²΄λŠ” double νƒ€μž…μ˜ κ°’μœΌλ‘œ 생성 κ°€λŠ₯

Wrapper μ£Όμš” λ©”μ†Œλ“œ

  • κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” Integer 클래슀의 μ£Όμš” λ©”μ†Œλ“œ
    • λ‹€λ₯Έ Wrapper 클래슀의 λ©”μ†Œλ“œλŠ” 이와 μœ μ‚¬
    • static int bitCount(int i)
      • μ •μˆ˜ i의 μ΄μ§„μˆ˜ ν‘œν˜„μ—μ„œ 1의 개수 리턴
    • float floatValue()
      • ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ κ°’ 리턴
    • int intValue()
      • ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ κ°’ 리턴
    • long longValue()
      • ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ κ°’ 리턴
    • short shortValue()
      • ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ κ°’ 리턴
    • static int parseInt(String s)
      • 슀트링 sλ₯Ό 10진 μ •μˆ˜λ‘œ λ³€ν™˜ν•œ κ°’ 리턴
    • static int parseInt(String s, int radix)
      • 슀트링 sλ₯Ό μ§€μ •λœ μ§„λ²•μ˜ μ •μˆ˜λ‘œ λ³€ν™˜ν•œ κ°’ 리턴
    • static String toBinaryString(int i)
      • μ •μˆ˜ iλ₯Ό μ΄μ§„μˆ˜ ν‘œν˜„μœΌλ‘œ λ³€ν™˜ν•œ 슀트링 리턴
    • static String toHexString(int i)
      • μ •μˆ˜ iλ₯Ό 16μ§„μˆ˜ ν‘œν˜„μœΌλ‘œ λ³€ν™˜ν•œ 슀트링 리턴
    • static String toOctalString(int i)
      • μ •μˆ˜ iλ₯Ό 8μ§„μˆ˜ ν‘œν˜„μœΌλ‘œ λ³€ν™˜ν•œ 슀트링 리턴
    • static String toString(int i)
      • μ •μˆ˜ iλ₯Ό 슀트링으둜 λ³€ν™˜ν•˜μ—¬ 리턴

λ°•μ‹±κ³Ό μ–Έλ°•μ‹±

  • boxing
    • κΈ°λ³Έ νƒ€μž…μ˜ 값을 Wrapper 객체둜 λ³€ν™˜ν•˜λŠ” 것
  • unboxing
    • Wrapper 객체에 λ“€μ–΄ μžˆλŠ” κΈ°λ³Έ νƒ€μž…μ˜ 값을 λΉΌλ‚΄λŠ” 것
    • λ°•μ‹±μ˜ λ°˜λŒ€
Integer ten = 10; // μžλ™ 방식. Integer ten = Integer.valueOf(10); 둜 μžλ™ 처리
int n = ten; // μžλ™ μ–Έλ°•μ‹±. int n = ten.intValue(); 둜 μžλ™ 처리
  • μžλ™ λ°•μ‹±κ³Ό μžλ™ μ–Έλ°•μ‹±
    • JDK 1.5λΆ€ν„° λ°•μ‹±κ³Ό 언박싱은 μžλ™μœΌλ‘œ 이루어지도둝 컴파일됨

String의 생성과 νŠΉμ§•

  • String ν΄λž˜μŠ€λŠ” λ¬Έμžμ—΄μ„ λ‚˜νƒ€λƒ„
  • 슀트링 λ¦¬ν„°λŸ΄(λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄)은 String 객체둜 처리됨
String str1 = "abcd";
char data[] = {'a', 'b', 'c', 'd'};
String str2 = new String(data)
String str3 = new String("abcd");
  • 슀트링 객체의 생성 사둀

슀트링 λ¦¬ν„°λŸ΄κ³Ό new String()

  • 슀트링 λ¦¬ν„°λŸ΄
    • μžλ°” 가상 기계 λ‚΄λΆ€μ—μ„œ λ¦¬ν„°λŸ΄ ν…Œμ΄λΈ”μ— μ €μž₯되고 관리됨
    • μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ 곡유됨
  • new String()으둜 μƒμ„±λœ 슀트링
    • 슀트링 κ°μ²΄λŠ” νž™μ— 생성
    • μŠ€νŠΈλ§μ€ κ³΅μœ λ˜μ§€ μ•ŠμŒ
  • 슀트링 κ°μ²΄λŠ” μˆ˜μ • λΆˆκ°€λŠ₯
    • λ¦¬ν„°λŸ΄ μŠ€νŠΈλ§μ΄λ“  new String()으둜 μƒμ„±ν–ˆλ“  객체의 λ¬Έμžμ—΄μ€ μˆ˜μ • λΆˆκ°€
  • 슀트링 비ꡐ
    • 두 μŠ€νŠΈλ§μ„ 비ꡐ할 μ‹œ λ°˜λ“œμ‹œ equals() μ‚¬μš©

String μ£Όμš” λ©”μ„œλ“œ

  • char charAt(int index)
    • index μΈλ±μŠ€μ— μžˆλŠ” 문자 κ°’ 리턴
  • int codePointAt(int index)
    • index μΈλ±μŠ€μ— μžˆλŠ” μœ λ‹ˆμ½”λ“œ κ°’ 리턴
  • int compareTo(String anotherString)
    • 두 μŠ€νŠΈλ§μ„ 사전적 μˆœμ„œλ₯Ό κΈ°μ€€μœΌλ‘œ 비ꡐ
    • 두 슀트링이 κ°™μœΌλ©΄ 0, ν˜„ 슀트링이 anotherString보닀 λ¨Όμ € λ‚˜μ˜€λ©΄ 음수, μ•„λ‹ˆλ©΄ μ–‘μˆ˜ 리턴
  • String concat(String str)
    • str μŠ€νŠΈλ§μ„ ν˜„μž¬ 슀트링 뒀에 덧뢙인 슀트링 리턴
  • boolean contains(CharSequence s)
    • s에 μ§€μ •λœ λ¬Έμžλ“€μ„ ν¬ν•¨ν•˜κ³  있으면 true 리턴
  • int length()
    • 슀트링의 길이(문자 개수) 리턴
  • String replace(Charsequence target, Charsequence replacement)
    • target이 μ§€μ •ν•˜λŠ” 일련의 λ¬Έμžλ“€μ„ replacementκ°€ μ§€μ •ν•˜λŠ” λ¬Έμžλ“€λ‘œ λ³€κ²½ν•œ 슀트링 리턴
  • String[] split(String regex)
    • μ •κ·œμ‹ regex에 μΌμΉ˜ν•˜λŠ” 뢀뢄을 μ€‘μ‹¬μœΌλ‘œ μŠ€νŠΈλ§μ„ λΆ„λ¦¬ν•˜κ³  λΆ„λ¦¬λœ μŠ€νŠΈλ§μ„ 배열에 μ €μž₯ν•˜μ—¬ 리턴
  • String substring(int beginIndex)
    • beginIndex μΈλ±μŠ€λΆ€ν„° μ‹œμž‘ν•˜λŠ” μ„œλΈŒ 슀트링 리턴
  • String toLowerCase()
    • μ†Œλ¬Έμž λ³€κ²½ 슀트링 리턴
  • String toUpperCase()
    • λŒ€λ¬Έμž λ³€κ²½ 슀트링 리턴
  • String trim()
    • 슀트링 μ•žλ’€μ˜ 곡백 λ¬Έμžλ“€μ„ μ œκ±°ν•œ 슀트링 리턴

String ν™œμš©

  • 슀트링 비ꡐ, equals()와 compareTo()
    • 슀트링 비ꡐ에 == μ—°μ‚°μž μ ˆλŒ€ μ‚¬μš© κΈˆμ§€
    • equals()
      • 슀트링이 κ°™μœΌλ©΄ true, μ•„λ‹ˆλ©΄ false 리턴
    • int compareTo(String anotherString)
      • λ¬Έμžμ—΄μ΄ κ°™μœΌλ©΄ 0 리턴
      • 이 λ¬Έμžμ—΄μ΄ anotherString 보닀 사전에 λ¨Όμ € λ‚˜μ˜€λ©΄ 음수 리턴
      • 이 λ¬Έμžμ—΄μ΄ anotherString 보닀 사전에 λ‚˜μ€‘μ— λ‚˜μ˜€λ©΄ μ–‘μˆ˜ 리턴
  • 곡백 제거
    • String trim()
      • ν‚€λ³΄λ“œλ‚˜ νŒŒμΌλ‘œλΆ€ν„° 슀트링 μž…λ ₯ μ‹œ, 슀트링 μ•ž λ’€ 곡백이 λΌλŠ” κ²½μš°κ°€ 많음
      • ν•΄λ‹Ή λ©”μ„œλ“œ μ‚¬μš© μ‹œ 슀트링 μ•ž 뒀에 μžˆλŠ” 곡백 제거

StringBuffer 클래슀

  • κ°€λ³€ μŠ€νŠΈλ§μ„ λ‹€λ£¨λŠ” 클래슀
StringBuffer sb = new StringBuffer("java");
  • 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." 좜λ ₯
  • String ν΄λž˜μŠ€μ™€ 달리 λ¬Έμžμ—΄ λ³€κ²½ κ°€λŠ₯
    • κ°€λ³€ 크기의 버퍼λ₯Ό 가지고 μžˆμ–΄ λ¬Έμžμ—΄ μˆ˜μ • κ°€λŠ₯
    • λ¬Έμžμ—΄μ˜ μˆ˜μ •μ΄ λ§Žμ€ μž‘μ—…μ— 적합

StringTokenizer 클래슀

  • ꡬ뢄 문자λ₯Ό κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄μ„ λΆ„λ¦¬ν•˜λŠ” 클래슀
    • ꡬ뢄 문자(delimiter) : λ¬Έμžμ—΄μ„ ꡬ뢄할 λ•Œ μ‚¬μš©λ˜λŠ” 문자
    • 토큰(token) : ꡬ뢄 문자둜 λΆ„λ¦¬λœ λ¬Έμžμ—΄
String query = "name=hwabee&addr=seoul&age=23";
StringTokenizer st = new StringTokenizer(query, "&");
  • countTokens() : 토큰 개수 μ•Œμ•„λ‚΄κΈ°
  • nextToken() : λ‹€μŒ 토큰 μ–»μ–΄λ‚΄κΈ°
  • hasMoreTokens() : StringTokenizer 클래슀 κ°μ²΄μ—μ„œ λ‹€μŒμ— 읽어 듀일 token이 있으면 true, μ—†μœΌλ©΄ falseλ₯Ό 리턴
  • ꡬ뢄 λ¬Έμžμ— "&=" 처럼 두 개λ₯Ό 쀄 수 있음

Math 클래슀

  • κΈ°λ³Έ μ‚°μˆ  μ—°μ‚° λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•˜λŠ” 클래슀
  • λͺ¨λ“  λ©”μ†Œλ“œλŠ” static으둜 μ„ μ–Έ
    • 클래슀 μ΄λ¦„μœΌλ‘œ 호좜 κ°€λŠ₯
    • Math.abs(-3.14) : 3.14
      • μ ˆλŒ“κ°’ κ΅¬ν•˜κΈ°
    • Math.sqrt(9.0) : 3.0
      • 제곱근 κ΅¬ν•˜κΈ°
    • Math.exp(2) : 7.389056...
      • $e^2$
    • Math.round(3.14) : 3
      • 반올림
  • Math.random() λ©”μ†Œλ“œλ‘œ λ‚œμˆ˜ λ°œμƒ
    • random()은 0보닀 ν¬κ±°λ‚˜ κ°™κ³  1.0보닀 μž‘μ€ μ‹€μˆ˜ λ‚œμˆ˜ λ°œμƒ
for(int x=0; x<10; x++) {
    int n = (int)(Math.random()*100 + 1);   // 1 ~ 100κΉŒμ§€μ˜ 랜덀 μ •μˆ˜ λ°œμƒ
    System.out.println(n);
}
  • 1μ—μ„œ 100κΉŒμ§€μ˜ 랜덀 μ •μˆ˜ 10개λ₯Ό λ°œμƒμ‹œν‚€λŠ” μ½”λ“œ
Random r = new Random();
int n = r.nextInt();    // 음수, μ–‘μˆ˜, 0 포함, μžλ°”μ˜ μ •μˆ˜ λ²”μœ„ λ‚œμˆ˜ λ°œμƒ
int m = r.nextInt(100); // 0μ—μ„œ 99 사이(0κ³Ό 99 포함)의 μ •μˆ˜ λ‚œμˆ˜ λ°œμƒ
  • java.util.Random 클래슀λ₯Ό μ΄μš©ν•˜μ—¬ λ‚œμˆ˜ λ°œμƒ κ°€λŠ₯
728x90
λ°˜μ‘ν˜•

'Development Study > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] Lecture - Day 11  (0) 2024.03.15
[Java] Lecture - Day 10  (0) 2023.12.12
[Java] Lecture - Day 8  (0) 2023.12.12
[Java] Lecture - Day 7  (0) 2023.12.12
[Java] Lecture - Day 6  (0) 2023.12.12
Comments