ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • μ°Έμ‘° μžλ£Œν˜• - κΈ°λ³Έ μƒμ„±μž, μ˜€λ²„λ‘œλ”©(overloading), return
    개발/Java 2022. 3. 21. 22:32

    봄을 λ§žμ•„ λ°”κΏ”λ΄€μŠ΅λ‹ˆλ‹€ :)

     

     

    μ•ˆλ…•ν•˜μ„Έμš”,

    이번 μ‹œκ°„μ—λŠ” μ°Έμ‘°μžλ£Œν˜•μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

     

    ν•΄λ‹Ή λ‚΄μš©μ€ 'μžλ°”μ˜ μ‹ ' chapter8λ₯Ό 기초둜 μž‘μ„±ν–ˆμœΌλ©°,

    이λ₯Ό 기반으둜 제 λ‚˜λ¦„μ˜ μš”μ•½ 정리λ₯Ό ν•œ κΈ€μž…λ‹ˆλ‹€.

     

    μžμ„Έν•œ 곡뢀λ₯Ό μœ„ν•΄μ„œλŠ”

    λ¨Όμ € 책을 읽고, μ •λ¦¬μš©μœΌλ‘œ μ°Έκ³ ν•˜μ‹œλ©΄ 베슀트일 것 κ°™μŠ΅λ‹ˆλ‹€!

     

    κΈ°λ³Έμžλ£Œν˜•κ³Ό μ°Έμ‘°μžλ£Œν˜•μ˜ 기본에 λŒ€ν•œ λ‚΄μš©μ€ 이전 κ²Œμ‹œκΈ€μ„ ν™•μΈν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€ :)

     

     

    https://mong-dev.tistory.com/11
     

    λ³€μˆ˜ 이야기(2) - μžλ°”μ˜ νƒ€μž…(μžλ£Œν˜•)

    μ•ˆλ…•ν•˜μ„Έμš”, 이번 μ‹œκ°„μ—λŠ” μžλ°”μ˜ 두가지 μžλ£Œν˜•μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λ‚΄μš©μ€ 'μžλ°”μ˜ μ‹ ' chapter4λ₯Ό 기초둜 μž‘μ„±ν–ˆμœΌλ©°, 이λ₯Ό 기반으둜 제 λ‚˜λ¦„μ˜ μš”μ•½ 정리λ₯Ό ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ 곡

    mong-dev.tistory.com

     

     

    μ°Έμ‘°μžλ£Œν˜•μ„ κ³΅λΆ€ν•˜λ©΄μ„œ λ‹€μŒκ³Ό 같이 총 7가지에 λŒ€ν•΄ 정리할 μ˜ˆμ •μΈλ°, 가독성을 μœ„ν•΄ 3κ°€μ§€λ§Œ λ¨Όμ € μž‘μ„±ν•˜κ³ , λ‚˜λ¨Έμ§€λŠ” λ‹€μŒκΈ€λ‘œ λ„˜κΈ°κ² μŠ΅λ‹ˆλ‹€ :)

     

    β–£ κΈ°λ³Έμƒμ„±μž
    β–£ λ©”μ†Œλ“œ overloading
    β–£ return (λ©”μ†Œλ“œμ—μ„œ κ°’ λ„˜κ²¨μ£ΌκΈ°)
    β–‘ static λ©”μ†Œλ“œμ™€ 일반 λ©”μ†Œλ“œμ˜ 차이
    β–‘ static 블둝
    β–‘ Pass by value, Pass by reference
    β–‘ 맀개 λ³€μˆ˜λ₯Ό μ§€μ •ν•˜λŠ” νŠΉμ΄ν•œ 방법

     

     

     

    κΈ°λ³Έμƒμ„±μž


    μžλ°”λŠ” μƒμ„±μžλ₯Ό λ§Œλ“€μ§€ μ•Šμ•„λ„ μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ§€λŠ” κΈ°λ³Έ μƒμ„±μžκ°€ μžˆμŠ΅λ‹ˆλ‹€.

    λ‹€μŒ μ†ŒμŠ€λ₯Ό 보며 λͺ‡κ°€μ§€ νŠΉμ§•μ„ λ§μ”€λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

     

    public class ReferenceString {
    
    	//1. κΈ°λ³Έ μƒμ„±μž
    	public ReferenceString() {
        
        }
    
    	//2. String argλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ ν•œ μƒμ„±μž
    	public ReferenceString(String arg) {
        
        }
        
        //메인 λ©”μ†Œλ“œ
        public static void main(String args[]) {
        	ReferenceString reference = new ReferenceString();
        }
    
    }

     

    메인 λ©”μ†Œλ“œλ₯Ό 보면, μš°λ¦¬κ°€ 객체λ₯Ό μƒμ„±ν• λ•Œ new λ‹€μŒμ— μžˆλŠ” ReferenceString()κ°€ μƒμ„±μžμž…λ‹ˆλ‹€.

     

    λ§Œμ•½μ— 1번과 2번이 아무것도 μ ν˜€ μžˆμ§€ μ•Šμ€ 상황이라면, 1번의 κΈ°λ³Έμƒμ„±μžλ‘œ μƒμ„±λœλ‹€. 즉, μ•„λ¬΄λŸ° 맀개 λ³€μˆ˜κ°€ μ—†λŠ” ReferenceDefault()λΌλŠ” μƒμ„±μžλŠ” λ‹€λ₯Έ μƒμ„±μžκ°€ 없을 경우 기본으둜 μ»΄νŒŒμΌν•  λ•Œ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€.

     

    λ˜ν•œ 1,2번처럼 μƒμ„±μžλŠ” λ¦¬ν„΄νƒ€μž…μ΄ μ—†κ³ , 클래슀 μ΄λ¦„μœΌλ‘œ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

     

    그런데, λ§Œμ•½μ— 1번이 μ—†κ³  2번만 μžˆμ„ κ²½μš°μ—λŠ”, 메인 λ©”μ†Œλ“œμ—μ„œ μ €λ ‡κ²Œ ν˜ΈμΆœν•  경우, 컴파일 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€. λ‹€μ‹œ λ§ν•΄μ„œ, κΈ°λ³Έ μƒμ„±μžλŠ” λ‹€λ₯Έ μƒμ„±μžκ°€ 있으면 μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

     

    μƒμ„±μžλŠ” 클래슀의 λ‹€λ₯Έ λ©”μ†Œλ“œλ“€ 보닀 μœ„μ—, κ°€μž₯ μœ—λΆ€λΆ„μ— μ„ μ–Έν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

     

    그럼 μƒμ„±μžλŠ” λͺ‡κ°œκΉŒμ§€ λ§Œλ“€ 수 μžˆμ„κΉŒμš”?

    정닡은 μƒμ„±μžμ˜ κ°―μˆ˜μ—λŠ” μ œν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€. 클래슀의 객체λ₯Ό 보닀 κ°„νŽΈν•˜κ²Œ λ§Œλ“€κΈ° μœ„ν•΄μ„œ μ—¬λŸ¬κ°€μ§€ 맀개 λ³€μˆ˜λ₯Ό κ°–λŠ” μ—¬λŸ¬ μƒμ„±μžλ₯Ό κ°€μ§ˆ 수 있으며, κ°―μˆ˜λŠ” 1κ°œμ—¬λ„ 되고 100κ°œκ°€ λ˜μ–΄λ„ 상관이 μ—†λ‹€. λ‹€λ§Œ, λ„ˆλ¬΄ 많이 λ§Œλ“œλŠ” 경우 관리가 νž˜λ“€μ–΄μ§€λ―€λ‘œ, κΌ­ ν•„μš”μ— λ§žλŠ” μƒμ„±μžλ§Œ λ§Œλ“œλŠ” μŠ΅κ΄€μ„ λ“€μ—¬μ•Όλ§Œ ν•©λ‹ˆλ‹€. 

     

     

     

    λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©(overloading)


    μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ κ²ƒμ²˜λŸΌ 클래슀의 μƒμ„±μžλŠ” 맀개 λ³€μˆ˜λ“€μ„ μ„œλ‘œ λ‹€λ₯΄κ²Œ ν•˜μ—¬ μ„ μ–Έν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ λ©”μ†Œλ“œλ„ μ΄λ ‡κ²Œ 이름은 κ°™κ²Œ ν•˜κ³  맀개 λ³€μˆ˜λ“€μ„ λ‹€λ₯΄κ²Œ ν•˜μ—¬ λ§Œλ“€ 수 μžˆμ„κΉŒμš”? λ‹Ήμ—°νžˆ κ°€λŠ₯ν•©λ‹ˆλ‹€.

    public class ReferenceOverloading {
    
    	public static void main(String args[]) {
        
        	ReferenceOverloading reference = new ReferenceOverloading();
        
        }
        
        //1. 
        public void print(int data) {
        
        }
        
        //2.
        public void print(String data) {
        
        }
        
        //3.
        public void print(int intData, String stringData) {
        
        }
        
        //4.
        public void print(String stringData, int intData) {
        
        }
    }

     

     

    μœ„μ˜ 4가지 λ©”μ†Œλ“œλŠ” 이름은 동일 ν•˜μ§€λ§Œ, λͺ¨λ‘ λ‹€λ₯Έ λ©”μ†Œλ“œμ²˜λŸΌ μΈμ‹λœλ‹€. 핡심 μ°¨μ΄λŠ” 맀개 λ³€μˆ˜μ˜ μ’…λ₯˜, 개수, μˆœμ„œκ°€ λ‹€λ₯΄λ‹€λŠ” 것이닀. 맀개 λ³€μˆ˜μ˜ κ°œμˆ˜κ°€ 같아도 νƒ€μž…μ˜ μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ λ‹€λ₯Έ λ©”μ†Œλ“œμ²˜λŸΌ μΈμ‹λœλ‹€. μ—¬κΈ°μ„œ μ€‘μš”ν•œ 것은 맀개 λ³€μˆ˜μ˜ 이름이 μ•„λ‹ˆλΌ 맀개 λ³€μˆ˜μ˜ νƒ€μž…μ΄λ‹€. (λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ΄ κ°™κ³  λ³€μˆ˜μ˜ 이름이 λ‹€λ₯΄λ©΄? 같은 λ©”μ†Œλ“œλ‘œ μΈμ‹ν•œλ‹€.) 

     

    이와 같이 λ©”μ†Œλ“œμ˜ 이름을 κ°™λ„λ‘ν•˜κ³ , 맀개 λ³€μˆ˜λ§Œμ„ λ‹€λ₯΄κ²Œ ν•˜λŠ” 것을 λ°”λ‘œ μ˜€λ²„λ‘œλ”©(overloading)이라고 ν•©λ‹ˆλ‹€. 

    overloadλŠ” "κ³Όμ ν•˜λ‹€. λΆ€ν•˜λ₯Ό μ£Όλ‹€." 이런 μ˜λ―Έκ°€ μžˆλŠ” λ‹¨μ–΄μΈλ°μš”, λ‹€μ‹œ λ§ν•΄μ„œ ν•˜λ‚˜μ˜ λ©”μ†Œλ“œ 이름을 μ‚¬μš©ν•˜λ©΄μ„œ μ—¬λŸ¬ κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€ ν˜Ήμ€ ν•˜λ‚˜μ˜ λ©”μ†Œλ“œ μ΄λ¦„μœΌλ‘œ λ§Žμ€ λΆ€ν•˜λ₯Ό 쀀닀라고 μƒκ°ν•΄λ³Όμˆ˜λ„ μžˆκ² μŠ΅λ‹ˆλ‹€.

     

    κ°€μž₯ μ‰¬μš΄ 예λ₯Ό λ“€μžλ©΄, System.out.println()μ΄λΌλŠ” λ©”μ†Œλ“œλ₯Ό 생각해보면 μ‰½μŠ΅λ‹ˆλ‹€. 이 λ©”μ†Œλ“œμ˜ 맀개 λ³€μˆ˜λ‘œ, intλ§Œμ„ 주던, longλ§Œμ„ 주던, Stringλ§Œμ„ μ€˜λ„ λ©λ‹ˆλ‹€. int값을 좜λ ₯ν•΄μ•Όν•œλ‹€κ³ ν•΄μ„œ, System.out.printInt() μ΄λŸ°μ‹μœΌλ‘œ λ³„κ°œμ˜ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이게 λ°”λ‘œ μ˜€λ²„λ‘œλ”©μ˜ μž‡μ μž…λ‹ˆλ‹€. 

     

     

     

     

    return


    return은 λ©”μ†Œλ“œμ˜ 값을 λ¦¬ν„΄ν• λ•Œ μ‚¬μš©ν•˜κ±°λ‚˜, 리턴값이 μ—†λŠ” void λ©”μ†Œλ“œμΈ κ²½μš°μ—λŠ” λ©”μ†Œλ“œμ˜ μ’…λ£Œμ˜ μ˜λ―Έλ‘œλ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°„λ‹¨ν•˜κ²Œ μ½”λ“œλ₯Ό 보면 더 이해가 μ‰½μŠ΅λ‹ˆλ‹€.

     

    public class ReferenceReturn {
    
    	public static void main(String args[]) {
        	ReferenceReturn reference = new ReferenceReturn();
            System.out.println(reference.intReturn());
            System.out.println(reference.intArrayReturn());
            System.out.println(reference.stringReturn());
        }
        
        public int intReturn() {
        	int returnInt=0;
            return returnInt;
        }
        
        public int intArrayReturn() {
        	int returnArray[]=new int[10];
            return returnArray;
        }
        
         public String stringReturn() {
        	String returnString="Return value";
            return returnString;
        }
        
        
    
    }

     

    μ‹€μ œλ‘œλŠ” 각 λ©”μ†Œλ“œμ—μ„œ 계산 μž‘μ—…μ΄λ‚˜ 데이터 처리λ₯Ό 거친 후에 리턴을 ν•΄μ£Όμ–΄μ•Ό ν•˜μ§€λ§Œ, μ˜ˆμ‹œλ‘œ κ°„λ‹¨νžˆ μ΄ˆκΈ°ν™”λ§Œ ν•˜κ³  λ¦¬ν„΄ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. 

     

    - λ©”μ†Œλ“œ 이름 μ•žμ— λ³€μˆ˜μ˜ νƒ€μž…μ„ 지정해 μ£Όκ³ ,

    - λ©”μ†Œλ“œ λ‚΄μ—μ„œλŠ” κ·Έ νƒ€μž…μ„ μƒμ„±ν•˜κ³  κ°€κ³΅ν•œ ν›„

    - "return"μ΄λΌλŠ” μ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 리턴해 μ£Όλ©΄

    - μš”μ²­ν•œ λ©”μ†Œλ“œλ‘œ κ·Έ 값이 μ „λ‹¬λ©λ‹ˆλ‹€.

     

    참고둜 까먹고 리턴을 해주지 μ•Šμ„ 경우, 컴파일 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

     

    μœ„μ—μ„œ λ§μ”€λ“œλ Έλ“―μ΄, return은 μ΄λ ‡κ²Œ 값을 λ¦¬ν„΄ν•˜κΈ°λ„ν•˜μ§€λ§Œ, λ©”μ†Œλ“œμ˜ μ’…λ£Œμ˜ μ˜λ―Έλ‘œλ„ μ‚¬μš©ν•œλ‹€κ³  ν–ˆμŠ΅λ‹ˆλ‹€. return을 μ§€λ‚˜κ²Œ 되면 λ©”μ†Œλ“œλŠ” μ’…λ£Œν•˜κ²Œ λ˜λŠ”λ°, 그럼 return 뒀에 μ½”λ“œκ°€ μžˆλ‹€λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”? λ§žμŠ΅λ‹ˆλ‹€. κ·Έ 뒀에 μžˆλŠ” μ½”λ“œλŠ” μ ˆλŒ€ 싀행될일이 μ—†κΈ° λ•Œλ¬Έμ— "unreachable statement"λΌλŠ” 메세지와 ν•¨κ»˜ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

     

    그럼 ν•˜λ‚˜μ˜ λ©”μ†Œλ“œλŠ” ν•˜λ‚˜μ˜ νƒ€μž…μ˜ κ°’λ§Œ λ¦¬ν„΄ν•΄μ£ΌλŠ”λ°, μ—¬λŸ¬ 개λ₯Ό λ„˜κ²¨ μ£Όκ³  싢을 땐 μ–΄λ–»κ²Œ ν• κΉŒμš”?

    DTO와 같은 νŒ¨ν„΄μ„ 리턴 νƒ€μž…μœΌλ‘œ μ„ μ–Έν•΄μ£Όλ©΄, μ—¬λŸ¬ 개의 데이터λ₯Ό ν•˜λ‚˜μ˜ νƒ€μž…μ— λ„£μ–΄μ„œ λ„˜κ²¨μ€„ 수 μžˆκ² μŠ΅λ‹ˆλ‹€. (DTO : Data Transfer Object, 데이터λ₯Ό λ‹€λ₯Έ μ„œλ²„λ‘œ μ „λ‹¬ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ μ“°μ΄λŠ” μžλ°” νŒ¨ν„΄. μ–΄λ–€ 속성을 κ°–λŠ” 클래슀λ₯Ό λ§Œλ“€κ³ , κ·Έ 속성듀을 μ‰½κ²Œ μ „λ‹¬ν•˜κΈ° μœ„ν•΄μ„œ λ§Œλ“ λ‹€.)

     

    λ˜ν•œ 리턴값이 μ—†λŠ” void λ©”μ†Œλ“œμ—μ„œλŠ” return 뒀에 아무것도없이 λ°”λ‘œ μ„Έλ―Έμ½œλ‘ μ„ 적어주면, λ©”μ†Œλ“œ μ’…λ£Œμ˜ 의미둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°„λ‹¨ν•˜κ²Œ μ½”λ“œλ‘œ λ³΄μ—¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

     

    public void wantToStopInTheMiddle(boolean flag) {
    	
        //μ½”λ“œ μƒλž΅
        .
        .
        .
        
        if(flag) return;
        
        //μ½”λ“œ μƒλž΅
        .
        .
        .
        
    
    }

     

     

     

    글이 κΈΈμ–΄μ Έ, λ‹€μŒ κ²Œμ‹œκΈ€λ‘œ λ„˜μ–΄κ°€λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€ :)

    κ°μ‚¬ν•©λ‹ˆλ‹€!

     

     

     

    https://mong-dev.tistory.com/13
     

    μ°Έμ‘°μžλ£Œν˜• - static λ©”μ†Œλ“œμ™€ 일반 λ©”μ†Œλ“œμ˜ 차이, static 블둝, Pass by value, Pass by reference, νŠΉμ΄ν•œ 맀

    μ•ˆλ…•ν•˜μ„Έμš”, 이번 μ‹œκ°„μ—λŠ” μ°Έμ‘°μžλ£Œν˜•μ— λŒ€ν•΄ μ΄μ–΄μ„œ 계속 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. β–‘ κΈ°λ³Έμƒμ„±μž β–‘ λ©”μ†Œλ“œ overloading β–‘ return (λ©”μ†Œλ“œμ—μ„œ κ°’ λ„˜κ²¨μ£ΌκΈ°) β–£ static λ©”μ†Œλ“œμ™€ 일반 λ©”μ†Œλ“œμ˜ 차이 β–£ s

    mong-dev.tistory.com

     

     

     

    λŒ“κΈ€

Designed by Tistory.