🌈 [Section1] 15. μ—΄κ±°ν˜•, μ œλ„€λ¦­, μ˜ˆμ™Έμ²˜λ¦¬

ν˜„μ£ΌΒ·2022λ…„ 9μ›” 14일
0

bootcamp

λͺ©λ‘ 보기
15/71

πŸ“• 였늘 배운 λ‚΄μš©!

  • μ—΄κ±°ν˜• (Enum)
  • μ œλ„€λ¦­ (Generic)
  • μ˜ˆμ™Έμ²˜λ¦¬ (Exception Handling)

✏️ μ—΄κ±°ν˜•(enum)

  • μƒμˆ˜(final)λ“€μ˜ 집합
  • μ—¬λŸ¬ μƒμˆ˜λ“€μ„ 보닀 νŽΈλ¦¬ν•˜κ²Œ μ„ μ–Έν•˜κ³  관리
  • μƒμˆ˜λͺ…μ˜ 쀑볡을 ν”Όν•˜κ³ , νƒ€μž…μ— λŒ€ν•œ μ•ˆμ •μ„±μ„ 보μž₯
    ( 같은 효과λ₯Ό λ‚Ό 수 μžˆλŠ” λ‹€λ₯Έ μ½”λ“œμ— λ°˜ν•΄ 훨씬 더 κ°„κ²°ν•˜κ³  가독성이 쒋은 μ½”λ“œλ₯Ό μž‘μ„±μ΄ κ°€λŠ₯ν•˜κ³  switchλ¬Έμ—μ„œλ„ μž‘λ™ κ°€λŠ₯ )
    enum μ—΄κ±°ν˜•μ΄λ¦„ { μƒμˆ˜λͺ…1, μƒμˆ˜λͺ…2, μƒμˆ˜λͺ…3, ...}

( μƒμˆ˜λͺ…은 λŒ€λ¬Έμžλ‘œ! )

  • μƒμˆ˜λ“€μ€ μžλ™μ μœΌλ‘œ μ²«λ²ˆμ§ΈλΆ€ν„° 0λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 0, 1, 2 ... μ •μˆ˜κ°’μ΄ ν• λ‹Ή
    πŸ‘‰ μ—΄κ±°ν˜•μ΄λ¦„.μƒμˆ˜λͺ… 으둜 μ ‘κ·Ό κ°€λŠ₯

βœ”οΈ μ—΄κ±°ν˜•μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ„œλ“œ

  • name()
    μ—΄κ±° 객체가 가지고 μžˆλŠ” λ¬Έμžμ—΄μ„ 리턴
    (λ¦¬ν„΄λ˜λŠ” λ¬Έμžμ—΄μ€ μ—΄κ±°νƒ€μž…μ„ μ •μ˜ν•  λ•Œ μ‚¬μš©ν•œ μƒμˆ˜ 이름과 동일)

  • ordinal()
    μ—΄κ±° 객체의 μˆœλ²ˆμ„ 0λΆ€ν„° μ •μˆ˜ν˜•μœΌλ‘œ 리턴

  • compareTo(비ꡐ값)
    주어진 λ§€κ°œκ°’κ³Ό λΉ„κ΅ν•΄μ„œ 순번 차이λ₯Ό μ •μˆ˜ν˜•μœΌλ‘œ 리턴

  • valueOf(String name)
    주어진 λ¬Έμžμ—΄μ˜ μ—΄κ±° 객체λ₯Ό 리턴 (μ—΄κ±°νƒ€μž… 리턴)

  • values()
    λͺ¨λ“  μ—΄κ±° 객체듀을 λ°°μ—΄λ‘œ 리턴 (μ—΄κ±°λ°°μ—΄ 리턴)

✏️ μ œλ„€λ¦­ (Generic)

  • 클래슀λ₯Ό λ§Œλ“€ λ•Œ κ·Έ 클래슀의 μ½”λ“œκ°€ νŠΉμ • 데이터 νƒ€μž…μ— 얽맀이지 μ•Šλ„λ‘ νƒ€μž…μ„ 지정해두지 μ•Šκ³  λ‚˜μ€‘μ— 지정할 수 μžˆλ„λ‘ μΌλ°˜ν™” ν•΄λ‘λŠ” 것

βœ” μ œλ„€λ¦­ 클래슀

  • μ œλ„€λ¦­μ΄ μ‚¬μš©λœ 클래슀 ( νƒ€μž… μ§€μ •ν•˜λŠ” 데 μ œν•œμ΄ μ—†μŒ )

  • 클래슀 이름 μ˜†μ— < T > 이런 μ‹μœΌλ‘œ νƒ€μž… λ§€κ°œλ³€μˆ˜ μž‘μ„± -> 클래슀 λ‚΄μ—μ„œ Tλ₯Ό μž„μ˜μ˜ νƒ€μž…μœΌλ‘œ μ‚¬μš©

  • 클래슀 λ³€μˆ˜ (static)μ—λŠ” νƒ€μž…λ§€κ°œλ³€μˆ˜ μ‚¬μš© λΆˆκ°€
    ( 클래슀 λ³€μˆ˜λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•˜λŠ” 곡톡 λ³€μˆ˜μΈλ° λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄ νƒ€μž…μ΄ μΈμŠ€ν„΄μŠ€ λ³„λ‘œ 달라지기 λ•Œλ¬Έμ— μ•ˆλ¨ )

βœ” μ œν•œλœ μ œλ„€λ¦­ 클래슀

class Basket<T extends Flower> {
  ...
}
  • μœ„μ™€ 같이 μ“°λ©΄ μ œλ„€λ¦­μ˜ T νƒ€μž…μ€ Flower 클래슀의 ν•˜μœ„ 클래슀만 μ§€μ •ν•˜λ„λ‘ μ œν•œ κ°€λŠ₯

  • νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λ„ extands둜 지정 κ°€λŠ₯

  • νŠΉμ • 클래슀(a)λ₯Ό μƒμ†λ°›μœΌλ©°μ„œ λ™μ‹œμ— νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀(b)만 νƒ€μž…μœΌλ‘œ μ§€μ •ν•˜λ €λ©΄ < extands a & b > μ΄λ ‡κ²Œ & 이 기호 μ‚¬μš© (클래슀λ₯Ό μΈν„°νŽ˜μ΄μŠ€λ³΄λ‹€ μ•žμ— μœ„μΉ˜μ‹œμΌœμ•Όν•¨)

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

  • 클래슀 λ‚΄λΆ€μ˜ νŠΉμ • λ©”μ„œλ“œλ§Œ μ œλ„€λ¦­μœΌλ‘œ μ„ μ–Έν•˜λŠ” 것 (λ°˜ν™˜νƒ€μž… μ•žμ— μ„ μ–Έ)
    class Basket {
    		...
    		public <T> void add(T element) {
    				...
    		}
    }
  • 이 λ•Œ, 클래슀λͺ… 뒀에 μ„ μ–Έν•˜λŠ” μ œλ„€λ¦­ 클래슀의 T와 μ œλ„€λ¦­ λ©”μ„œλ“œμ˜ TλŠ” μ„œλ‘œ λ‹€λ₯Έ 것
    -> 클래슀λͺ… μ˜†μ— μ„ μ–Έν•œ νƒ€μž… λ§€κ°œλ³€μˆ˜ T πŸ‘‰ ν΄λž˜μŠ€κ°€ μΈμŠ€ν„΄μŠ€ν™”λ  λ•Œ νƒ€μž… 지정
    -> μ œλ„€λ¦­ λ©”μ„œλ“œ T πŸ‘‰ λ©”μ„œλ“œκ°€ 호좜될 λ•Œ νƒ€μž… 지정

  • static λ©”μ„œλ“œμ—λ„ μ„ μ–Έν•˜μ—¬ μ‚¬μš© κ°€λŠ₯
    ( but, λ©”μ„œλ“œ μ •μ˜ μ‹œμ μ— μ‹€μ œ μ–΄λ–€ 값이 μž…λ ₯될지 μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— length()와 같은 String 클래슀의 λ©”μ„œλ“œλŠ” ν™œμš© λΆˆκ°€ν•˜κ³  equals()와 같은 Object 클래슀 λ©”μ„œλ“œλŠ” λͺ¨λ‘ μ‚¬μš© κ°€λŠ₯)

[ μ°Έκ³  ] https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

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

  • μ–΄λ– ν•œ νƒ€μž…μœΌλ‘œλ“  λŒ€μ²΄λ  수 μžˆλŠ” νƒ€μž… νŒŒλΌλ―Έν„°
  • 기호 ?
  • 일반적으둜 extends와 super ν‚€μ›Œλ“œλ₯Ό μ‘°ν•©ν•˜μ—¬ μ‚¬μš©
    <? extends T> //1번
    <? super T> //2번

1번( μƒν•œμ œν•œ ) - T와 T μƒμ†λ°›λŠ” ν•˜μœ„ 클래슀 νƒ€μž…λ§Œ νƒ€μž… ν”ΌλΌλ―Έν„°λ‘œ 받도둝 지정
2번( ν•˜ν•œμ œν•œ ) - T와 T μƒμœ„ν΄λž˜μŠ€ νƒ€μž…λ§Œ ν”ΌλΌλ―Έν„°λ‘œ 받도둝 지정

μœ„μ˜ 아무것도 쓰지 μ•ŠλŠ” <?> == <? extends Object>
πŸ‘‰ λͺ¨λ“  클래슀 νƒ€μž…μ€ Object 클래슀λ₯Ό μƒμ†λ°›μœΌλ―€λ‘œ, λͺ¨λ“  클래슀 νƒ€μž…μ„ νƒ€μž… νŒŒλΌλ―Έν„°λ‘œ 받을 수 있음

✏️ μ˜ˆμ™Έ 처리 (Exception Handling)

  • 예기치 μ•Šκ²Œ λ°œμƒν•˜λŠ” μ—λŸ¬μ˜ λŒ€μ‘ μ½”λ“œλ₯Ό 미리 μž‘μ„±ν•΄μ„œ ν”„λ‘œκ·Έλž¨μ˜ 비정상적인 μ’…λ£Œλ₯Ό λ°©μ§€ν•˜κ³ , 정상적인 μ‹€ν–‰ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것

βœ” 컴파일 μ—λŸ¬(Compile Time Error)

  • μ»΄νŒŒμΌν•  λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬ ( μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ 감지 )
  • μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ 였λ₯˜λ₯Ό κ°μ§€ν•˜μ—¬ λΉ¨κ°„μ€„λ‘œ 미리 μ•Œλ €μ€Œ
  • 주둜 λ¬Έλ²•μš”μ†Œμ™€ κ΄€λ ¨ν•œ μ—λŸ¬

βœ” λŸ°νƒ€μž„ μ—λŸ¬(Run Time Error)

  • λŸ°νƒ€μž„ μ‹œ(ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ) λ°œμƒν•˜λŠ” μ—λŸ¬ ( JVM에 μ˜ν•΄ 감지 )
  • 주둜 κ°œλ°œμžκ°€ 컴퓨터가 μˆ˜ν–‰ν•  수 μ—†λŠ” νŠΉμ •ν•œ μž‘μ—…μ„ μš”μ²­ν•  λ•Œ λ°œμƒ

βœ”οΈ ν”„λ‘œκ·Έλž¨ 였λ₯˜μ˜ μ’…λ₯˜

1. μ—λŸ¬(error)

  • λ³΅κ΅¬ν•˜κΈ° μ–΄λ €μš΄ μˆ˜μ€€μ˜ μ‹¬κ°ν•œ 였λ₯˜
    Ex. λ©”λͺ¨λ¦¬ λΆ€μ‘±(OutOfMemoryError), μŠ€νƒμ˜€λ²„ν”Œλ‘œμš°(StackOverflowError) λ“±

2. μ˜ˆμ™Έ(exception)

  • 잘λͺ»λœ μ‚¬μš© λ˜λŠ” μ½”λ”©μœΌλ‘œ μΈν•œ μƒλŒ€μ μœΌλ‘œ λ―Έμ•½ν•œ μˆ˜μ€€μ˜ 였λ₯˜
    ( μ½”λ“œλ₯Ό μˆ˜μ •ν•΄ 수슡 κ°€λŠ₯ν•œ 였λ₯˜ )
  • λͺ¨λ“  μ˜ˆμ™Έμ˜ 졜고 μƒμœ„ν΄λž˜μŠ€λŠ” Exception 클래슀

    πŸ‘‰ μ˜ˆμ™Έμ˜ μ’…λ₯˜ (Exception 클래슀)

    1. 일반 μ˜ˆμ™Έ 클래슀(Exception)
    • λͺ¨λ“  Exception ν΄λž˜μŠ€μ™€ κ·Έ ν•˜μœ„ ν΄λž˜μŠ€λ“€
      ( RuntimeException ν΄λž˜μŠ€μ™€ κ·Έ ν•˜μœ„ 클래슀λ₯Ό μ œμ™Έ )
    • checked μ˜ˆμ™ΈλΌ λΆ€λ₯΄κΈ°λ„ 함
      (μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œ μ‹€ν–‰ 전에 μ˜ˆμ™Έ 처리 μ½”λ“œ μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•˜κΈ° λ•Œλ¬Έ)
    • 주둜 μ‚¬μš©μžμ˜ 클래슀λͺ…, ν˜•μ‹ λ“±μ˜ μ‹€μˆ˜λ‘œ λ°œμƒν•˜λŠ” κ²½μš°κ°€ 많음
      β €
    1. μ‹€ν–‰ μ˜ˆμ™Έ 클래슀(Runtime Exception)
    • RuntimeException ν΄λž˜μŠ€μ™€ κ·Έ ν•˜μœ„ν΄λž˜μŠ€λ₯Ό 지칭
    • unchecked μ˜ˆμ™ΈλΌ λΆ€λ₯΄κΈ°λ„ 함
      ( μ»΄νŒŒμΌλŸ¬κ°€ μ˜ˆμ™Έ 처리 μ½”λ“œ μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μ˜λ―Έμ—μ„œ )
    • 주둜 개발자의 문법적 μ‹€μˆ˜λ‘œ λ°œμƒν•˜λŠ” κ²½μš°κ°€ 많음

βœ” try -catch λ¬Έ

try {
    // μ˜ˆμ™Έκ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” μ½”λ“œλ₯Ό μ‚½μž…
} 
catch (ExceptionType1 e1) {
    // ExceptionType1 μœ ν˜•μ˜ μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰ν•  μ½”λ“œ
} 
catch (ExceptionType2 e2) {
    // ExceptionType2 μœ ν˜•μ˜ μ˜ˆμ™Έ λ°œμƒ μ‹œ μ‹€ν–‰ν•  μ½”λ“œ
} 
finally {
    // finally λΈ”λŸ­μ€ μ˜΅μ…”λ„
    // μ˜ˆμ™Έ λ°œμƒ 여뢀와 상관없이 항상 μ‹€ν–‰
}

ꡬ체적인 μ˜ˆμ™Έ 클래슀(ν•˜μœ„ν΄λž˜μŠ€)λ₯Ό μœ„μ— λ„£μ–΄ ꡬ체적인 것뢀터 λ¨Όμ € 싀행될 수 μžˆλ„λ‘ ν•˜λŠ” 것이 μ’‹μŒ

βœ” μ˜ˆμ™Έ μ „κ°€

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

  • throws ν‚€μ›Œλ“œ μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή μ˜ˆμ™Έλ₯Ό λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ 곳으둜 λ‹€μ‹œ λ– λ„˜κΉ€

  • μ˜λ„μ μœΌλ‘œ μ˜ˆμ™Έλ₯Ό λ§Œλ“€κΈ°λ„ 함

    λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œλͺ…(λ§€κ°œλ³€μˆ˜, ...) throws μ˜ˆμ™Έν΄λž˜μŠ€1, μ˜ˆμ™Έν΄λž˜μŠ€2, ... {
    	...μƒλž΅...
    }
  • νŠΉμ • λ©”μ„œλ“œμ—μ„œ λͺ¨λ“  μ’…λ₯˜μ˜ λ©”μ„œλ“œκ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” κ²½μš°μ—λŠ” Exception 클래슀둜 μ „κ°€ ⬇️
    ( Exception ν΄λž˜μŠ€λŠ” λͺ¨λ“  μ˜ˆμ™Έ 클래슀의 μƒμœ„ 클래슀이기 λ•Œλ¬Έμ— κ·Έ ν•˜μœ„ 클래슀 νƒ€μž…μ˜ μ˜ˆμ™Έ ν΄λž˜μŠ€λ“€μ΄ λͺ¨λ‘ ν¬ν•¨λ˜μ–΄ μ „κ°€ κ°€λŠ₯ )
    ( μ˜ˆμ™Έμ²˜λ¦¬μ˜ μ±…μž„ - main λ©”μ„œλ“œκ°€ 짐 ( throwException λ©”μ„œλ“œ X ) )
    void ExampleMethod() throws Exception {
    }
  • main λ©”μ„œλ“œμ—μ„œ μ˜ˆμ™Έ μ „κ°€ ν•  경우 JVM이 Exception을 μž‘μ•„μ„œ μ²˜λ¦¬ν•΄μ€Œ
    public static void main(String[] args) throws Exception {
    }

🌈 λŠλ‚€μ 

μ˜€λŠ˜μ€ 배운 λ‚΄μš©κ³Ό κ°œλ…λ“€μ΄ λ§Žμ•„ 두 κ²Œμ‹œλ¬Όλ‘œ λ‚˜λˆ μ„œ μ λŠ”λ‹€! λ‹€μŒ κ²Œμ‹œλ¬Όμ—μ„œ μ»¬λ ‰μ…˜ κ΄€λ ¨ λ‚΄μš©λ“€μ„ 적어볼 μ˜ˆμ •γ…Žγ…Ž

0개의 λŒ“κΈ€