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

Programming/Java28

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.
15 Inheritance 상속은 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)의 μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. 상속은 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 클래슀 κ°„μ˜ 계측 ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. κΈ°μ‘΄ 클래슀의 νŠΉμ„±μ„ 이어받아 μƒˆλ‘œμš΄ 클래슀λ₯Ό λ§Œλ“€ 수 있게 ν•΄μ£Όλ©°, μ½”λ“œμ˜ 일관성을 μœ μ§€ν•˜κ³  μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€. μƒμ†μ˜ 4가지 νŠΉμ§• μžλ°”λŠ” 단일 μƒμ†λ§Œμ„ μ§€μ›ν•©λ‹ˆλ‹€. μ΅œμƒμœ„ 쑰상은 Object ν΄λž˜μŠ€μž…λ‹ˆλ‹€. μžμ† ν΄λž˜μŠ€λŠ” μ‘°μƒμœΌλ‘œλΆ€ν„° λͺ¨λ“  멀버λ₯Ό μƒμ†λ°›μŠ΅λ‹ˆλ‹€. μžμ† 클래슀의 λ©€λ²„λŠ” 항상 쑰상보닀 κ°™κ±°λ‚˜ 더 λ§Žμ€ 멀버λ₯Ό κ°–μŠ΅λ‹ˆλ‹€. λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©(Method Overriding) λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©(Method Overriding)은 μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜λŠ” κ°œλ…μž…λ‹ˆλ‹€. 즉, λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ 이미 μ •μ˜λœ λ©”μ„œλ“œλ₯Ό μžμ‹ 클래.. 2024. 1. 20.
14 Encapsulation (feat. Access modifier) μΊ‘μŠν™”(Encapsulation)λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)의 ν•œ μ›μΉ™μœΌλ‘œ, 데이터와 κ·Έ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ©”μ„œλ“œ(ν•¨μˆ˜)λ₯Ό ν•˜λ‚˜μ˜ 단일 λ‹¨μœ„λ‘œ λ¬ΆλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” 정보 은닉(Information Hiding)이라고도 λΆˆλ¦½λ‹ˆλ‹€. μΊ‘μŠν™”λŠ” ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“ˆμ„±μ„ 높이고, μ½”λ“œλ₯Ό 더 μž¬μ‚¬μš© κ°€λŠ₯ν•˜κ²Œ λ§Œλ“€λ©°, μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. μΊ‘μŠν™”μ˜ 핡심 μ•„μ΄λ””μ–΄λŠ” κ΄€λ ¨ μžˆλŠ” 데이터와 κ·Έ 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ λ¬Άμ–΄ μ™ΈλΆ€μ—μ„œ 직접 μ ‘κ·Όν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λŒ€μ‹ , 객체의 λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ 데이터에 μ ‘κ·Όν•˜κ³  μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 객체 λ‚΄λΆ€μ˜ κ΅¬ν˜„ 세뢀사항을 감좔고, μ™ΈλΆ€μ—μ„œλŠ” 였직 곡개된 λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ 객체와 μƒν˜Έμž‘μš©ν•  수 있게 λ©λ‹ˆλ‹€. μ ‘κ·Ό μ œμ–΄μž(Access M.. 2024. 1. 20.
13 Method λ©”μ„œλ“œλŠ” νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œ 블둝을 λ‚˜νƒ€λ‚΄λ©°, ν•„μš”ν•  λ•Œ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ©”μ„œλ“œλŠ” μ½”λ“œλ₯Ό λͺ¨λ“ˆν™”ν•˜κ³  μž¬μ‚¬μš©μ„±μ„ 높이기 μœ„ν•œ μ€‘μš”ν•œ κ°œλ… 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. μžλ°”μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ™€ 클래슀 λ©”μ„œλ“œ(λ˜λŠ” 정적 λ©”μ„œλ“œ) 두 가지 μœ ν˜•μ˜ λ©”μ„œλ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이 두 μœ ν˜•μ˜ λ©”μ„œλ“œλŠ” μ„œλ‘œ λ‹€λ₯Έ μš©λ„μ™€ 호좜 방식을 가지고 μžˆμŠ΅λ‹ˆλ‹€. 1. μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ (Instance Method) μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” νŠΉμ • 객체의 μΈμŠ€ν„΄μŠ€μ— μ’…μ†λœ λ©”μ„œλ“œμž…λ‹ˆλ‹€. 즉, 객체λ₯Ό μƒμ„±ν•΄μ•Όλ§Œ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€: λ©”μ„œλ“œ μ •μ˜ μ‹œ static ν‚€μ›Œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€. λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. 객체λ₯Ό μƒμ„±ν•œ ν›„μ—μ•Όλ§Œ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  .. 2024. 1. 20.
12 Constructor μƒμ„±μž(Constructor)λŠ” 객체λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œλ‘œ, 객체의 μ΄ˆκΈ°ν™”λ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€. μƒμ„±μžλŠ” 클래슀 이름과 λ™μΌν•˜λ©°, 객체λ₯Ό 생성할 λ•Œ new ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ ν˜ΈμΆœλ©λ‹ˆλ‹€. μžλ°”μ—μ„œλŠ” μƒμ„±μžμ˜ 이름 μ•žμ— λ°˜ν™˜ νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μƒμ„±μžμ˜ μ£Όμš” λͺ©μ μ€ 객체가 λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜κ³  μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ“€μ΄ μ΄ˆκΈ°ν™”λ  λ•Œ ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 객체λ₯Ό 생성할 λ•Œλ§ˆλ‹€ μ‹€ν–‰λ˜λ©°, μƒμ„±μžλ₯Ό 톡해 객체의 초기 μƒνƒœλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 더보기 public class Car { // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ String brand; int year; // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž public Car(String brand, int year) { this.brand = brand; this.year = ye.. 2024. 1. 19.
11 Class intro - feat. Field (Member variable) 클래슀(Class)λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ—μ„œ μ‚¬μš©λ˜λŠ” 핡심 κ°œλ… 쀑 ν•˜λ‚˜λ‘œ, λΉ„μŠ·ν•œ νŠΉμ„±μ„ 가진 객체듀을 λ¬Άμ–΄μ„œ μΆ”μƒν™”ν•œ 섀계 λ„κ΅¬μž…λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 속성(멀버 λ³€μˆ˜)κ³Ό 객체가 μˆ˜ν–‰ν•  수 μžˆλŠ” λ™μž‘μ„ μ •μ˜ν•œ λ©”μ„œλ“œ(멀버 ν•¨μˆ˜)둜 κ΅¬μ„±λ©λ‹ˆλ‹€. 즉, ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€(객체)λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ 섀계도와 κ°™μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ•„νŒŒνŠΈ μ„€κ³„λ„μ—λŠ” 창문이 μ–΄λ–€ λ°©ν–₯에 μžˆλŠ”μ§€ μ°½λ¬Έ λͺ¨μ–‘은 μ–΄λ–»κ²Œ ν•  지에 λŒ€ν•œ 정보가 섀계도(클래슀)에 μž‘μ„±λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 그리고 μ„€κ³„λ„μ˜ μ§€μ‹œμ‚¬ν•­μ— λ”°λΌμ„œ 같은 λͺ¨μ–‘μ˜ μ•„νŒŒνŠΈκ°€ λ§Œλ“€μ–΄μ§€λŠ” μ›λ¦¬μž…λ‹ˆλ‹€. ν•„λ“œ(Fields) 클래슀 μ•ˆμ˜ ν•„λ“œ(Fields)λŠ” 클래슀의 멀버 λ³€μˆ˜λ‘œ, 객체의 μƒνƒœλ₯Ό μ €μž₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. ν•„λ“œλŠ” 클래슀 내뢀에 μ„ μ–Έλ˜λ©°, 객체의 속성.. 2024. 1. 19.