All :L

[Java] 좔상화 (Abstraction) λ³Έλ¬Έ

STUDY/Java

[Java] 좔상화 (Abstraction)

ofijwe 2024. 10. 18. 21:41
λ°˜μ‘ν˜•

πŸ“’ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°

1️⃣ 객체지ν–₯ μ–Έμ–΄ νŠΉμ§•

  • OOP is A P.I.E
    • Abstraction(좔상화)
    • Polymorphism(λ‹€ν˜•μ„±)
    • Ingeritance(상속)
    • Encapsulation(데이터 은닉과 보호)

2️⃣ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming)

  • 객체
    • 주체가 μ•„λ‹Œ 것, 주체가 ν™œμš©ν•˜λŠ” 것
  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°
    • μ£Όλ³€μ˜ λ§Žμ€ 것듀을 객체화 ν•΄μ„œ ν”„λ‘œκ·Έλž˜λ° ν•˜λŠ” 것
    • μž₯점
      • 블둝 ν˜•νƒœμ˜ λͺ¨λ“ˆν™”λœ ν”„λ‘œκ·Έλž˜λ° → μ‹ λ’°μ„± 高 / μΆ”κ°€, μˆ˜μ •, μ‚­μ œ 용이 / μž¬μ‚¬μš©μ„± 高

3️⃣ ν˜„μ‹€ 세계 객체, 클래슀, ν”„λ‘œκ·Έλž¨μ˜ 객체(instance, object)의 관계

  • 좔상화 & ꡬ체화
    • ν˜„μ‹€μ˜ 객체가 κ°–λŠ” 속성과 κΈ°λŠ₯은 좔상화 λ˜μ–΄ ν΄λž˜μŠ€μ— μ •μ˜λ¨.
    • ν΄λž˜μŠ€λŠ” ꡬ체화 λ˜μ–΄ ν”„λ‘œκ·Έλž¨μ˜ 객체(instance, object)κ°€ 됨.
    • ν˜„μ‹€μ˜ κ°μ²΄λŠ” μš°λ¦¬κ°€ λ§Œμ§€κ³  λŠλ‚„ 수 μžˆλŠ” 것 → μ‹€μƒν™œμ— ꡬ체화 λ˜μ–΄μžˆλŠ” λ‚΄μš©
    • 객체λ₯Ό 맀번 μƒˆλ‘œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€λ©΄?
      • μ‹€μƒν™œ → ν‹€, 섀계도 μ‚¬μš©
      • 섀계도 → μ œν’ˆμ„ λ§Œλ“€κΈ° μœ„ν•΄ ν•„μš”ν•˜μ§€λ§Œ μ‹€μ œλ‘œ μ‚¬μš© x, μ„€κ³„λ„λ‘œ λ§Œλ“  μ œν’ˆ μ‚¬μš©
      • μ„€κ³„λ„λŠ” ν•˜λ‚˜μ˜ μ’…λ₯˜(Type)κ°€ 되고 λ‚˜μ˜¨ μ œν’ˆμ„ 객체라고 λΆ€λ₯΄λ©° 주체가 μ‚¬μš©
  • ν”„λ‘œκ·Έλž¨μ˜ ν΄λž˜μŠ€μ™€ 객체
    • 클래슀λ₯Ό 객체둜 ꡬ체화 & 객체화
    • 클래슀
      • 객체λ₯Ό μ •μ˜ν•΄ 놓은 것. 즉, 객체의 섀계도, ν‹€
      • 객체λ₯Ό 생성할 λ•Œ μ‚¬μš©
      • 데이터 νƒ€μž…
    • 객체
      • 클래슀λ₯Ό ꡬ체화 ν•œ 것
      • 클래슀λ₯Ό 데이터 νƒ€μž…μœΌλ‘œ λ©”λͺ¨λ¦¬μ— μƒμ„±λ˜μ–΄ μ‹€μ œλ‘œ λ™μž‘ν•˜λŠ” 것
      • λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 데이터

4️⃣ 객체 μ‚¬μš©ν•˜κΈ°

  • 클래슀 ν•˜λ‚˜λ„ 레퍼런슀 νƒ€μž…μ˜ λ³€μˆ˜. 즉, Type은 클래슀λͺ…이라고 λ³Ό 수 있음.

5️⃣ 객체 생성과 λ©”λͺ¨λ¦¬

  • JVM λ©”λͺ¨λ¦¬ ꡬ쑰
    • meta-space
      • 클래슀 정보 처리(νƒ€μž…, Field, Method 정보)
    • stack
      • λ©”μ„œλ“œλ“€μ˜ μ‹€ν–‰ 곡간
        • thread λ³„λ‘œ 별도 관리
        • λ©”μ„œλ“œ 호좜 μ‹œ λ§ˆλ‹€ λ©”μ„œλ“œ ν”„λ ˆμž„ 적측
        • λ©”μ„œλ“œ ν”„λ ˆμž„μ— λ‘œμ»¬λ³€μˆ˜λ„ μŒ“μ΄λŠ” ꡬ쑰
    • heap
      • 객체λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ μ˜μ—­
        • thread에 μ˜ν•΄ 곡유
        • 객체가 μƒμ„±λ˜κ³  G.C에 μ˜ν•΄ 정리됨.
        • μƒμˆ˜ ν’€
  • 객체의 생성 & λ©”λͺ¨λ¦¬ ν• λ‹Ή
    • java 파일 κΈ°μ‘΄ 파일과 λ³€κ²½ 사항 ν™•μΈν•˜κΈ°
    • μ°Έμ‘°ν•˜κ³  μžˆλŠ” 것이 없을 경우 garbage / μ΄λŸ¬ν•œ 것을 μ‚­μ œν•˜λŠ”κ²Œ garbage colletor

πŸ“’ λ³€μˆ˜

1️⃣ λ³€μˆ˜ μ’…λ₯˜

  • νƒ€μž…μ— λ”°λ₯Έ λΆ„λ₯˜
    • Primitive Type Variable → int i, char c, …
    • Reference Type variable → String s, int [] points, Person p, …
  • μ„ μ–Έ μœ„μΉ˜μ— λ”°λ₯Έ λΆ„λ₯˜
    • 멀버 λ³€μˆ˜
      • 클래슀 μ˜μ—­(static keyword) → 클래슀 멀버 λ³€μˆ˜
      • 클래슀 μ˜μ—­ → μΈμŠ€ν„΄μŠ€ 멀버 λ³€μˆ˜
    • 지역 λ³€μˆ˜
      • ν•¨μˆ˜ λ‚΄λΆ€ → 지역 λ³€μˆ˜
      • ν•¨μˆ˜ μ„ μ–ΈλΆ€ → νŒŒλΌλ―Έν„° λ³€μˆ˜

2️⃣ μΈμŠ€ν„΄μŠ€ 멀버 λ³€μˆ˜

  • μ„ μ–Έ μœ„μΉ˜
    • 클래슀 {} μ˜μ—­μ— μ„ μ–Έ
  • λ³€μˆ˜ 생성
    • 객체가 λ§Œλ“€μ–΄μ§ˆ λ•Œ heap에 객체 λ³„λ‘œ 생성
  • λ³€μˆ˜ μ΄ˆκΈ°ν™”
    • νƒ€μž… λ³„λ‘œ default μ΄ˆκΈ°ν™”
  • λ³€μˆ˜ μ ‘κ·Ό
    • 객체 생성 ν›„(λ©”λͺ¨λ¦¬μ— 올린 ν›„) 객체 이름(μ†Œμ†)으둜 μ ‘κ·Ό
    • 객체λ₯Ό λ§Œλ“€ λ•Œλ§ˆλ‹€ 객체 λ³„λ‘œ 생성 → κ°μ²΄λ§ˆλ‹€ κ³ μœ ν•œ μƒνƒœ(λ³€μˆ˜ κ°’) μœ μ§€
  • μ†Œλ©Έ μ‹œμ 
    • Garbage Collector에 μ˜ν•΄ 객체가 μ—†μ–΄μ§ˆ λ•Œ
    • ν”„λ‘œκ·Έλž˜λ¨Έκ°€ λͺ…μ‹œμ μœΌλ‘œ μ†Œλ©Έ μ‹œν‚¬ 수 X

3️⃣ 클래슀 멀버 λ³€μˆ˜

  • μ„ μ–Έ μœ„μΉ˜
    • 클래슀 {} μ˜μ—­μ— μ„ μ–Έ, static ν‚€μ›Œλ“œλ₯Ό λΆ™μž„.
  • λ³€μˆ˜ 생성
    • 클래슀 λ‘œλ”μ— μ˜ν•΄ ν΄λž˜μŠ€κ°€ λ‘œλ”© 될 λ•Œ heap에 클래슀 λ³„λ‘œ 생성
  • λ³€μˆ˜ μ΄ˆκΈ°ν™”
    • νƒ€μž… λ³„λ‘œ default μ΄ˆκΈ°ν™”
  • λ³€μˆ˜ μ ‘κ·Ό
    • 객체 생성과 λ¬΄κ΄€ν•˜κ²Œ 클래슀 이름(μ†Œμ†)으둜 μ ‘κ·Ό
    • 객체λ₯Ό μƒμ„±ν•˜κ³  객체 μ΄λ¦„μœΌλ‘œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‚˜ static에 λΆ€ν•©ν•œ ν‘œν˜„μ€ μ•„λ‹˜
    • → class둜 μ ‘κ·Ό
  • μ†Œλ©Έ μ‹œμ 
    • ν΄λž˜μŠ€κ°€ μ–Έλ‘œλ“œ 될 λ•Œ G.C λ°œμƒ

4️⃣ 지역 λ³€μˆ˜ & νŒŒλΌλ―Έν„° λ³€μˆ˜

  • μ„ μ–Έ μœ„μΉ˜
    • 클래슀 μ˜μ—­μ˜ {} μ΄μ™Έμ˜ λͺ¨λ“  μ€‘κ΄„ν˜Έ μ•ˆμ— μ„ μ–Έ
  • λ³€μˆ˜ 생성
    • μ„ μ–Έλœ 라인이 싀행될 λ•Œ
    • 생성 λ©”λͺ¨λ¦¬ μ˜μ—­ → stack의 λ©”μ„œλ“œ ν”„λ ˆμž„ λ‚΄λΆ€
  • λ³€μˆ˜ μ΄ˆκΈ°ν™”
    • μ‚¬μš©ν•˜κΈ° μ „ λͺ…μ‹œμ  μ΄ˆκΈ°ν™” ν•„μš”
  • λ³€μˆ˜ μ ‘κ·Ό
    • μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Ό λΆˆκ°€, μ†Œμ† λΆˆν•„μš”
    • λ‚΄λΆ€μ—μ„œλŠ” 이름에 λ°”λ‘œ μ ‘κ·Ό
  • μ†Œλ©Έ μ‹œμ 
    • μ„ μ–Έλœ μ˜μ—­μΈ {}을 λ²—μ–΄λ‚  λ•Œ

πŸ“’ λ©”μ„œλ“œ

1️⃣ λ©”μ„œλ“œ

  • ν˜„μ‹€μ˜ 객체가 ν•˜λŠ” λ™μž‘μ„ ν”„λ‘œκ·Έλž˜λ° ν™”
  • μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λͺ…λ Ήλ¬Έμ˜ 집합
  • λ©”μ„œλ“œ μž‘μ„± 이유
    • 반볡적으둜 μ‚¬μš©λ˜λŠ” μ½”λ“œ 쀑볡 방지 (DRY, WET)
    • μ½”λ“œμ˜ μ–‘ 쀄일 수 있고 μœ μ§€ 보수 용이
  • λ©”μ„œλ“œ ν•„μš”μ„±
    • λ©”μ„œλ“œ μ‚¬μš© x
    • Person p = new Person(); System.out.println(p.name + ":" + p.age); Person p2 = new Person(); System.out.println(p2.name + ":" + p2.age);
    • λ©”μ„œλ“œ μ‚¬μš© o
    • Person p = new Person(); Person p2 = new Person()l p.printInfo(); p2.printInfo();

2️⃣ Variable arguments

  • λ©”μ„œλ“œ μ„ μ–Έ μ‹œ 동일 νƒ€μž…μ˜ μΈμžκ°€ λͺ‡ 개 λ“€μ–΄μ˜¬ 지 μ˜ˆμƒν•  수 μ—†λŠ” 경우 (가변적)
    • λ°°μ—΄ νƒ€μž… μ„ μ–Έν•  수 O
    • → λ©”μ„œλ“œ 호좜 μ „ λ°°μ—΄ 생성, μ΄ˆκΈ°ν™” 해야함. (λ²ˆκ±°λ‘œμ›€)
    • … 을 μ΄μš©ν•΄ νŒŒλΌλ―Έν„° μ„ μ–Έ
    • → 호좜 μ‹œ λ„˜κ²¨μ€€ κ°’μ˜ κ°œμˆ˜μ— 따라 μžλ™ λ°°μ—΄ 생성 및 μ΄ˆκΈ°ν™”

3️⃣ λ©”μ„œλ“œ 호좜

  • λ©”μ„œλ“œ 호좜 μ‹œ λ©”μ„œλ“œμ˜ 선언뢀에 맞좰 ν˜ΈμΆœν•΄μ•Ό 함.
    • λ©”μ„œλ“œ 이름 : λ°˜λ“œμ‹œ 동일
    • νŒŒλΌλ―Έν„° : μ„ μ–Έλœ νŒŒλΌλ―Έν„°μ˜ 개수 동일, νƒ€μž…μ€ promotion 적용 κ°€λŠ₯
  • λ©”μ„œλ“œ μ ‘κ·Ό
    • 멀버 λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ static λ˜λŠ” non static μƒνƒœ κ΅¬λΆ„ν•΄μ„œ 호좜
  • class 멀버와 instance λ©€λ²„κ°„μ˜ 참쑰와 호좜 - 29page μ°Έκ³ 
    • ν˜ΈμΆœν•˜λ €λŠ” 멀버가 λ©”λͺ¨λ¦¬μ— μžˆλŠ”μ§€
      • 있으면 호좜 O
      • μ—†μœΌλ©΄ 호좜 X → λ¨Όμ € λ‘œλ”© ν›„ μ‚¬μš©ν•΄μ•Ό 함
    • static member → μ–Έμ œλ‚˜ λ©”λͺ¨λ¦¬ O
      • 클래슀 λ‘œλ”© μ‹œ μžλ™ 등둝
    • instance member → 객체 생성 μ „ λ©”λͺ¨λ¦¬ X
      • 객체 생성 μ‹œ λͺ¨λ“  instance 멀버듀은 λ©”λͺ¨λ¦¬μ— 생성
      • 레퍼런슀λ₯Ό 톡해 μ ‘κ·Ό
  • λ©”μ„œλ“œ 호좜 μŠ€νƒ
    • μŠ€νƒ
      • First in Last out ꡬ쑰
    • λ©”μ„œλ“œ 호좜 μŠ€νƒ
      • 각 λ©”μ„œλ“œ 호좜 μ‹œ λ§ˆλ‹€ λ©”μ„œλ“œ λ™μž‘μ„ μœ„ν•œ λ©”λͺ¨λ¦¬ μƒμžλ₯Ό ν•˜λ‚˜μ”© ν• λ‹Ή
        • μƒμž 내뢀에 λ©”μ„œλ“œλ₯Ό μœ„ν•œ νŒŒλΌλ―Έν„° λ³€μˆ˜ λ“± 둜컬 λ³€μˆ˜ ꡬ성
  • κΈ°λ³Έν˜• λ³€μˆ˜μ™€ μ°Έμ‘°ν˜• λ³€μˆ˜ - 31page μ°Έκ³ 
    • λ©”μ„œλ“œ 호좜 μ‹œ νŒŒλΌλ―Έν„°λ‘œ μž…λ ₯된 값을 λ³΅μ‚¬ν•΄μ„œ 전달

4️⃣ λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©

  • μ˜€λ²„λ‘œλ”©
    • λ™μΌν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œμ˜ μΆ”κ°€ μž‘μ„±
    • 일반적으둜 λ©”μ„œλ“œ 이름은 κΈ°λŠ₯λ³„λ‘œ 의미 있게 정함
    • λ™μΌν•œ κΈ°λŠ₯을 μ—¬λŸ¬ ν˜•νƒœλ‘œ μ •μ˜
  • μž₯점
    • κΈ°μ–΅ν•΄μ•Ό ν•  λ©”μ„œλ“œκ°€ κ°μ†Œ
    • 쀑볡 μ½”λ“œμ— λŒ€ν•œ 효율적 관리 κ°€λŠ₯
  • 방법
    • λ©”μ„œλ“œ 이름 동일
    • νŒŒλΌλ―Έν„° 개수 or μˆœμ„œ, νƒ€μž…μ΄ 달라야 함
      • νŒŒλΌλ―Έν„°κ°€ κ°™μœΌλ©΄ 쀑볡 μ„ μ–Έ 였λ₯˜
    • 리턴 νƒ€μž…μ€ 의미 X

πŸ“’ μƒμ„±μž

1️⃣ μƒμ„±μž

  • 객체λ₯Ό 생성할 λ•Œ ν˜ΈμΆœν•˜λŠ” λ©”μ„œλ“œ λΉ„μŠ·ν•œ 것
    • new ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜λŠ” 것
    • 일반 멀버 λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”λ‚˜ 객체 생성 μ‹œ 싀행돼야 ν•˜λŠ” μž‘μ—… 정리
  • μž‘μ„± κ·œμΉ™
    • λ©”μ„œλ“œμ™€ λΉ„μŠ·ν•˜λ‚˜ 리턴 νƒ€μž… X
    • 이름은 클래슀 이름과 동일
  • μ œν•œμž 클래슀_λͺ… (νƒ€μž… λ³€μˆ˜_λͺ…, νƒ€μž… λ³€μˆ˜_λͺ… ...) { // 멀버 λ³€μˆ˜ μ΄ˆκΈ°ν™” μž‘μ—… }

2️⃣ μƒμ„±μž μ’…λ₯˜

  • κΈ°λ³Έ μƒμ„±μž(default constructor)
    • νŒŒλΌλ―Έν„° X, κ΅¬ν˜„λΆ€κ°€ λΉ„μ–΄μžˆλŠ” ν˜•νƒœ
    • μƒμ„±μž μ½”λ“œκ°€ μ—†μœΌλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μž 제곡
  • νŒŒλΌλ―Έν„°κ°€ μžˆλŠ” μƒμ„±μž
    • μƒμ„±μžμ˜ λͺ©μ μ΄ 일반 멀버 λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”
    • → μƒμ„±μž 호좜 μ‹œ 값을 λ„˜κ²¨μ€˜μ„œ μ΄ˆκΈ°ν™”

3️⃣ this.

  • μ°Έμ‘° λ³€μˆ˜λ‘œμ¨ 객체 μžμ‹ μ„ 가리킴
    • thisλ₯Ό μ΄μš©ν•΄ μžμ‹ μ˜ 멀버에 μ ‘κ·Ό κ°€λŠ₯
  • μš©λ„
    • 둜컬 λ³€μˆ˜μ™€ 멀버 λ³€μˆ˜μ˜ 이름이 λ™μΌν•œ 경우 멀버 λ³€μˆ˜μž„μ„ λͺ…μ‹œμ μœΌλ‘œ λ‚˜νƒ€λƒ„
    • λͺ…μ‹œμ μœΌλ‘œ λ©€λ²„μž„μ„ λ‚˜νƒ€λ‚Ό 경우 μ‚¬μš©
  • thisλŠ” 객체에 λŒ€ν•œ μ°Έμ‘° → static μ˜μ—­μ—μ„œ this μ‚¬μš© λΆˆκ°€

4️⃣ this()

  • λ©”μ„œλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μƒμ„±μžλ„ μ˜€λ²„λ‘œλ”© κ°€λŠ₯
    • 객체 생성 μ‹œ ν•„μš”ν•œ 멀버 λ³€μˆ˜λ§Œ μ΄ˆκΈ°ν™” 진행
    • → μƒμ„±μž 별 μ½”λ“œμ˜ 쀑볡 λ°œμƒ
    • ν•œ μƒμ„±μžμ—μ„œ λ‹€λ₯Έ μƒμ„±μž ν˜ΈμΆœν•  λ•Œ μ‚¬μš©
  • λ°˜λ“œμ‹œ 첫 μ€„μ—μ„œλ§Œ 호좜 κ°€λŠ₯

5️⃣ μ΄ˆκΈ°ν™” 블둝

  • μƒμ„±μžμ²˜λŸΌ 멀버 λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”λ₯Ό λͺ©μ μœΌλ‘œ 함
    • {}λ₯Ό μ΄μš©ν•΄ λ‚΄λΆ€ μ‹€ν–‰ μ½”λ“œ μž‘μ„±
    • if 이름 X → 별도 호좜 X, νŒŒλΌλ―Έν„° 받을 수 X
  • μ΄ˆκΈ°ν™” 블둝 μ’…λ₯˜
    • 클래슀 μ΄ˆκΈ°ν™” 블둝
      • 클래슀 멀버 λ³€μˆ˜ μ΄ˆκΈ°ν™”μ— μ‚¬μš©
      • 클래슀 λ‘œλ”© μ‹œ 1회 호좜
    • μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” 블둝
      • μΈμŠ€ν„΄μŠ€ 멀버 λ³€μˆ˜ μ΄ˆκΈ°ν™”μ— μ‚¬μš©
      • μƒμ„±μž μ½”λ“œ 싀행보닀 λ¨Όμ € 호좜 됨
      • 객체 μƒμ„±μ‹œ λ§ˆλ‹€ 1회 호좜
λ°˜μ‘ν˜•

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

[Java] μ œλ„€λ¦­ (Generic)  (2) 2024.10.28
[Java] μΈν„°νŽ˜μ΄μŠ€ (Interface)  (0) 2024.10.26
[Java] λ‹€ν˜•μ„± (Polymorphism)  (0) 2024.10.24
[Java] 상속 (Inheritance)  (0) 2024.10.20
[Java] μžλ°” κΈ°λ³Έ  (0) 2024.10.16
Comments