πŸ”­
Ellery's study archive
Resume(μˆ˜μ •μ€‘)GithubTistory
  • framework, library
    • Spring core
      • μŠ€ν”„λ§ νŠΈλΌμ΄μ•΅κΈ€ - POJO, IOC/DI, AOP, PSA
      • Servlet
    • Spring MVC
      • DispatcherServlet
      • Validation
    • Spring Boot
    • Spring Security
    • Spring Batch
    • Spring Webflux
    • JPA
    • JUnit, Spring Test
    • etc
      • Slf4j MDC(Mapped Diagnostic Context)
  • ETC, 개발 νŒλ“€
    • 개발 νŒλ“€
      • μŠ€ν”„λ§ ν”„λ‘œμ νŠΈ init μ‹œμ— 해야될 것듀
      • vim ν•œκΈ€ 깨질 λ•Œ 인코딩 방식 μ§€μ •
      • EC2 ssh connection μ‰½κ²Œ ν•˜κΈ°
      • λ¦¬λˆ…μŠ€ μ»€λ§¨λ“œ, netstats
      • Forkν•œ λ ˆν¬μ§€ν† λ¦¬ origin μ—…λ°μ΄νŠΈ
      • git merge, rebase
      • Intellij 자주 μ“°λŠ” κΈ°λŠ₯ 단좕킀
      • JSON handling
      • aws user-data.sh
    • Lombok annotation, ꢌμž₯ 방식
    • DB λͺ¨λΈλ§ μ‹œμ— 인쑰 μ‹λ³„μž μ •μ˜ν•˜λŠ” μΌ€μ΄μŠ€
    • Redis pub/sub vs Apache kafka
  • Language
    • Java
      • μžλ°” 버젼별 feature
      • JVM architecture
      • Garbage collection
      • Java String pool
      • java 8 Concurrent
      • Optional
      • Stream
      • Comparator, Comparator
      • Error, Exception
      • Java의 Call by value(pass by value)
      • Java λ³€μˆ˜ κ°„ κ°’ Swap 방식 5κ°€μ§€
    • Javascript
      • 자주 μ“°λŠ” ES6 문법 정리
      • ES6 module
      • ES6 proxy
      • scope, var closure 이슈, let, const
    • Python
      • @lru_cache
  • CS
    • OS
      • Process, Thread
      • CPU scheduling
      • sync vs async, blocking vs nonblocking
      • Memory segmentation
      • virtual memory
      • νŽ˜μ΄μ§€ ꡐ체 μ•Œκ³ λ¦¬μ¦˜
    • Network
      • UDP
      • TCP
      • DNS
      • HTTP
      • web server, WAS
      • Proxy, Load balancer
      • web socket, WebRTC
      • gRPC
      • web secure
    • DB
      • MySQL
      • index
      • μ •κ·œν™”
      • DB νŠΈλžœμž­μ…˜, λ™μ‹œμ„± μ œμ–΄ 문제
      • ν΄λŸ¬μŠ€ν„°λ§
      • λ ˆν”Œλ¦¬μΌ€μ΄μ…˜
      • 샀딩
    • Data Structure, Algorithm
      • AVL tree, Red black tree
      • B-tree, B*tree, B+tree
      • Hash
    • Design pattern
      • SOLID
      • 생성 νŒ¨ν„΄
        • 싱글톀 νŒ¨ν„΄
        • νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄
        • λΉŒλ” νŒ¨ν„΄
        • Null 객체 νŒ¨ν„΄
      • ꡬ쑰 νŒ¨ν„΄
        • νΌμ‚¬λ“œ νŒ¨ν„΄
        • ν”„λ‘μ‹œ νŒ¨ν„΄
        • μ–΄λŒ‘ν„° νŒ¨ν„΄
        • λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄
      • ν–‰μœ„ νŒ¨ν„΄
        • μ „λž΅ νŒ¨ν„΄
        • ν…œν”Œλ¦Ώ λ©”μ„œλ“œ νŒ¨ν„΄
        • μƒνƒœ νŒ¨ν„΄
        • μ˜΅μ €λ²„ νŒ¨ν„΄
  • μ†Œν”„νŠΈμ›¨μ–΄ 아킀텍쳐
    • Layered Architecture
    • 클린 아킀텍쳐
    • DDD
    • etc
      • DTO vs VO
  • 개발 μ„œμ λ“€
    • μ†ŒνŠΈμ›μŠ€ μ•€μ†”λ‘œμ§€μ—μ„œ μ†Œκ°œλ˜λŠ” 객체지ν–₯ μƒν™œ 체쑰 원칙 κ°„λž΅ 정리
    • μ—˜λ ˆκ°•νŠΈ 였브젝트 - μƒˆλ‘œμš΄ κ΄€μ μ—μ„œ 바라본 객체지ν–₯
    • λ§Œλ“€λ©΄μ„œ λ°°μš°λŠ” 클린 아킀텍쳐
  • ν…Œν¬ λΈ”λ‘œκ·Έ
Powered by GitBook
On this page
Edit on GitHub
  1. Language
  2. Java

Java의 Call by value(pass by value)

PreviousError, ExceptionNextJava λ³€μˆ˜ κ°„ κ°’ Swap 방식 5κ°€μ§€

Last updated 2 years ago

C++μ—μ„œμ˜ swap() μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λŠ” μ£Όμ†Œκ°’μ„ κ΅ν™˜ν•˜λŠ” call by reference λ°©μ‹μœΌλ‘œμ„œ λ™μž‘ν•œλ‹€. tmp λ³€μˆ˜λ₯Ό 쀑간 맀개둜 μ£Όμ†Œκ°’(κ°’μ˜ μœ„μΉ˜)을 μ„œλ‘œ κ΅ν™˜ν•œλ‹€.

void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

Javaμ—μ„œ primitive type, reference type에 ν•΄λ‹Ήν•˜λŠ” 값을 μ €μž₯ν•˜λŠ” 방식에 차이가 μžˆλ‹€.

  • JVM λ©”λͺ¨λ¦¬μ—μ„œ primitive type은 stack μ˜μ—­μ— μ €μž₯λœλ‹€

  • reference type은 κ·Έ 객체인 값이 heap μ˜μ—­μ— μ €μž₯되고, stack μ˜μ—­μ— μžˆλŠ” λ³€μˆ˜κ°€ 객체의 μ£Όμ†Œκ°’μ„ κ°€μ§€κ³  μžˆλ‹€.

Screen Shot 2022-10-09 at 7.13.01 PM.png

λ§Œμ•½ swap λ©”μ„œλ“œμ—μ„œ reference λ³€μˆ˜λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ„˜κΈ°κ²Œ 되면 ν•΄λ‹Ή 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” μƒˆλ‘œμš΄ λ³€μˆ˜κ°€ stack μ˜μ—­μ— μ •μ˜κ°€ λœλ‹€. μƒˆλ‘­κ²Œ λ§Œλ“€μ–΄μ§„ λ³€μˆ˜μ˜ μ£Όμ†Œκ°’μ„ μ„œλ‘œ κ΅ν™˜ν•˜κ±°λ‚˜, 값을 λ³€κ²½ν•œλ‹€κ³  ν•΄μ„œ 기쑴의 λ³€μˆ˜κ°’μ΄ λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— JavaλŠ” 항상 call by value(pass by value) λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€κ³  ν•  수 μžˆλ‹€.

  • λ©”μ„œλ“œ 호좜 방식 κ°œλ…

    • Call by value λ°©μ‹μ˜ λ©”μ„œλ“œ 호좜 λ°©μ‹μ—μ„œ λ©”μ„œλ“œ 호좜자(caller)와 ν˜ΈμΆœλ‹Ήν•˜λŠ” μˆ˜μ‹ μž(callee)의 νŒŒλΌλ―Έν„°λŠ” λ³΅μ‚¬λ˜μ–΄μ„œ μ„œλ‘œ λ‹€λ₯Έ λ³€μˆ˜μ΄λ‹€. λ”°λΌμ„œ μˆ˜μ‹ μžμ˜ νŒŒλΌλ―Έν„°λ₯Ό μˆ˜μ •ν•΄λ„ 호좜자의 λ³€μˆ˜κ°€ λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

    • call by reference 방식은 μ°Έμ‘°(μ£Όμ†Œ)λ₯Ό 직접 μ „λ‹¬ν•˜κΈ° λ•Œλ¬Έμ— caller의 λ³€μˆ˜μ™€ callee의 νŒŒλΌλ―Έν„°κ°€ μ™„μ „νžˆ λ™μΌν•œ λ³€μˆ˜μ΄λ‹€. μˆ˜μ‹ μžμ˜ νŒŒλΌλ―Έν„°λ₯Ό μˆ˜μ •ν•˜λ©΄ 호좜자의 λ³€μˆ˜λ„ 바뀐닀.

  • μžλ°”μ—μ„œλŠ” κΈ°λ³Έμ μœΌλ‘œλŠ” Reference type을 μ΄μš©ν•΄μ„œ swap을 κ΅¬ν˜„ν•΄μ•Όν•˜μ§€λ§Œ, primitive λ³€μˆ˜ 값을 κ΅ν™˜ν•˜λŠ” νŠΈλ¦­λ„ μžˆλ‹€. Collections νŒ¨ν‚€μ§€μ—μ„œ list λ‚΄μ˜ μ›μ†Œκ°’ κ°„μ˜ swap λ©”μ„œλ“œλ₯Ό μ§€μ›ν•œλ‹€.