Vibe.ai
article thumbnail
λ°˜μ‘ν˜•

 

πŸ‘€Today...


 

 

 

β˜• Today I Leaned


Enum

Enum(μ—΄κ±°ν˜•)은 μ„œλ‘œ μ—°κ΄€λœ μƒμˆ˜μ˜ 집합이닀. μƒμˆ˜ = λ³€ν•˜μ§€ μ•ŠλŠ” 값을 μ˜λ―Έν•˜κ³ , μ—΄κ±°ν˜•μ€ μ΄λŸ¬ν•œ μƒμˆ˜λ“€μ„ κ°„νŽΈν•˜κ²Œ λ‹€λ£°λ•Œ μ‚¬μš©ν•œλ‹€. 

enum Names { JELLY, KEVIN, YOUMIN }  //μ΄λŸ°μ‹μœΌλ‘œ μ„ μ–Έν•˜μ—¬ μ‚¬μš©

public Class Main{...}

enum을 μ‚¬μš©ν•˜λ©΄ μƒμˆ˜λͺ…μ˜ 쀑볡을 ν”Όν•˜κ³  νƒ€μž…μ— λŒ€ν•œ μ•ˆμ „μ„±μ„ 보μž₯ν•œλ‹€. 그리고 switchλ¬Έμ—μ„œλ„ μ‚¬μš©μ΄ κ°€λŠ₯ν•΄μ§„λ‹€.

λ¦¬ν„΄νƒ€μž… λ©”μ„œλ“œ(λ§€κ°œλ³€μˆ˜) μ„€λͺ…
String name() μ—΄κ±° 객체가 κ°€μ§€κ³  μžˆλŠ” λ¬Έμžμ—΄μ„ λ¦¬ν„΄ν•˜λ©°, λ¦¬ν„΄λ˜λŠ” λ¬Έμžμ—΄μ€ μ—΄κ±°νƒ€μž…μ„ μ •μ˜ν•  λ•Œ μ‚¬μš©ν•œ μƒμˆ˜ 이름과 λ™μΌν•©λ‹ˆλ‹€.
int ordinal() μ—΄κ±° 객체의 순번(0λΆ€ν„° μ‹œμž‘)을 λ¦¬ν„΄ν•©λ‹ˆλ‹€.
int compareTo(비ꡐ값) μ£Όμ–΄μ§„ 맀개 κ°’κ³Ό λΉ„κ΅ν•΄μ„œ 순번 차이λ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€.
μ—΄κ±° νƒ€μž… valueOf(String name) μ£Όμ–΄μ§„ λ¬Έμžμ—΄μ˜ μ—΄κ±° 객체λ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€.
μ—΄κ±° λ°°μ—΄ values() λͺ¨λ“  μ—΄κ±° 객체듀을 λ°°μ—΄λ‘œ λ¦¬ν„΄ν•©λ‹ˆλ‹€.

 

 

μ œλ„€λ¦­(Generic)

#μ œλ„€λ¦­ 클래슀

generic은 νƒ€μž…μ„ ꡬ체적으둜 μ§€μ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, 좔후에 μ§€μ •ν• μˆ˜μžˆλ„λ‘ μΌλ°˜ν™”ν•΄ λ‘λŠ”κ²ƒμ„ μ˜λ―Έν•œλ‹€. μž‘μ„±ν•œ 클래슀 λ˜λŠ” λ©”μ„œλ“œμ˜ μ½”λ“œκ°€ νŠΉμ • 데이터 νƒ€μž…μ— 얽맀이지 μ•Šκ²Œ ν•΄ λ‘” 것이닀.

//μ œλ„€λ¦­ 클래슀 μ •μ˜
class Basket<T> {
	private T item1; // O 
	static  T item2; // X ==> 클래슀 λ³€μˆ˜μ—λŠ” νƒ€μž… λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν• μˆ˜μ—†λ‹€.
}
//μ œλ„€λ¦­ 클래슀 μ‚¬μš©
Basket<String>  basket1 = new Basket<String>("Hello");
Basket<String>  basket1 = new Basket<>("Hello");  //new λ’€μ—λŠ” ꡬ체적인 νƒ€μž…μƒλž΅κ°€λŠ₯

//μ œλ„€λ¦­ 클래슀 λ‹€ν˜•μ„± 적용
class Flower { ... }
class Rose extends Flower { ... }
class RosePasta { ... }

class Basket<T> {
    private T item;

    public void setItem(T item) {
        this.item = item;
    }
}

class Main {
    public static void main(String[] args) {
        Basket<Flower> flowerBasket = new Basket<>();
        flowerBasket.setItem(new Rose());      // λ‹€ν˜•μ„± 적용
        flowerBasket.setItem(new RosePasta()); // μ—λŸ¬
    }
}

μ œλ„€λ¦­ 클래슀 μ‚¬μš©μ‹œμ— κΈ°λ³Ένƒ€μž…μ„ μ§€μ •ν• μˆ˜μ—†λ‹€. 즉 int, doubleλ“±μ˜ μ›μ‹œνƒ€μž…μ„ μ§€μ •ν• κ²½μš°, Integer, Double 같은 래퍼클래슀λ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.

[wrapperclass] http://www.tcpschool.com/java/java_api_wrapper

 

# νŠΉμ • 클래슀λ₯Ό 상속 λ°›μœΌλ©΄μ„œ λ™μ‹œμ— μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀 νƒ€μž…μœΌλ‘œ μ œν•œ

class Basket<T extends Flower & Plant> { // &λ₯Ό μ‚¬μš©ν•œλ‹€.
    private T item;
		...
}

μ΄λŸ¬ν•œ κ²½μš°μ—λŠ” 클래슀λ₯Ό μΈν„°νŽ˜μ΄μŠ€λ³΄λ‹€ μ•žμ— μœ„μΉ˜μ‹œμΌœμ•Όν•œλ‹€.

 

# μ œλ„€λ¦­ λ©”μ„œλ“œ

generic methodλŠ” 클래슀 λ‚΄λΆ€μ˜ νŠΉμ • λ©”μ„œλ“œλ§Œ μ œλ„€λ¦­μœΌλ‘œ μ„ μ–Έν•œ 것이닀, 

class Basket<T> {                        // 1 : μ—¬κΈ°μ—μ„œ μ„ μ–Έν•œ νƒ€μž… 맀개 λ³€μˆ˜ T와 
		...
		static <T> void add(T element) { // 2 : μ—¬κΈ°μ—μ„œ μ„ μ–Έν•œ νƒ€μž… 맀개 λ³€μˆ˜ TλŠ” μ„œλ‘œ λ‹€λ₯΄λ‹€.
				...
		}
}

μœ„ μ˜ˆμ œμ™€κ°™μ΄ <T>둜 νƒ€μž…μ΄ μ •μ˜λœ Basket class와 addλ©”μ„œλ“œλŠ” μ•ŒνŒŒλ²³ 문자λ₯Ό 같이 μ‚¬μš©ν•˜λŠ” 것일뿐 μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…μ˜ λ§€κ°œλ³€μˆ˜μ΄λ‹€. μ΄μœ λŠ” νƒ€μž…μ΄ μ§€μ •λœλŠ” μ‹œμ μ΄ λ‹¬λΌμ„œμΈλ°, 클래슀λͺ… μ˜†μ— μ„ μ–Έν•œ νƒ€μž… λ§€κ°œλ³€μˆ˜λŠ” ν΄λž˜μŠ€κ°€ μΈμŠ€ν„΄μŠ€ν™” λ λ•Œ νƒ€μž…μ΄ μ§€μ •λœλ‹€. 그리고 μ œλ„€λ¦­ λ©”μ„œλ“œμ˜ νƒ€μž…μ§€μ •μ€ λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ λ•Œ 이루어 μ§„λ‹€.

그리고 μœ„μ—μ„œλ„ λ³Όμˆ˜μžˆλ“―μ΄ 클래슀 νƒ€μž… λ§€κ°œλ³€μˆ˜μ™€ 달리 staticλ©”μ„œλ“œμ—μ„œλ„ μ„ μ–Έν•˜μ—¬ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

class Basket {
    public <T> void getPrint(T item) {
        System.out.println(item.equals("Kim coding")); // κ°€λŠ₯
    }
}

그리고 μœ„μ™€ 같이 Object클래슀의 λ©”μ„œλ“œλ₯Ό μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. (λ‹€λ₯Έ 클래슀의 λ©”μ„œλ“œλŠ” λΆˆκ°€λŠ₯)

 

 

μ™€μΌλ“œ μΉ΄λ“œ

<? extends T>	//μƒν•œμ œν•œ, T와 Tλ₯Ό μƒμ†λ°›λŠ” ν•˜μœ„ν΄λž˜μŠ€ νƒ€μž…λ§Œ νƒ€μž… νŒŒλΌλ―Έν„°λ‘œ λ°›μ„μˆ˜μžˆλ‹€.
<? super T>		//ν•˜ν•œμ œν•œ, T와 T의 μƒμœ„ 클래슀만 νƒ€μž… νŒŒλΌλ―Έν„°λ‘œ λ°›λ„λ‘ν•œλ‹€.
<?> // <? extends Object> 와 κ°™λ‹€, 즉 λͺ¨λ“  ν΄λž˜μŠ€νƒ€μž…μ„ νƒ€μž… νŒŒλΌλ―Έν„°λ‘œ λ°›μ„μˆ˜μžˆλ‹€.

 

 

μ˜ˆμ™Έμ²˜λ¦¬

# μ˜ˆμ™Έ 처리의 계측도

μžλ°”μ˜ μ—λŸ¬μ™€ μ˜ˆμ™ΈλŠ” Throwable 클래슀둜 λΆ€ν„° ν™•μž₯되며, λͺ¨λ“  μ˜ˆμ™Έμ˜ 졜고 μƒμœ„ ν΄λž˜μŠ€λŠ” Exception ν΄λž˜μŠ€μ΄λ‹€.

 

public class RuntimeExceptionTest {

    public static void main(String[] args) {

        try {
            System.out.println("[μ†Œλ¬Έμž μ•ŒνŒŒλ²³μ„ λŒ€λ¬Έμžλ‘œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨]");
            printMyName(null); // (1) μ˜ˆμ™Έ λ°œμƒ
            printMyName("abc"); // 이 μ½”λ“œλŠ” μ‹€ν–‰λ˜μ§€ μ•Šκ³  catch 문으둜 이동
        } 
        catch (ArithmeticException e) {
            System.out.println("ArithmeticException λ°œμƒ!"); // (2) 첫 번째 catchλ¬Έ
        } 
        catch (NullPointerException e) { // (3) 두 번째 catchλ¬Έ
            System.out.println("NullPointerException λ°œμƒ!"); 
            System.out.println("e.getMessage: " + e.getMessage()); // (4) μ˜ˆμ™Έ 정보λ₯Ό μ–»λŠ” 방법 - 1
            System.out.println("e.toString: " + e.toString()); // (4) μ˜ˆμ™Έ 정보λ₯Ό μ–»λŠ” 방법 - 2
            e.printStackTrace(); // (4) μ˜ˆμ™Έ 정보λ₯Ό μ–»λŠ” 방법 - 3
        } 
        finally {
            System.out.println("[ν”„λ‘œκ·Έλž¨ μ’…λ£Œ]"); // (5) finallyλ¬Έ
        }
    }

    static void printMyName(String str) {
        String upperCaseAlphabet = str.toUpperCase();
        System.out.println(upperCaseAlphabet);
    }
}

// 좜λ ₯κ°’
[μ†Œλ¬Έμž μ•ŒνŒŒλ²³μ„ λŒ€λ¬Έμžλ‘œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨]
NullPointerException λ°œμƒ!
e.getMessage: null
e.toString: java.lang.NullPointerException
[ν”„λ‘œκ·Έλž¨ μ’…λ£Œ]
java.lang.NullPointerException
	at RuntimeExceptionTest.printMyName(RuntimeExceptionTest.java:20)
	at RuntimeExceptionTest.main(RuntimeExceptionTest.java:7)
  • try : μ˜ˆμ™Έκ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” μ½”λ“œλ₯Ό μ‚½μž….    정상싀행 => finally블둝    μ˜ˆμ™Έλ°œμƒ=>catch블둝
  • catch : μ˜ˆμ™Έκ°€ λ°œμƒν• λ•Œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ, μ—¬λŸ¬μ’…λ₯˜μ˜ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬κ°€λŠ₯, ν•˜λ‚˜ 이상 μ‚¬μš©κ°€λŠ₯
  • finally : μ˜ˆμ™Έ 여뢀와 관계없이 항상 μ‹€ν–‰, ν•„μˆ˜ x

# μ˜ˆμ™Έ μ „κ°€

μ˜ˆμ™Έλ₯Ό ν˜ΈμΆœν•œ 곳으둜 λ– λ„˜κΈ°λŠ” 방법.

    static void throwException() throws ClassNotFoundException, NullPointerException {
        ...
    }

 

 


 

λ°˜μ‘ν˜•
profile

Vibe.ai

@hai02y

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!