day5 πŸŒ•

μž₯λ―ΈΒ·2022λ…„ 6μ›” 18일
0

였늘의 μ„±κ³Ό

λͺ©λ‘ 보기
5/129

- 계산기 μ½”λ“œ λ¦¬νŒ©ν† λ§ λ§ˆμ € ν•˜κΈ°


- μ–΄μ œ λͺ» 끝낸 κ±° (IOC, DI, AOP) μ΄μ–΄μ„œ ν•˜κΈ°

+) 22. 06. 20. λ“œλ””μ–΄ 정리 λ‹€ λλ‚΄μ„œ μΆ”κ°€

IoC(Inversion of Control / μ œμ–΄ μ—­μ „): 객체의 생성, 생λͺ…μ£ΌκΈ°μ˜ κ΄€λ¦¬κΉŒμ§€ λͺ¨λ“  객체에 λŒ€ν•œ μ œμ–΄κΆŒμ΄ λ°”λ€Œμ—ˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

βœ”οΈ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬κ°€ IoC μ»¨ν…Œμ΄λ„ˆ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

  • IoC μ»¨ν…Œμ΄λ„ˆ: 객체의 생성을 μ±…μž„μ§€κ³  μ˜μ‘΄μ„±μ„ κ΄€λ¦¬ν•œλ‹€.
    POJO의 생성, μ΄ˆκΈ°ν™”, μ„œλΉ„μŠ€, μ†Œλ©Έμ— λŒ€ν•œ κΆŒν•œμ„ 가진닀.

    *POJO(Plain Old Java Project): 객체 지ν–₯적인 원리에 μΆ©μ‹€ν•˜λ©΄μ„œ ν™˜κ²½κ³Ό κΈ°μˆ μ— μ’…μ†λ˜μ§€ μ•Šκ³  ν•„μš”μ— 따라 μž¬ν™œμš© ν•  수 μžˆλŠ” λ°©μ‹μœΌλ‘œ μ„€κ³„λœ 였브젝트.

    μΈμŠ€ν„΄μŠ€ 생λͺ… μ£ΌκΈ°λ₯Ό κ°œλ°œμžκ°€ μ•„λ‹Œ μ»¨ν…Œμ΄λ„ˆκ°€ λŒ€μ‹  관리해 μ€€λ‹€.
    β†’ κ°œλ°œμžλŠ” λ‘œμ§μ—λ§Œ 집쀑 κ°€λŠ₯.

    *생λͺ… μ£ΌκΈ°: μΈμŠ€ν„΄μŠ€μ˜ μƒνƒœμ— λ”°λΌμ„œ ν˜ΈμΆœν•  수 μžˆλŠ” 속성.

βœ”οΈ IoC λΆ„λ₯˜

  • μ˜μ‘΄μ„± 검색 - DL(Dependency Lookup): μ €μž₯μ†Œμ— μ €μž₯λ˜μ–΄ μžˆλŠ” Bean에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ»¨ν…Œμ΄λ„ˆκ°€ μ œκ³΅ν•˜λŠ” APIλ₯Ό μ΄μš©ν•˜μ—¬ Bean을 Lookup ν•˜λŠ” 것.

  • μ˜μ‘΄μ„± μ£Όμž… - DI(Dependency Injection): Setter Injection / Constructor Injection / Method Injection

    각 클래슀 κ°„μ˜ μ˜μ‘΄κ΄€κ³„λ₯Ό 빈 μ„€μ • 정보λ₯Ό λ°”νƒ•μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆκ°€ μžλ™μœΌλ‘œ μ—°κ²°ν•΄μ£ΌλŠ” 것.

    *XML, annotation으둜 μ„€μ •.

DL을 μ‚¬μš©ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆ 쒅속성이 μ¦κ°€ν•˜κΈ° λ•Œλ¬Έμ— 주둜 DIλ₯Ό μ‚¬μš©ν•œλ‹€.

βœ”οΈ DI의 κ°œλ…
κ°œλ°œμžκ°€ μ˜μ‘΄κ΄€κ³„λ₯Ό μ„€μ •ν•΄λ†“μœΌλ©΄ μ»¨ν…Œμ΄λ„ˆκ°€ μžλ™μœΌλ‘œ μ£Όμž…ν•΄μ€€λ‹€.

  • κ°œλ°œμžλ“€μ€ 단지 빈 μ„€μ •νŒŒμΌμ—μ„œ μ˜μ‘΄κ΄€κ³„κ°€ ν•„μš”ν•˜λ‹€λŠ” 정보λ₯Ό μΆ”κ°€ν•˜λ©΄ λœλ‹€.

  • 객체 레퍼런슀λ₯Ό μ»¨ν…Œμ΄λ„ˆλ‘œλΆ€ν„° μ£Όμž… λ°›μ•„μ„œ μ‹€ν–‰ μ‹œμ— λ™μ μœΌλ‘œ μ˜μ‘΄κ΄€κ³„κ°€ μƒμ„±λœλ‹€.

  • μ»¨ν…Œμ΄λ„ˆκ°€ νλ¦„μ˜ 주체가 λ˜μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ— μ˜μ‘΄κ΄€κ³„λ₯Ό μ£Όμž…ν•΄μ£ΌλŠ” 것이닀.

β†’ μž₯점: μ½”λ“œκ°€ λ‹¨μˆœν•΄μ§„λ‹€. μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ 결합도가 μ œκ±°λœλ‹€.

βœ”οΈ DI의 μœ ν˜•

  • Setter Injection: μ˜μ‘΄μ„±μ„ μž…λ ₯ λ°›λŠ” Setter λ©”μ„œλ“œλ₯Ό λ§Œλ“€κ³  이λ₯Ό 톡해 μ˜μ‘΄μ„±μ„ μ£Όμž…ν•œλ‹€.
  • Constructor Injection: ν•„μš”ν•œ μ˜μ‘΄μ„±μ„ ν¬ν•¨ν•˜λŠ” 클래슀의 μƒμ„±μžλ₯Ό λ§Œλ“€κ³  이λ₯Ό 톡해 μ˜μ‘΄μ„±μ„ μ£Όμž…ν•œλ‹€.
  • Method Injection: μ˜μ‘΄μ„±μ„ μž…λ ₯ λ°›λŠ” 일반 λ©”μ„œλ“œλ₯Ό λ§Œλ“€κ³  이λ₯Ό 톡해 μ˜μ‘΄μ„±μ„ μ£Όμž…ν•œλ‹€.

βœ”οΈ Spring DI μ»¨ν…Œμ΄λ„ˆκ°€ κ΄€λ¦¬ν•˜λŠ” 객체 == 빈(Bean)
이 λΉˆλ“€μ„ κ΄€λ¦¬ν•œλ‹€λŠ” 의미둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό 빈 νŒ©ν† λ¦¬(Bean Factory)라 λΆ€λ₯Έλ‹€.
빈 νŒ©ν† λ¦¬μ— μ—¬λŸ¬ 가지 μ»¨ν…Œμ΄λ„ˆ κΈ°λŠ₯을 μΆ”κ°€ν•˜μ—¬ Application Context 라고 λΆ€λ₯Έλ‹€.

interface
BeanFactory
⬆️
interface
ApplicationContext

BeanFactory: λΉˆμ„ 등둝, 생성, 쑰회, λ°˜ν™˜ 관리λ₯Ό ν•œλ‹€.
⬇️ ν™•μž₯
ApplicationContext: κΈ°λŠ₯은 빈 νŒ©ν† λ¦¬μ™€ κ°™μŒ. Spring의 각쒅 λΆ€κ°€ μ„œλΉ„μŠ€λ₯Ό μΆ”κ°€λ‘œ μ œκ³΅ν•œλ‹€.


AOP: ꡐ차 κ΄€μ‹¬μ‚¬μ˜ 뢄리λ₯Ό ν—ˆμš©ν•˜μ—¬ λͺ¨λ“ˆμ„±μ„ λ†’μ΄λŠ” 것을 λͺ©ν‘œλ‘œ ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„. μ½”λ“œ 자체λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  κΈ°μ‘΄ μ½”λ“œμ— μΆ”κ°€ λ™μž‘μ„ μΆ”κ°€ν•˜μ—¬ 이λ₯Ό μˆ˜ν–‰ν•œλ‹€.

βœ”οΈ AOPλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ΄€μ‹¬μ‚¬μ˜ 뢄리(κΈ°λŠ₯의 뢄리) 즉, 핡심적인 κΈ°λŠ₯μ—μ„œ 뢀가적인 κΈ°λŠ₯을 λΆ„λ¦¬ν•œλ‹€. λΆ„λ¦¬ν•œ λΆ€κ°€κΈ°λŠ₯을 AspectλΌλŠ” λ…νŠΉν•œ λͺ¨λ“ˆν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ„œ μ„€κ³„ν•˜κ³  κ°œλ°œν•˜λŠ” 방법이닀.

βœ”οΈ AOPλŠ” λΆ€κ°€κΈ°λŠ₯을 Aspect둜 μ •μ˜ν•˜μ—¬, 핡심기λŠ₯μ—μ„œ λΆ€κ°€κΈ°λŠ₯을 λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ 핡심기λŠ₯을 μ„€κ³„ν•˜κ³  κ΅¬ν˜„ν•  λ•Œ 객체지ν–₯적인 κ°€μΉ˜λ₯Ό 지킬 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” κ°œλ…μ΄λ‹€.

*핡심기λŠ₯: 업무 λ‘œμ§μ„ ν¬ν•¨ν•˜λŠ” κΈ°λŠ₯. (μ€ν–‰μœΌλ‘œ 예λ₯Ό λ“€λ©΄ κ³„μ’Œμ΄μ²΄, λŒ€μΆœμŠΉμΈ λ“±)
*λΆ€κ°€κΈ°λŠ₯: 핡심기λŠ₯을 λ„μ™€μ£ΌλŠ” 뢀가적인 κΈ°λŠ₯(λ‘œκΉ…, λ³΄μ•ˆ λ“±)

βœ”οΈ Aspect: λΆ€κ°€κΈ°λŠ₯을 μ •μ˜ν•œ μ½”λ“œμΈ μ–΄λ“œλ°”μ΄μŠ€(Advice)와 μ–΄λ“œλ°”μ΄μŠ€λ₯Ό 어디에 μ μš©ν•˜λŠ”μ§€λ₯Ό κ²°μ •ν•˜λŠ” 포인트컷(PointCut)을 ν•©μΉœ κ°œλ…μ΄λ‹€.

β†’ Advice + PointCut = Aspect

  • AOP κ°œλ…μ„ μ μš©ν•˜λ©΄ 핡심기λŠ₯ μ½”λ“œ 사이에 침투된 λΆ€κ°€κΈ°λŠ₯을 독립적인 μ• μŠ€νŽ™νŠΈλ‘œ ꡬ뢄할 수 μžˆλ‹€.

  • κ΅¬λΆ„λœ λΆ€κ°€κΈ°λŠ₯ μ• μŠ€νŽ™νŠΈλ₯Ό λŸ°νƒ€μž„ μ‹œμ— ν•„μš”ν•œ μœ„μΉ˜μ— λ™μ μœΌλ‘œ μ°Έμ—¬ν•˜κ²Œ ν•  수 μžˆλ‹€.

βœ”οΈ AOP μš©μ–΄

  • νƒ€κ²Ÿ: 핡심기λŠ₯을 λ‹΄κ³  μžˆλŠ” λͺ¨λ“ˆ. λΆ€κ°€κΈ°λŠ₯을 λΆ€μ—¬ν•  λŒ€μƒ.

  • μ–΄λ“œλ°”μ΄μŠ€: νƒ€κ²Ÿμ— μ œκ³΅ν•  λΆ€κ°€κΈ°λŠ₯을 λ‹΄κ³  μžˆλŠ” λͺ¨λ“ˆ.

  • 쑰인 포인트: μ–΄λ“œλ°”μ΄μŠ€κ°€ 적용될 수 μžˆλŠ” μœ„μΉ˜.
    β†’ νƒ€κ²Ÿ 객체가 κ΅¬ν˜„ν•œ μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  λ©”μ„œλ“œλŠ” 쑰인 ν¬μΈνŠΈκ°€ λœλ‹€.

  • 포인트 μ»·: μ–΄λ“œλ°”μ΄μŠ€λ₯Ό μ μš©ν•  νƒ€κ²Ÿμ˜ λ©”μ„œλ“œλ₯Ό μ„ λ³„ν•˜λŠ” μ •κ·œν‘œν˜„μ‹.

  • μ• μŠ€νŽ™νŠΈ: AOP의 κΈ°λ³Έ λͺ¨λ“ˆ. 싱글톀 ν˜•νƒœμ˜ 객체둜 쑴재.

  • μ–΄λ“œλ°”μ΄μ €: μ–΄λ“œλ°”μ΄μŠ€ + 포인트컷. Spring AOPμ—μ„œλ§Œ μ‚¬μš©λœλ‹€.

  • μœ„λΉ™(Weaving): ν¬μΈνŠΈμ»·μ— μ˜ν•΄ κ²°μ •λœ νƒ€κ²Ÿμ˜ 쑰인 ν¬μΈνŠΈμ— λΆ€κ°€κΈ°λŠ₯(μ–΄λ“œλ°”μ΄μŠ€)λ₯Ό μ‚½μž…ν•˜λŠ” 과정을 λœ»ν•œλ‹€. μœ„λΉ™μ€ AOPκ°€ 핡심기λŠ₯(νƒ€κ²Ÿ)의 μ½”λ“œμ— 영ν–₯을 주지 μ•ŠμœΌλ©΄μ„œ ν•„μš”ν•œ λΆ€κ°€κΈ°λŠ₯(μ–΄λ“œλ°”μ΄μŠ€)을 μΆ”κ°€ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” 핡심적인 μ²˜λ¦¬κ³Όμ •μ΄λ‹€.

βœ”οΈ Spring AOP의 νŠΉμ§•

  • Spring은 ν”„λ‘μ‹œ(Proxy) 기반 AOPλ₯Ό μ§€μ›ν•œλ‹€.

    • μŠ€ν”„λ§μ€ νƒ€κ²Ÿ 객체에 λŒ€ν•œ ν”„λ‘μ‹œλ₯Ό λ§Œλ“€μ–΄ μ œκ³΅ν•œλ‹€.

    • νƒ€κ²Ÿμ„ κ°μ‹ΈλŠ” ν”„λ‘μ‹œλŠ” μ‹€ν–‰μ‹œκ°„(Runtime)에 μƒμ„±λœλ‹€.

    • ν”„λ‘μ‹œλŠ” μ–΄λ“œλ°”μ΄μŠ€λ₯Ό νƒ€κ²Ÿ 객체에 μ μš©ν•˜λ©΄μ„œ μƒμ„±λ˜λŠ” 객체닀.

  • ν”„λ‘μ‹œκ°€ ν˜ΈμΆœμ„ κ°€λ‘œμ±ˆλ‹€. (Intercept)

    • μ „μ²˜λ¦¬ μ–΄λ“œλ°”μ΄μŠ€: ν”„λ‘μ‹œκ°€ νƒ€κ²Ÿ 객체에 λŒ€ν•œ ν˜ΈμΆœμ„ κ°€λ‘œμ±ˆ λ‹€μŒ μ–΄λ“œλ°”μ΄μŠ€μ˜ λΆ€κ°€κΈ°λŠ₯ λ‘œμ§μ„ μˆ˜ν–‰ν•œλ‹€. 그리고 κ·Έ 후에 핡심기λŠ₯ λ‘œμ§μ„ ν˜ΈμΆœν•œλ‹€.

    • ν›„μ²˜λ¦¬ μ–΄λ“œλ°”μ΄μŠ€: νƒ€κ²Ÿμ˜ 핡심기λŠ₯ 둜직 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ 후에 λΆ€κ°€κΈ°λŠ₯(μ–΄λ“œλ°”μ΄μŠ€)을 μˆ˜ν–‰ν•œλ‹€.

  • Spring AOPλŠ” λ©”μ„œλ“œ 쑰인 포인트만 μ§€μ›ν•œλ‹€.

    • Spring은 동적 ν”„λ‘μ‹œλ₯Ό 기반으둜 AOPλ₯Ό κ΅¬ν˜„.
      β†’ λ©”μ„œλ“œ 쑰인 포인트만 지원.
      β†’ 핡심기λŠ₯(νƒ€κ²Ÿ)의 λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜λŠ” λŸ°νƒ€μž„ μ‹œμ μ—λ§Œ λΆ€κ°€κΈ°λŠ₯(μ–΄λ“œλ°”μ΄μŠ€)을 μ μš©ν•  수 μžˆλ‹€.

    • AspectJ 같은 κ³ κΈ‰ AOP ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ©΄ 객체의 생성, ν•„λ“œκ°’μ˜ μ‘°νšŒμ™€ μ‘°μž‘, static λ©”μ„œλ“œ 호좜 및 μ΄ˆκΈ°ν™” λ“±μ˜ λ‹€μ–‘ν•œ μž‘μ—…μ— λΆ€κ°€κΈ°λŠ₯을 μ μš©ν•  수 μžˆλ‹€.

βœ”οΈ Spring AOP의 κ΅¬ν˜„ 방식

  • XML 기반의 POJO 클래슀λ₯Ό μ΄μš©ν•œ AOP κ΅¬ν˜„

    • λΆ€κ°€κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” Active 클래슀λ₯Ό μž‘μ„±ν•œλ‹€.

    • XML μ„€μ • νŒŒμΌμ— <aop.config>λ₯Ό μ΄μš©ν•΄μ„œ μ• μŠ€νŽ™νŠΈλ₯Ό μ„€μ •ν•œλ‹€.
      β†’ μ–΄λ“œλ°”μ΄μŠ€μ™€ 포인트컷 μ„€μ •

  • @Aspect μ–΄λ…Έν…Œμ΄μ…˜μ„ μ΄μš©ν•œ AOP κ΅¬ν˜„

    • @Aspect μ–΄λ…Έν…Œμ΄μ…˜μ„ μ΄μš©ν•΄μ„œ λΆ€κ°€κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” Aspect 클래슀λ₯Ό μž‘μ„±ν•œλ‹€. μ΄λ•Œ Aspect ν΄λž˜μŠ€λŠ” μ–΄λ“œλ°”μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” λ©”μ„œλ“œμ™€ ν¬μΈνŠΈμ»·μ„ ν¬ν•¨ν•œλ‹€.

    • XML μ„€μ • νŒŒμΌμ— <aop:aspectj-autoproxy /> λ₯Ό μ„€μ •ν•œλ‹€.


참고 자료

βœ”οΈ IoC (https://youtu.be/GKoCibDM6Ns)
βœ”οΈ AOP (https://youtu.be/GKoCibDM6Ns)


- 운영체제 2챕터

day 6πŸŒ• κ³Ό day8 πŸŒ• μ°Έκ³ .


- μžλ°” Collection μ•Œμ•„λ³΄κΈ°

μ»¬λ ‰μ…˜(Collection): λͺ©λ‘μ„± 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 자료ꡬ쑰.
Collection Framework: λŒ€λŸ‰μ˜ 데이터λ₯Ό 효율적으둜 μ²˜λ¦¬ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•΄μ£ΌλŠ” 클래슀의 집합.

*자료ꡬ쑰: μ–΄λ–€ 정보λ₯Ό λ‹΄λŠ” 것. μ—¬λŸ¬ 데이터λ₯Ό 담을 λ•Œ μ‚¬μš©ν•œλ‹€.

λ°°μ—΄κ³Όμ˜ 차이점: 정적 λ©”λͺ¨λ¦¬ 할당이 μ•„λ‹Œ 동적 λ©”λͺ¨λ¦¬ 할당을 ν•œλ‹€.
β†’ new int[4]λ₯Ό ν•˜λ©΄ 곡간을 4κ°œλ°–μ— λͺ» μ“°κ³ , 미리 선언을 톡해 4개의 곡간을 λ§Œλ“€μ–΄μ•Ό ν•˜μ§€λ§Œ Collection은 곡간이 ν•„μš”ν•œ 만큼 계속 μΆ”κ°€ν•  수 μžˆλ‹€.

자료ꡬ쑰 μœ ν˜•

  • List: μˆœμ„œκ°€ 있으며 쀑볡이 ν—ˆμš©λœλ‹€.

  • Set: μˆœμ„œκ°€ μ—†κ³  쀑볡이 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€.

  • Queue: λ¨Όμ € λ“€μ–΄μ˜¨ 것이 λ¨Όμ € λ‚˜κ°€λŠ” μ„ μž…μ„ μΆœ(FIFO) ꡬ쑰.

  • Map: Key-Value ν˜•νƒœλ‘œ μ €μž₯되며, μˆœμ„œκ°€ μ—†κ³  ν‚€λŠ” 쀑볡이 μ•ˆ λ˜μ§€λ§Œ 값은 쀑볡이 ν—ˆμš©λœλ‹€.

List와 Set, Queue μΈν„°νŽ˜μ΄μŠ€λŠ” Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›μ§€λ§Œ Map μΈν„°νŽ˜μ΄μŠ€λŠ” λ…λ¦½μ μœΌλ‘œ μ •μ˜λ˜μ–΄ μžˆλ‹€.

List κ΄€λ ¨ 클래슀

  • ArrrayList: 단방ν–₯ 포인터 ꡬ쑰둜 각 λ°μ΄ν„°μ˜ 인덱슀λ₯Ό 가지고 μžˆμ–΄ 쑰회 μ„±λŠ₯이 λ›°μ–΄λ‚˜λ‹€. λ°°μ—΄μ˜ 크기λ₯Ό κ³ μ •ν•  수 μ—†λ‹€.

  • LinkedList: 각 데이터가 λ…Έλ“œμ™€ ν¬μΈν„°λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. ν¬μΈν„°λ‘œ μ—°κ²°λ˜μ–΄ 있기 λ•Œλ¬Έμ— ArrayList에 λΉ„ν•΄ 쀑간에 데이터λ₯Ό μ‚½μž…ν•˜κ±°λ‚˜ μ‚­μ œν•˜κΈ° μš©μ΄ν•˜λ‹€.

  • Vector: ArrayList와 λ™μΌν•˜κ²Œ λ™μž‘ν•˜μ§€λ§Œ, ArrayList와 λ‹€λ₯΄κ²Œ Thread-Safeν•˜λ‹€. (λ‹€λ§Œ μŠ€λ ˆλ“œκ°€ ν•œ κ°œμ—¬λ„ 동기화λ₯Ό ν•˜κΈ° λ•Œλ¬Έμ— ArrayList에 λΉ„ν•΄ μ„±λŠ₯은 쑰금 떨어진닀.)

    *Thread-Safe: μ–΄λ–€ ν•¨μˆ˜λ‚˜ λ³€μˆ˜, 객체가 μ—¬λŸ¬ μŠ€λ ˆλ“œλ‘œλΆ€ν„° λ™μ‹œμ— 접근이 이루어져도 ν”„λ‘œκ·Έλž¨μ˜ 싀행에 λ¬Έμ œκ°€ μ—†μŒμ„ λœ»ν•œλ‹€.

  • Stack: μ „ν˜•μ μΈ Stack λ©”λͺ¨λ¦¬ κ΅¬μ‘°β€“ν›„μž…μ„ μΆœ(LIFO)의 ꡬ쑰–λ₯Ό 가지고 μžˆλ‹€.

ArrayList와 HashSet의 차이점

ArrayListHashSet
μˆœμ„œ Oμˆœμ„œ X
쀑볡값 O쀑볡값 X
νŠΉμ • μœ„μΉ˜μ˜ μš”μ†Œμ— μ ‘κ·Ό κ°€λŠ₯νŠΉμ • μœ„μΉ˜μ˜ 값에 μ ‘κ·Ό λΆˆκ°€


참고 자료

βœ”οΈ List μΈν„°νŽ˜μ΄μŠ€ μ‚΄νŽ΄λ³΄κΈ° (https://youtu.be/uPSkCKB4Kuo)
βœ”οΈ μ΄ˆκ°„λ‹¨ μžλ°” - μ»¬λ ‰μ…˜ (https://youtu.be/JUMvRuJDiLQ)

profile
김뉴비

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보