λ‚˜μ˜ λͺ¨μ–‘

013 | Java - Inheritance, Encapsulation λ³Έλ¬Έ

SEB/TIL

013 | Java - Inheritance, Encapsulation

kexon 2022. 7. 11. 16:49

πŸ’™ 였늘의 곡뢀 - 1. 상속

🀍 상속(Inheritance)

더보기
  • 기쑴의 클래슀λ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±
  • λ‹¨μΌμƒμ†λ§Œ ν—ˆμš©
    • JavaλŠ” 단일상속(ν•˜λ‚˜μ˜ λΆ€λͺ¨λ§Œ 상속)만 κ°€λŠ₯
    • 비쀑이 높은 클래슀만 상속, λ‚˜λ¨Έμ§€λŠ” ν¬ν•¨κ΄€κ³„λ‘œ 함
  • μž₯점: λ‹€ν˜•μ  ν‘œν˜„ κ°€λŠ₯
    • ν”„λ‘œκ·Έλž˜λ¨Έ == ν”„λ‘œκ·Έλž˜λ¨Έ
    • ν”„λ‘œκ·Έλž˜λ¨Έ == μ‚¬λžŒ

상속 κ΅¬ν˜„

  • ν‚€μ›Œλ“œ: extends

🀍 ν¬ν•¨κ΄€κ³„

더보기
  • μƒμ†μ²˜λŸΌ 클래슀λ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλŠ” 방법
  • 클래슀의 λ©€λ²„λ‘œ μ°Έμ‘°λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것
  • 클래슀의 λ©€λ²„λ‘œ λ‹€λ₯Έ 클래슀 νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것
  • 클래슀 κ°„ 관계 μ„€μ •
    • 상속관계: ~λŠ” ~이닀 ( ~ is a ~ )
    • 포함관계: ~λŠ” ~을 κ°€μ§€κ³  μžˆλ‹€ ( ~ has a ~ )
      • Point c = new Point();

🀍 λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©

더보기
  • μƒμœ„ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ„œλ“œμ™€ λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜λŠ” 것
  • 쑰건
    • 선언뢀와 μƒμœ„ν΄λž˜μŠ€μ˜ λ©”μ„œλ“œμ΄λ¦„, λ§€κ°œλ³€μˆ˜, νƒ€μž…μ΄ 일치
    • μ ‘κ·Όμ œμ–΄μž λ²”μœ„λŠ” μƒμœ„ν΄λž˜μŠ€μ˜ λ©”μ„œλ“œλ³΄λ‹€ κ°™κ±°λ‚˜ 넓어야함
    • μƒμœ„ν΄λž˜μŠ€ λ©”μ„œλ“œλ³΄λ‹€ λ§Žμ€ μ˜ˆμ™Έ μ„ μ–Έ λΆˆκ°€

🀍 super vs super()

더보기

super

  • μƒμœ„ 클래슀의 멀버와 μžμ‹ μ˜ 멀버λ₯Ό κ΅¬λ³„ν•˜λŠ”λ° μ‚¬μš©
    ⇒ this, superλŠ” 기본적으둜 같은 것
  • μ˜ˆμ‹œ
public class Super {
    public static void main(String[] args) {
        Lower l = new Lower();
        l.callNum();
    }
}

class Upper {
    int count = 20; // super.count
}

class Lower extends Upper {
    int count = 15;

    void callNum() {
        System.out.println("count: " + count);
        System.out.println("this.count: " + this.count);
        System.out.println("super.count: " + super.count);
    }
}
  • Upperν΄λž˜μŠ€μ™€ Upperν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 Lower클래슀의 λ³€μˆ˜λͺ…이 count둜 κ°™μŒ
    • super μ•ˆλΆ™μ΄λ©΄ μ»΄νŒŒμΌλŸ¬λŠ” ν•΄λ‹Ή 객체가 μžμ‹ μ΄ μ†ν•œ μΈμŠ€ν„΄μŠ€ 객체의 멀버λ₯Ό λ¨Όμ € μ°Έμ‘°
      ⇒ 이 경우, 두 개의 같은 μ΄λ¦„μ˜ λ³€μˆ˜λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ 방법: super

super()

  • μƒμœ„ 클래슀의 μƒμ„±μž 호좜
  • μƒμ„±μž μ•ˆμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
  • λͺ¨λ“  μƒμ„±μžμ˜ μ²«μ€„μ—λŠ” λ°˜λ“œμ‹œ this() λ˜λŠ” super() μ„ μ–Έ
    • super()κ°€ μ—†λŠ” 경우 μ»΄νŒŒμΌλŸ¬κ°€ μƒμ„±μž 첫쀄에 μžλ™ super()λ₯Ό μ„ μ–Έν•˜λŠ”λ°,
      클래슀 λ§Œλ“€ λ•Œ μžλ™μœΌλ‘œ κΈ°λ³Έ μƒμ„±μžλ₯Ό μƒμ„±ν•˜λŠ” 것을 μŠ΅κ΄€ν™”ν•˜λŠ” 것이 μ’‹μŒ
      ⇒ μƒμœ„ν΄λž˜μŠ€μ— κΈ°λ³Έμƒμ„±μžκ°€ μ—†μœΌλ©΄ μ—λŸ¬ λ°œμƒ
  • μ˜ˆμ‹œ
public class SuperMethod {
    public static void main(String[] args) {
        Student s = new Student();
    }
}

class Human {
    Human() {
        System.out.println("휴먼 클래슀 μƒμ„±μž");
    }
}

class Student extends Human {   // Human ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속
    Student() {
        super();    // Human 클래슀의 μƒμ„±μž 호좜
        System.out.println("학생 클래슀 μƒμ„±μž");
    }
}

🀍 Object 클래슀

더보기
  • μžλ°” 클래슀 μƒμ†κ³„μΈ΅λ„μ—μ„œ μ΅œμƒμœ„μ— μœ„μΉ˜ν•œ μƒμœ„ν΄λž˜μŠ€
  • μžλ°”μ˜ λͺ¨λ“  ν΄λž˜μŠ€λŠ”,
    • Object ν΄λž˜μŠ€λ‘œλΆ€ν„° ν™•μž₯됨
    • Object ν΄λž˜μŠ€μ— μ •μ˜λœ 11개의 λ©”μ„œλ“œλ₯Ό μžλ™ 상속받아 λ”°λ‘œ μ •μ˜ν•˜μ§€ μ•Šκ³  μ‚¬μš© κ°€λŠ₯
Object ν΄λž˜μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œ (μžλ™ 상속)

 

 

Object (Java Platform SE 7 )

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. A subclass overrides the finalize method to dispose of system resources or to perform other cleanup. The general contract of fi

docs.oracle.com

  • μƒμœ„ ν΄λž˜μŠ€κ°€ μ—†μœΌλ©΄ extends Objectλ₯Ό μžλ™μœΌλ‘œ μΆ”κ°€  Object 클래슀 상속받도둝 함

πŸ’™ 였늘의 곡뢀 - 2. μΊ‘μŠν™”

🀍 μΊ‘μŠν™”(Encapsulation)

더보기
  • νŠΉμ • 객체 μ•ˆμ— κ΄€λ ¨λœ 속성(data fields)κ³Ό κΈ°λŠ₯(method)을 ν•˜λ‚˜μ˜ 캑슐둜 λ§Œλ“€μ–΄ 데이터λ₯Ό μ™ΈλΆ€λ‘œλΆ€ν„° λ³΄ν˜Έν•˜λŠ” 것
  • λͺ©μ : 정보 은닉(data hiding)
    • 데이터 보호
    • λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” 데이터에 λŒ€ν•œ λΆˆν•„μš”ν•œ μ™ΈλΆ€ λ…ΈμΆœ λ°©μ§€

🀍 νŒ¨ν‚€μ§€(Package)

더보기
  • νŠΉμ •ν•œ λͺ©μ μ„ κ³΅μœ ν•˜λŠ” ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 묢음
  • λͺ©μ 
    • ν΄λž˜μŠ€λ“€μ„ κ·Έλ£Ή λ‹¨μœ„λ‘œ λ¬Άμ–΄ 효과적으둜 관리
  • νŒ¨ν‚€μ§€λŠ” ν•˜λ‚˜μ˜ 디렉토리이고, ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€μ— μ†ν•œ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€ νŒŒμΌμ€ λͺ¨λ‘ ν•΄λ‹Ή νŒ¨ν‚€μ§€μ— μ†ν•΄μžˆμŒ
  • 계측ꡬ쑰 κ°„ ꡬ뢄: . (점)
  • νŒ¨ν‚€μ§€κ°€ μžˆλŠ” 경우: μ†ŒμŠ€ μ½”λ“œμ˜ 첫째쀄에 λ°˜λ“œμ‹œ ‘package νŒ¨ν‚€μ§€λͺ…’으둜 ν‘œμ‹œ
    • νŒ¨ν‚€μ§€ 선언이 없을 λ–„: 이름 μ—†λŠ” νŒ¨ν‚€μ§€μ— μ†ν•˜κ²Œ 됨

import문

  • λ‹€λ₯Έ νŒ¨ν‚€μ§€ λ‚΄μ˜ 클래슀λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
  • νŒ¨ν‚€μ§€ ꡬ문과 클래슀문 사이에 μž‘μ„±
import νŒ¨ν‚€μ§€λͺ….클래슀λͺ…; 

// or

// *: μ „λΆ€ λ‹€ 포함
import νŒ¨ν‚€μ§€λͺ….*;

🀍 μ ‘κ·Όμ œμ–΄μž(Access Modifier)

더보기

μ œμ–΄μž(Modifier)

  • 클래슀, ν•„λ“œ, λ©”μ„œλ“œ, μƒμ„±μž 등에 뢀가적인 의미λ₯Ό λΆ€μ—¬ν•˜λŠ” ν‚€μ›Œλ“œ
  • μ’…λ₯˜
    • μ ‘κ·Όμ œμ–΄μž: public, protected, default, private
    • κΈ°νƒ€μ œμ–΄μž: static, final, abstract, …

μ ‘κ·Όμ œμ–΄μž(Access Modifier)

  • 클래슀 μ™ΈλΆ€λ‘œμ˜ λΆˆν•„μš”ν•œ 데이터 λ…ΈμΆœ λ°©μ§€(data hiding)
  • μ™ΈλΆ€λ‘œλΆ€ν„° λ°μ΄ν„°μ˜ μž„μ˜λ³€κ²½ ν†΅μ œ κ°€λŠ₯
  • μ ‘κ·Όμ œν•œ λ²”μœ„
    • (λ„“μŒ) public(μ ‘κ·Ό μ œν•œ μ—†μŒ) > protected(동일 νŒ¨ν‚€μ§€ + ν•˜μœ„ν΄λž˜μŠ€) > default(동일 νŒ¨ν‚€μ§€) > private(동일 클래슀) (쒁음)

🀍 getter / setter

더보기
  • getter: μ„€μ •ν•œ λ³€μˆ˜ 값을 μ½μ–΄μ˜€λŠ”λ° μ‚¬μš©
  • setter: 데이터 값을 λ³€κ²½ κ°€λŠ₯ν•˜κ²Œ 함

πŸ’œ 였늘의 생각 쑰각λͺ¨μŒ

  • 였늘 λ‹΄λ‹Ή μ—”μ§€λ‹ˆμ–΄ λΆ„μ˜ λž©νƒ‘ μ—…λ°μ΄νŠΈ, μ •μ „μœΌλ‘œ μ•„μΉ¨ μ €λ…μœΌλ‘œ μž‘μ€ 해프닝이 μžˆμ—ˆλ‹€. 특히 저녁엔 κ·Έ 덕뢄에(?) λ‹€λ₯Έ μ—”μ§€λ‹ˆμ–΄ λΆ„μ˜ 기타 μ—°μ£Όλ₯Ό 듀을 수 μžˆμ—ˆλ‹€. 자꾸 μ—¬κΈ°μ €κΈ°μ„œ 기타가 λ‚˜μ˜€λŠ”λ° 기타 객체지ν–₯이냐곸ㅋㅋㅋㅋㅋ μ•„ μ§„μ§œ λ„ˆλ¬΄ μ›ƒκ²Όλ‹€πŸ€£πŸ€£πŸ€£ κ·Έλž˜λ„ 생각보닀 μž˜ν•΄μ„œ μ˜μ™Έμ˜€λ‹€ γ…‹πŸ‘πŸ»πŸ‘πŸ»
  • λΆ„λͺ…νžˆ 였늘 λ‹€μ‹œ λ³Έ λ‚΄μš©μΈλ° μ™œ 당일 ν•œκ²ƒλ„ 기얡이 μ•ˆλ‚ κΉŒ..😭,,,,......μ™œκ² μ–΄..,,,....γ…‹..μšœλ λ―Έν•˜μž₯.,,,..😢‍🌫️🫠

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

015 | Java  (0) 2022.07.13
014 | Java - Polymorphism, Abstraction  (0) 2022.07.12
012 | Java - constructor, inner class  (0) 2022.07.08
011 | Java - class, object, field, method, static, overloading  (0) 2022.07.07
010 | Java - Array  (0) 2022.07.06
Comments