λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

전체 κΈ€135

24 Enum enum은 μžλ°”μ—μ„œ μ—΄κ±°ν˜•(Enumeration)을 λ‚˜νƒ€λ‚΄λŠ” ν‚€μ›Œλ“œμž…λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ μ„œλ‘œ μ—°κ΄€λœ μƒμˆ˜λ“€μ˜ 집합을 μ •μ˜ν•  λ•Œ μ‚¬μš©λ˜λ©° ν•΄λ‹Ή μƒμˆ˜λ“€ μ‚¬μ΄μ˜ 관계λ₯Ό λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚€κ³  μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ€ μžλ°” 5λΆ€ν„° λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ μ™€ μ£Όμš” νŠΉμ§• 가독성 ν–₯상: μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ μ„œλ‘œ κ΄€λ ¨λœ μƒμˆ˜λ“€μ„ ν•œ 곳에 κ·Έλ£Ήν™”ν•  수 μžˆμ–΄ μ½”λ“œμ˜ 가독성이 ν–₯μƒλ©λ‹ˆλ‹€. νƒ€μž… μ•ˆμ •μ„±: μ—΄κ±°ν˜•μ€ νƒ€μž… μ•ˆμ „μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€. enum으둜 μ •μ˜λœ μƒμˆ˜ μ΄μ™Έμ˜ 값은 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 컴파일 νƒ€μž„ 체크: μ—΄κ±°ν˜•μ„ μ‚¬μš©ν•˜λ©΄ 컴파일 νƒ€μž„μ—μ„œ μœ νš¨ν•œ 값인지 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜• λ©”μ„œλ“œ: μ—΄κ±°ν˜•μ€ λ©”μ„œλ“œμ™€ μƒμ„±μžλ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ—΄κ±°ν˜•μ˜ .. 2024. 1. 21.
23 Annotation μžλ°”μ˜ μ–΄λ…Έν…Œμ΄μ…˜(Annotation)은 μ†ŒμŠ€ μ½”λ“œμ— 메타데이터λ₯Ό μΆ”κ°€ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. μ–΄λ…Έν…Œμ΄μ…˜μ€ 주둜 μ»΄νŒŒμΌλŸ¬μ—κ²Œ 정보λ₯Ό μ „λ‹¬ν•˜κ±°λ‚˜ λŸ°νƒ€μž„ μ‹œμ— ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ„ μˆ˜μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μ–΄λ…Έν…Œμ΄μ…˜μ€ @ 기호λ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„λ˜λ©°, μ—¬λŸ¬ μ’…λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. 메타데이터? μžλ°”μ˜ μ–΄λ…Έν…Œμ΄μ…˜(Annotation)μ—μ„œμ˜ λ©”νƒ€λ°μ΄ν„°λŠ” μ†ŒμŠ€ μ½”λ“œμ— 뢀가적인 정보λ₯Ό μ²¨λΆ€ν•˜μ—¬ 컴파일러, ν”„λ ˆμž„μ›Œν¬, λŸ°νƒ€μž„ ν™˜κ²½ 등이 ν•΄λ‹Ή 정보λ₯Ό μ΄ν•΄ν•˜κ³  ν™œμš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. μ–΄λ…Έν…Œμ΄μ…˜μ€ 주둜 클래슀, λ©”μ„œλ“œ, ν•„λ“œ λ“±μ˜ μš”μ†Œμ— λΆ€κ°€ 정보λ₯Ό λΆ€μ—¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 1) @Override μ–΄λ…Έν…Œμ΄μ…˜: μ»΄νŒŒμΌλŸ¬μ—κ²Œ ν•΄λ‹Ή λ©”μ„œλ“œκ°€ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•œλ‹€λŠ” 정보λ₯Ό 제곡 2) @Deprecated: ν•΄λ‹Ή μš”μ†Œ(클래슀, λ©”μ„œ.. 2024. 1. 21.
22 throw & throws throw와 throwsλŠ” μžλ°”μ—μ„œ μ˜ˆμ™Έ μ²˜λ¦¬μ™€ κ΄€λ ¨λœ ν‚€μ›Œλ“œλ‘œ, μ˜ˆμ™Έλ₯Ό λ‹€λ£¨λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μ˜ˆμ™Έ λ°œμƒμ‹œν‚€κΈ° - throw μ˜ˆμ™Έκ°€ λ°œμƒν•œ 상황을 ν˜„μž¬ μœ„μΉ˜μ—μ„œ 직접 μ²˜λ¦¬ν•˜κΈ° μ–΄λ ΅κ±°λ‚˜ μ²˜λ¦¬ν•  수 μ—†λŠ” κ²½μš°μ— throw 문을 μ‚¬μš©ν•˜μ—¬ μ˜ˆμ™Έλ₯Ό λ˜μ§‘λ‹ˆλ‹€. 이것은 μ˜ˆμ™Έλ₯Ό ν˜„μž¬ μœ„μΉ˜μ—μ„œ λ°œμƒμ‹œν‚€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 그리고 이 μ˜ˆμ™ΈλŠ” 호좜 μŠ€νƒμ„ 따라 μƒμœ„ 호좜자둜 μ „νŒŒλ©λ‹ˆλ‹€. 더보기 try { Exception e = new Exception("고의둜 λ°œμƒμ‹œν‚΄"); // μ˜ˆμ™Έ 클래슀 생성 throw e; // μ˜ˆμ™Έ λ°œμƒμ‹œν‚€κΈ° // throw new Exception("고의둜 λ°œμƒμ‹œν‚΄"); μœ„μ˜ 두 쀄을 ν•œ μ€„λ‘œ } catch (Exception e) { System.out.println("μ—λŸ¬ 메세지 : " +.. 2024. 1. 21.
21 Exception handling μ˜ˆμ™Έ 처리(Exception Handling)λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ₯Ό μ μ ˆν•˜κ²Œ μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° κΈ°μˆ μž…λ‹ˆλ‹€. μ˜ˆμ™Έ 처리λ₯Ό 톡해 싀행쀑인 ν”„λ‘œκ·Έλž¨μ€ μ˜ˆμ™Έ 상황에 λŒ€ν•œ λŒ€μ²˜ 방법을 μ •μ˜ν•˜κ³ , 정상적인 흐름을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, ν”„λ‘œκ·Έλž¨μ˜ 비정상적인 μ’…λ£Œλ₯Ό λ§‰λŠ” 것에 μ˜ˆμ™Έ 처리의 λͺ©μ μ΄ μžˆμŠ΅λ‹ˆλ‹€. μžλ°”μ—μ„œλŠ” try, catch, finally 블둝을 μ‚¬μš©ν•˜μ—¬ μ˜ˆμ™Έ 처리λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€. 1) try block → try 블둝은 μ˜ˆμ™Έκ°€ λ°œμƒν•  수 μžˆλŠ” μ½”λ“œλ₯Ό ν¬ν•¨ν•˜λŠ” λΈ”λ‘μž…λ‹ˆλ‹€. try 블둝 μ•ˆμ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ ν•΄λ‹Ή μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” catch λΈ”λ‘μœΌλ‘œ μ œμ–΄κ°€ μ΄λ™ν•©λ‹ˆλ‹€. 2) catch block → catch 블둝은 νŠΉμ • μ˜ˆμ™Έ νƒ€μž…μ— λŒ€ν•œ 처리 μ½”λ“œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. μ—¬λŸ¬ 개의 catch .. 2024. 1. 21.
20 Exceptions μžλ°”(Java)μ—μ„œ μ˜ˆμ™Έ(Exception)λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 λ°œμƒν•  수 μžˆλŠ” μ˜ˆμƒμΉ˜ λͺ»ν•œ 상황 λ˜λŠ” 였λ₯˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ˜ˆμ™ΈλŠ” ν”„λ‘œκ·Έλž¨μ˜ 정상적인 흐름을 λ°©ν•΄ν•˜κ±°λ‚˜ ν”„λ‘œκ·Έλž¨μ΄ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ  수 μžˆλŠ” 원인이 될 수 μžˆμŠ΅λ‹ˆλ‹€. μžλ°”μ—μ„œλŠ” μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ λ‹€μ–‘ν•œ λ©”μ»€λ‹ˆμ¦˜μ΄ μ œκ³΅λ©λ‹ˆλ‹€. μ˜ˆμ™Έ (Exception) μ˜ˆμ™ΈλŠ” 주둜 ν”„λ‘œκ·Έλž¨μ˜ μ™ΈλΆ€ μƒν™©μ΄λ‚˜ μ‚¬μš©μž μž…λ ₯에 μ˜ν•΄ λ°œμƒν•˜λŠ” 문제λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ˜ˆμ™ΈλŠ” 일반적으둜 ν”„λ‘œκ·Έλž¨ μ½”λ“œμ—μ„œ μ²˜λ¦¬ν•  수 μžˆλŠ” 상황이며, μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ€ μ˜ˆμ™Έλ₯Ό 적절히 μ²˜λ¦¬ν•˜μ—¬ 계속 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€. μžλ°”μ—μ„œλŠ” μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ try-catch 블둝을 μ‚¬μš©ν•©λ‹ˆλ‹€. Checked μ˜ˆμ™Έμ™€ Unchecked μ˜ˆμ™Έ(λŸ°νƒ€μž„ μ˜ˆμ™Έ)둜 λ‚˜λ‰©λ‹ˆλ‹€. 1) .. 2024. 1. 21.
19 Interface μΈν„°νŽ˜μ΄μŠ€(Interface)λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 좔상화λ₯Ό μœ„ν•œ μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. 주둜 좔상 λ©”μ„œλ“œμ™€ μƒμˆ˜(static final λ³€μˆ˜)λ₯Ό μ •μ˜ν•˜λ©°, λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„(Implement)ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€. μΈν„°νŽ˜μ΄μŠ€μ˜ νŠΉμ§• 1) 좔상 λ©”μ„œλ“œμ˜ 집합 μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 λ©”μ„œλ“œ(본체가 μ—†λŠ” λ©”μ„œλ“œ)λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ©”μ„œλ“œλŠ” κ΅¬ν˜„μ΄ μ—†κ³ , ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. 2) κ΅¬ν˜„(Implement) μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€λŠ” implements ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. ν΄λž˜μŠ€μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜ν•œ λͺ¨λ“  좔상 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ™μ‹œμ— κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 3) 닀쀑 상속(Multiple Inheritance).. 2024. 1. 20.
18 Polymorphism λ‹€ν˜•μ„±(Polymorphism)은 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ—μ„œμ˜ μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜λ‘œ, λ™μΌν•œ μ½”λ“œκ°€ μ—¬λŸ¬ νƒ€μž…μ˜ κ°μ²΄μ—μ„œ λ‹€λ₯΄κ²Œ λ™μž‘ν•  수 μžˆλŠ” λŠ₯λ ₯을 μ˜λ―Έν•©λ‹ˆλ‹€. λ‹€ν˜•μ„±μ€ μ½”λ“œμ˜ μœ μ—°μ„±μ„ 높이고 객체 κ°„μ˜ 관계λ₯Ό κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•˜λŠ” 데 κΈ°μ—¬ν•©λ‹ˆλ‹€. - λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžμ‹ νƒ€μž…μ˜ 객체 μ°Έμ‘° κ°€λŠ₯ (리λͺ¨μ»¨ κ°œμˆ˜κ°€ μž‘μœΌλ‹ˆκΉŒ) - μžμ‹ νƒ€μž…μœΌλ‘œ λΆ€λͺ¨ νƒ€μž… 객체 μ°Έμ‘° λΆˆκ°€λŠ₯ (리λͺ¨μ»¨ κ°œμˆ˜κ°€ λ§ŽμœΌλ‹ˆκΉŒ) 더보기 // λ‹€ν˜•μ„± - μ—¬λŸ¬κ°€μ§€ ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λŠ₯λ ₯ class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void sound() { System.out.println(.. 2024. 1. 20.
17 Abstraction 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° (OOP)μ—μ„œ "좔상화(Abstractization)"λŠ” λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ΄λ‚˜ κ°œλ…μ„ κ°„μΆ”λ € ν‘œν˜„ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 원칙 쀑 ν•˜λ‚˜λ‘œ, ν΄λž˜μŠ€λ‚˜ 객체λ₯Ό μ •μ˜ν•  λ•Œ λΆˆν•„μš”ν•œ μ„ΈλΆ€ 사항을 μ œκ±°ν•˜κ³  μ€‘μš”ν•œ νŠΉμ§•μ— μ§‘μ€‘ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ 이해와 μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€. μΆ”μƒν™”μ˜ μ£Όμš” νŠΉμ§• μΌλ°˜ν™”(Generalization): μΆ”μƒν™”λŠ” μ—¬λŸ¬ κ°μ²΄λ‚˜ κ°œλ…μ—μ„œ κ³΅ν†΅λœ νŠΉμ§•μ„ λ„μΆœν•˜μ—¬ 일반적인 ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•©λ‹ˆλ‹€. 이둜써 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ΄ 높아지고 계측적인 ꡬ쑰λ₯Ό ν˜•μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μˆ¨κΉ€(Hiding): μΆ”μƒν™”λŠ” λΆˆν•„μš”ν•œ μ„ΈλΆ€ 사항을 숨기고 μ€‘μš”ν•œ λΆ€λΆ„λ§Œμ„ κ³΅κ°œν•¨μœΌλ‘œμ¨ 외뢀에 λ…ΈμΆœλ˜λŠ” 정보λ₯Ό μ œν•œν•©λ‹ˆλ‹€. μ΄λŠ” 정보 μ€λ‹‰μ˜ 원칙을 λ”°λ¦…λ‹ˆλ‹€. λͺ¨λΈλ§(.. 2024. 1. 20.
16 Composition relationship ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ "Composite relationship"와 "상속(Inheritance)"은 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ—μ„œ 객체 κ°„μ˜ 관계λ₯Ό μ„€λͺ…ν•˜λŠ” 두 가지 λ‹€λ₯Έ κ°œλ…μž…λ‹ˆλ‹€. Composite relationship은 일반적으둜 객체듀 κ°„μ˜ "has-a" 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©λ˜λ©°, μ΄λŠ” ν•œ 객체가 λ‹€λ₯Έ 객체λ₯Ό ν¬ν•¨ν•˜κ±°λ‚˜ κ·Έ μΌλΆ€λ‘œμ„œ μ‘΄μž¬ν•¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€. λ°˜λ©΄μ— 상속은 "is-a" 관계λ₯Ό λ‚˜νƒ€λ‚΄λ©°, 객체 κ°„μ˜ μΌλ°˜ν™”μ™€ νŠΉμˆ˜ν™”λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. AλŠ” Bλ‹€ (A is B) → Inheritance (10%) AλŠ” Bλ₯Ό 가지고 μžˆλ‹€ (A has B) → Composition (90%) 더보기 // λΆ€λΆ„ 객체 class Engine { void start() { System.out.println("Eng.. 2024. 1. 20.