2021-04-04(Sun)

ν•­λͺ©

λ‚΄μš©

ν•™μŠ΅ λ‚ μ§œ

2021-04-04(일)

ν•™μŠ΅ μ‹œκ°„

09:00~23:00

ν•™μŠ΅ λ²”μœ„ 및 주제

java의 정석 훑어보기

ν•™μŠ΅ λͺ©ν‘œ

ν—·κ°ˆλ¦¬λŠ” κ°œλ…λ“€μ„ λͺ…ν™•νžˆ 파보자.

λ™λ£Œ ν•™μŠ΅ 방법

-

상세 ν•™μŠ΅ λ‚΄μš©

λͺ…λ£Œν•˜κ²Œ 말둜 ν‘œν˜„ν•˜κΈ° νž˜λ“€μ—ˆλ˜ 뢀뢄듀을 μ •λ¦¬ν•΄λ³΄μž~!

μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”©

μ˜€λ²„λ‘œλ”©

  • κ°œλ…: 이름은 κ°™μ§€λ§Œ μ‹œκ·Έλ‹ˆμ²˜(νŒŒλΌλ―Έν„° 수, νƒ€μž…)κ°€ λ‹€λ₯Έ λ©”μ†Œλ“œλ₯Ό μ€‘λ³΅μœΌλ‘œ μ„ μ–Έν•˜λŠ” 것. 즉, 기쑴에 μ—†λŠ” μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λŠ” 것이닀.

  • νŠΉμ§•

    • λ©”μ†Œλ“œ 이름이 같아야함.

    • μ‹œκ·Έλ‹ˆμ²˜λŠ” 달라야함. νŒŒλΌλ―Έν„° μˆ˜κ°€ λ‹€λ₯΄κ±°λ‚˜ νƒ€μž…μ΄ λ‹€λ₯΄κ±°λ‚˜, λ‘˜ λ‹€ λ‹€λ₯΄κ±°λ‚˜.

    • 리턴 값은 μ‹œκ·Έλ‹ˆμ²˜μ— ν•΄λ‹Ήλ˜μ§€ μ•ŠμŒ.

    • μ ‘κ·Ό μ œμ–΄μžλŠ” 자유둭게(κ°™κ±°λ‚˜ λ‹€λ₯΄κ²Œ) μ§€μ •ν•  수 μžˆλ‹€.

  • μ“°λŠ” 이유

    • 가독성 μ¦κ°€μ‹œν‚΄.

    • 같은 κΈ°λŠ₯을 ν•˜λŠ” λ©”μ„œλ“œ 관리가 μ‰¬μ›Œμ§.

μ˜€λ²„λΌμ΄λ”©

  • κ°œλ…: λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œμ˜ λ™μž‘ 방법을 λ³€κ²½(μž¬μ •μ˜)ν•˜μ—¬ μš°μ„ μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것.

  • νŠΉμ§•

    • λ©”μ†Œλ“œ 이름이 같아야함.

    • μ‹œκ·Έλ‹ˆμ²˜κ°€ 같아야함. νŒŒλΌλ―Έν„° 수, νŒŒλΌλ―Έν„°μ˜ νƒ€μž…μ΄ κ°™μ•„μ•Όν•œλ‹€.

    • λ©”μ†Œλ“œ λ¦¬ν„΄ν˜•μ΄ κ°™μ•„μ•Όν•œλ‹€.

    • μ˜€λ²„λΌμ΄λ“œ ν•˜κ³ μž ν•˜λŠ” λ©”μ†Œλ“œκ°€ μƒμœ„ ν΄λž˜μŠ€μ— μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€.

    • 상속 받은 클래슀의 λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•  λ•Œ, μŠ€νƒœν‹± λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”© ν•˜κ²Œ 되면 μƒμœ„ 클래슀의 λ©”μ†Œλ“œκ°€ ν•˜μ΄λ”© μ²˜λ¦¬λœλ‹€. μžλ°”μ—μ„œλŠ” 이 ν•˜μ΄λ”© 처리λ₯Ό ꢌμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

    • private λ©”μ„œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©μ΄ λΆˆκ°€ν•˜λ‹€. λ‹Ήμ—°ν•œ 것이, μžμ‹ ν΄λž˜μŠ€μ—μ„œλ„ μ ‘κ·Ό λΆˆκ°€μ΄λ‹ˆκΉŒ.

    • 참고둜 @Override μ–΄λ…Έν…Œμ΄μ…˜μ„ 적어주면 μ˜€λ²„λΌμ΄λ”©μ΄ μ œλŒ€λ‘œ κ΅¬ν˜„λ˜μ—ˆλŠ”μ§€λ₯Ό 컴파일 νƒ€μž„μ— κ²€μ¦ν•œλ‹€.

    • μ ‘κ·Ό μ œμ–΄μžλ₯Ό μ„€μ •ν•˜λŠ”λ° λ³„λ„μ˜ κ·œμΉ™μ΄ μ‘΄μž¬ν•œλ‹€.

      • μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ”©ν•˜λŠ” λ©”μ†Œλ“œμ˜ μ ‘κ·Ό μ œμ–΄μžλŠ” λΆ€λͺ¨ ν΄λž˜μŠ€λ³΄λ‹€ 더 쒁게 μ„€μ •ν•  수 μ—†λ‹€.

      • μ˜ˆμ™Έ(Exception)은 λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ³΄λ‹€ 많이 μ„ μ–Έν•  수 μ—†λ‹€.

      • static λ©”μ†Œλ“œλ₯Ό μΈμŠ€ν„΄μŠ€μ˜ λ©”μ†Œλ“œλ‘œ λ˜λŠ” κ·Έ λ°˜λŒ€λ‘œ λ°”κΏ€ 수 μ—†λ‹€.

Package

  • νŒ¨ν‚€μ§€λŠ” 클래슀의 λ¬ΆμŒμ΄λ‹€.

  • μ„œλ‘œ κ΄€λ ¨λœ ν΄λž˜μŠ€λ“€λΌλ¦¬ κ·Έλ£Ή λ‹¨μœ„λ‘œ λ¬Άμ–΄ λ†“μŒμœΌλ‘œμ¨ 클래슀λ₯Ό 효율적으둜 관리할 수 μžˆλ‹€.

  • λ˜ν•œ μ„œλ‘œ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ— 같은 μ΄λ¦„μ˜ ν΄λž˜μŠ€κ°€ μ •μ˜λ˜λŠ” 것이 κ°€λŠ₯ν•˜λ―€λ‘œ, μžμ‹ λ§Œμ˜ νŒ¨ν‚€μ§€ 체계λ₯Ό μœ μ§€ν•¨μœΌλ‘œμ¨ λ‹€λ₯Έ κ°œλ°œμžκ°€ κ°œλ°œν•œ 클래슀 라이브러리의 ν΄λž˜μŠ€μ™€ 이름이 μΆ©λŒν•˜λŠ” 것을 ν”Όν•  수 μžˆλ‹€.

  • 클래슀의 μ‹€μ œ 이름은 νŒ¨ν‚€μ§€λͺ…을 ν¬ν•¨ν•œ 것이닀. ex) String 은 java.lang.String 이 ν’€λ„€μž„μ΄λ‹€. java.lang νŒ¨ν‚€μ§€μ— μ†ν•œ String ν΄λž˜μŠ€λΌλŠ” 의미.

  • ν΄λž˜μŠ€κ°€ 물리적으둜 ν•˜λ‚˜μ˜ 클래슀파일(.class)인 것과 같이 νŒ¨ν‚€μ§€λŠ” 물리적으둜 ν•˜λ‚˜μ˜ 디렉토리이닀.

  • μžμž˜ν•œ μ œμ•½ νŠΉμ§•

    • ν•˜λ‚˜μ˜ μ†ŒμŠ€ νŒŒμΌμ—λŠ” 첫 번째 λ¬Έμž₯으둜 단 ν•œλ²ˆμ˜ νŒ¨ν‚€μ§€ μ„ μ–Έλ§Œμ„ ν—ˆμš©ν•œλ‹€.

    • λͺ¨λ“  ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ νŒ¨ν‚€μ§€μ— 속해야 ν•œλ‹€. μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ unnamed package 에 μ†ν•˜κ²Œ λœλ‹€.

    • νŒ¨ν‚€μ§€λͺ…은 λŒ€μ†Œλ¬Έμžλ₯Ό λͺ¨λ‘ ν—ˆμš©ν•˜μ§€λ§Œ, 클래슀λͺ…κ³Ό μ‰½κ²Œ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œ μ†Œλ¬Έμžλ‘œ ν•˜λŠ” 것을 μ›μΉ™μœΌλ‘œ ν•˜κ³  μžˆλ‹€.

μΆ”μƒν΄λž˜μŠ€ vs μΈν„°νŽ˜μ΄μŠ€

μΆ”μƒν΄λž˜μŠ€λŠ” C++μ—μ„œ 많이 λ‹€λ€˜κ³ , 객체지ν–₯ ν•™μŠ΅ν•˜λ©° μœ μš©ν•¨μ„ μ²΄κ°ν•œ λ°”μžˆλ‹€. 그런데 javaμ—λŠ” λ”°λ‘œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ“°λŠ” 것 μ•„λ‹Œκ°€. μΈν„°νŽ˜μ΄μŠ€κ°€ 무엇이고 μΆ”μƒν΄λž˜μŠ€μ™€μ˜ 차이점이 무엇인지 ν™•μΈν•΄λ³΄μž.

μΈν„°νŽ˜μ΄μŠ€μ˜ νŠΉμ§•

  • μΈν„°νŽ˜μ΄μŠ€λŠ” μΌμ’…μ˜ μΆ”μƒν΄λž˜μŠ€μ΄λ‹€.

  • κ·Έλž˜μ„œ μΈν„°νŽ˜μ΄μŠ€λŠ” μΆ”μƒν΄λž˜μŠ€μ²˜λŸΌ μƒμ„±μžλ₯Ό κ°€μ§ˆ 수 μ—†λ‹€. κ΅¬ν˜„ν•˜λŠ” 클래슀λ₯Ό ν†΅ν•΄μ„œλ§Œ μΈμŠ€ν„΄μŠ€ν™” ν•  수 μžˆλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€λŠ” μΆ”μƒν΄λž˜μŠ€λ³΄λ‹€ 좔상화 정도가 λ†’μ•„μ„œ μΆ”μƒν¬λž˜μŠ€μ™€ 달리 λͺΈν†΅μ„ κ°–μΆ˜ 일반 λ©”μ„œλ“œ λ˜λŠ” λ©€λ²„λ³€μˆ˜λ₯Ό κ΅¬μ„±μ›μœΌλ‘œ κ°€μ§ˆ 수 μ—†λ‹€. λŒ€μ‹  였직 μΆ”μƒλ©”μ„œλ“œμ™€ μƒμˆ˜λ§Œμ„ λ©€λ²„λ‘œ κ°€μ§ˆ 수 μžˆλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€μ˜ 멀버듀은 μ•„λž˜ μ œμ•½μ‚¬ν•­μ„ κ°€μ§„λ‹€.

    • λͺ¨λ“  λ©€λ²„λ³€μˆ˜λŠ” public static final 이어야 ν•˜λ©°, 이λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.

    • λͺ¨λ“  λ©”μ„œλ“œλŠ” public abstract 이어야 ν•˜λ©°, 이λ₯Ό μƒλž΅ν•  수 μžˆλ‹€. 단, JDK1.8λΆ€ν„° static λ©”μ„œλ“œμ™€ λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” μ˜ˆμ™Έμ΄λ‹€.

  • μΈν„°νŽ˜μ΄μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œλΆ€ν„°λ§Œ 상속받을 수 μžˆλ‹€. ν΄λž˜μŠ€μ™€ 달리 닀쀑상속이 κ°€λŠ₯ν•˜λ‹€.

  • μΈν„°νŽ˜μ΄μŠ€μ˜ μ΄λ¦„μ—λŠ” 주둜 Fightableκ³Ό 같이 '~을 ν•  수 μžˆλŠ”'의 의미인 'able'둜 λλ‚˜λŠ” 것듀이 λ§Žμ€λ°, κ·Έ μ΄μœ λŠ” μ–΄λ– ν•œ κΈ°λŠ₯ λ˜λŠ” ν–‰μœ„λ₯Ό ν•˜λŠ”λ° ν•„μš”ν•œ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€λŠ” 의미λ₯Ό κ°•μ‘°ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€.

  • 리턴 νƒ€μž…μ΄ μΈν„°νŽ˜μ΄μŠ€λΌλŠ” 것은 λ©”μ„œλ“œκ°€ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ°˜ν™˜ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€μ˜ μž₯점

  • 개발 μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚¬ 수 μžˆλ‹€.

    • μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•΄μ„œ 클래슀의 μ„ μ–Έκ³Ό κ΅¬ν˜„μ„ 뢄리할 수 μžˆλ‹€. 그럼 μΈν„°νŽ˜μ΄μŠ€ λ‚΄λΆ€ κ΅¬ν˜„μ΄ μ™„λ£Œλ˜μ§€ μ•Šλ”λΌλ„ μΈν„°νŽ˜μ΄μŠ€ μ„ μ–ΈλΆ€λ₯Ό μ°Έκ³ ν•˜μ—¬ 개발이 κ°€λŠ₯ν•˜λ‹€.

  • ν‘œμ€€ν™”κ°€ κ°€λŠ₯ν•˜λ‹€.

  • μ„œλ‘œ κ΄€κ³„μ—†λŠ” ν΄λž˜μŠ€λ“€μ—κ²Œ 관계λ₯Ό 맺어쀄 수 μžˆλ‹€. 곡톡점을 λΆ€μ—¬ν•˜λŠ” 것!

    • μ„œλ‘œ 상속관계에 μžˆμ§€λ„ μ•Šκ³ , 같은 μ‘°μƒν΄λž˜μŠ€λ₯Ό κ°€μ§€κ³  μžˆμ§€ μ•Šμ€ μ„œλ‘œ μ•„λ¬΄λŸ° 관계도 μ—†λŠ” ν΄λž˜μŠ€λ“€μ—κ²Œ ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ³΅ν†΅μ μœΌλ‘œ κ΅¬ν˜„ν•˜λ„λ‘ ν•¨μœΌλ‘œμ¨ 관계λ₯Ό λ§Ίμ–΄ 쀄 수 μžˆλ‹€.

  • μ˜μ‘΄μ„± μ€„μ΄λŠ” 섀계가 κ°€λŠ₯ν•˜λ‹€.

κ·Έλž˜μ„œ μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 곡톡점/차이점은?

곡톡점

  1. λ‘˜ λ‹€ μ„ μ–Έλ§Œ 있고 κ΅¬ν˜„ λ‚΄μš©μ΄ μ—†λ‹€.

  2. κ·Έλž˜μ„œ μΈμŠ€ν„΄μŠ€ν™”λ₯Ό ν•  수 μ—†λ‹€.

  3. κ²°κ΅­ μžμ‹ ν΄λž˜μŠ€κ°€ 무언가λ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜λ„λ‘ μœ„μž„ν•΄μ•Όν•  λ•Œ μ‚¬μš©ν•œλ‹€.

차이점

  1. λͺ©μ 

    • 좔상 클래슀: 곡톡적인 κΈ°λŠ₯을 ν•˜λŠ” κ°μ²΄λ“€μ˜ 좔상화

    • μΈν„°νŽ˜μ΄μŠ€: κ΅¬ν˜„ν•˜λŠ” λͺ¨λ“  객체에 λŒ€ν•΄ νŠΉμ •ν•œ λ©”μ„œλ“œκ°€ λ°˜λ“œμ‹œ μ‘΄μž¬ν•˜λ„λ‘ 보μž₯ν•˜κΈ° μœ„ν•¨.

    • 상속 κ°€λŠ₯ 수

      • 좔상 클래슀: 단일 μƒμ†λ§Œ κ°€λŠ₯

      • μΈν„°νŽ˜μ΄μŠ€: 닀쀑 상속 κ°€λŠ₯

    • μ‚¬μš©ν•˜λŠ” 상황

      • 좔상 클래슀: 말 κ·ΈλŒ€λ‘œ 좔상화 μ‹œν‚¬ λ•Œ μ‚¬μš©ν•˜λ©΄ λœλ‹€. 곡톡점을 μ°Ύμ•„μ„œ μΆ”μƒν™”μ‹œμΌœμ„œ μ‚¬μš©ν•˜λŠ” 것이 κ°œλ°œμ—μ„œ 이득일 λ•Œ μ‚¬μš©ν•˜μž.

      • μΈν„°νŽ˜μ΄μŠ€: νŠΉμ • λ°μ΄ν„°νƒ€μž…μ˜ ν–‰μœ„λ₯Ό νŠΉλ³„ν•˜κ²Œ κ΅¬ν˜„ν•˜κΈ°λ₯Ό μ›ν•˜μ§€λ§Œ λˆ„κ°€ κ·Έκ²ƒμ˜ ν–‰μœ„λ₯Ό κ΅¬ν˜„ ν–ˆλŠ”μ§€μ— λŒ€ν•΄ 관심이 없을 λ•Œ. 그리고 닀쀑 κ΅¬ν˜„μƒμ†μ˜ 이점을 λˆ„λ €μ•Όν•  λ•Œ μ‚¬μš©ν•˜μž.

μ°Έκ³ 

λ””ν΄νŠΈ λ©”μ„œλ“œ

μΈν„°νŽ˜μ΄μŠ€κ°€ λ³€κ²½λ˜μ§€ μ•ŠμœΌλ©΄ μ’‹κ² μ§€λ§Œ, 아무리 섀계λ₯Ό μž˜ν•΄λ„ λ³€κ²½ν•  일이 생기기 λ§ˆλ ¨μ΄λ‹€. 그럼 μΈν„°νŽ˜μ΄μŠ€κ°€ μΆ”μƒλ©”μ„œλ“œλ‘œλ§Œ μ΄λ€„μ Έμžˆλ‹€λ©΄, μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ λͺ¨λ“  ν΄λž˜μŠ€λ“€μ΄ μƒˆλ‘œ μΆ”κ°€λœ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Όν•œλ‹€λŠ” λ¬Έμ œκ°€ μžˆλ‹€. 이에 JDK μ„€κ³„μžλ“€μ€ 고심 끝에 λ””ν΄νŠΈ λ©”μ„œλ“œ(default method)λ₯Ό κ³ μ•ˆν•΄λƒˆλ‹€.

λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” 쑰상 ν΄λž˜μŠ€μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•œ 것과 λ™μΌν•œ 효과λ₯Ό λˆ„λ¦΄ 수 μžˆλ‹€.

ν•™μŠ΅ λ‚΄μš©μ— λŒ€ν•œ 개인적인 총평

개발 μ§„μ§œ μž˜ν•˜κ³  μ‹Άλ‹€.. 이게 μ°Έ μž˜ν•˜λ©΄ λ§Œλ“€κ³  싢은거 λšλ”±λšλ”± λ§Œλ“€ 수 μžˆμ„ 것 같은데!!

λ‹€μŒ ν•™μŠ΅ κ³„νš

  • QR μ½”λ“œ 리더기에 ν…Œμ΄λΈ” 뢙이기

Last updated

Was this helpful?