ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Live Study - Java 의 Class
    Hello, World πŸ’»/Java β˜•οΈ 2020. 12. 14. 20:37

    μ •λ¦¬ν•œ λ‚΄μš©
    - 클래슀λ₯Ό μ •μ˜ν•˜λŠ” 방법
    - 객체λ₯Ό λ§Œλ“œλŠ” 방법, new μ—°μ‚°μž μ΄ν•΄ν•˜κΈ°
    - λ³€μˆ˜ μ„ μ–Έν•˜κΈ°
    - λ©”μ„œλ“œ μ„ μ–Έν•˜κΈ°
    - μƒμ„±μž μ •μ˜ν•˜κΈ°

    - this ν‚€μ›Œλ“œ μ΄ν•΄ν•˜κΈ°



    Class, 클래슀
    λŠ” 객체λ₯Ό μ •μ˜ν•΄ 놓은 것이고, μ‚¬μš©μž μ •μ˜ νƒ€μž…(User-Defined Type)이닀. 
    μ–Έμ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” μžλ£Œν˜•(primitive type) 외에 κ°œλ°œμžκ°€ μ„œλ‘œ κ΄€λ ¨λœ λ³€μˆ˜λ“€μ„ λ¬Άμ–΄μ„œ ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œ μƒˆλ‘œ μΆ”κ°€ν•˜λŠ” 것을 μ‚¬μš©μž μ •μ˜ νƒ€μž…μ΄λΌκ³  ν•œλ‹€.

    μ—¬κΈ°μ„œ '객체'λŠ” 무엇인지, 객체지ν–₯은 무엇인지.. 에 λŒ€ν•œ λ‚΄μš©μ„ μ“°κ²Œλ˜λ©΄ 글도 ν•œμ—†μ΄ 길어지고 정리도 νž˜λ“€ 것 κ°™μ•„μ„œ λ‹¨μˆœνžˆ ν”„λ‘œκ·Έλž˜λ°μ μΈ κ΄€μ μ—μ„œ 정리해보렀고 ν•œλ‹€.

    λ„˜μ–΄κ°€κΈ° 전에 ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 데이터 처리λ₯Ό μœ„ν•œ μ €μž₯ ν˜•νƒœμ˜ λ°œμ „ 과정을 μ§šμ–΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™λ‹€. 

    λ³€μˆ˜ -> λ°°μ—΄ -> ꡬ쑰체 -> 클래슀


    λ³€μˆ˜: ν•˜λ‚˜μ˜ 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” 곡간
    λ°°μ—΄: 같은 νƒ€μž…μ˜ μ—¬λŸ¬ 데이터λ₯Ό ν•˜λ‚˜μ˜ μ§‘ν•©μœΌλ‘œ μ €μž₯ν•  수 μžˆλŠ” 곡간
    ꡬ쑰체: κ΄€λ ¨λœ μ—¬λŸ¬ 데이터λ₯Ό μ’…λ₯˜μ— 관계없이 ν•˜λ‚˜μ˜ μ§‘ν•©μœΌλ‘œ μ €μž₯ν•  수 μžˆλŠ” 곡간
    클래슀: κ΄€λ ¨λœ μ—¬λŸ¬ 데이터와 ν•¨μˆ˜μ˜ κ²°ν•©, ꡬ쑰체에 ν•¨μˆ˜λ₯Ό ν•©μΉœ 것과 κ°™λ‹€.

    ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” μ‚¬μš©μž μ •μ˜ νƒ€μž…μ„ μ •μ˜ν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•˜κ³  있고, Java 와 같은 객체지ν–₯μ–Έμ–΄μ—μ„œλŠ” ν΄λž˜μŠ€κ°€ μ‚¬μš©μž μ •μ˜ νƒ€μž…μ΄λ‹€.

    클래슀λ₯Ό μ •μ˜ν•˜λŠ” 방법은 이렇닀.

    1. 클래슀λͺ….java νŒŒμΌμ„ μ μ ˆν•œ νŒ¨ν‚€μ§€(디렉토리)에 λ§Œλ“ λ‹€.

    Java μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•˜λŠ” μ½”λ“œ μ»¨λ²€μ…˜μ΄ μžˆλ‹€. λ§Žμ€ λ‚΄μš©μ΄ 있고, 클래슀 λͺ…에 λŒ€ν•œ λ‚΄μš©λ„ μžˆλ‹€.
    google.github.io/styleguide/javaguide.html#s5.2.2-class-names λ₯Ό 참고해보면 ν΄λž˜μŠ€λͺ…은 λͺ…사 λ˜λŠ” λͺ…사ꡬ이어야 ν•˜κ³ , UppserCamelCase μ»¨λ²€μ…˜μ„ λ”°λ₯Έλ‹€. (λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•΄ 단어가 λ°”λ€” λ•Œ λŒ€λ¬Έμžλ‘œ μž‡λŠ” 것) λ‹€λ§Œ κΌ­ λͺ…사일 ν•„μš”λŠ” μ—†κ³  ν˜•μš©μ‚¬κ΅¬κ°€ 올 μˆ˜λ„ μžˆλ‹€κ³  ν•œλ‹€. Readable 같은 클래슀 λͺ…도 μžˆλ‹€. κΌ­ λͺ…사ꡬ라고 정해진 건 μ•„λ‹Œ 것 κ°™λ‹€.
    Test 클래슀 같은 κ²½μš°λŠ” λŒ€μƒ 클래슀λͺ… 뒀에 Test λ₯Ό 뢙이면 λœλ‹€. μ•„λž˜ MyClass λ₯Ό ν…ŒμŠ€νŠΈ ν•˜λŠ” ν…ŒμŠ€νŠΈ 클래슀λͺ…은 MyClassTest 둜 ν•˜λ©΄ λœλ‹€.

    2. νŒŒμΌμ„ λ§Œλ“€λ©΄ 기본적으둜 IDE, νŽΈμ§‘κΈ°μ—μ„œ 클래슀 μ½”λ“œλ₯Ό 생성해쀀닀. 파일λͺ…κ³Ό 클래슀λͺ…은 κ°™μ•„μ•Ό ν•œλ‹€. μ•„λž˜ 파일λͺ…은 MyClass.java 이닀. 클래슀λͺ…을 λ°”κΎΈλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μ—λŸ¬κ°€ μžˆλ‹€κ³  μ•Œλ €μ€„ 것이닀.

    public class MyClass {
    
        // λ³€μˆ˜..
        
        // λ©”μ„œλ“œ..
    
    }

    (package λͺ…은 μƒλž΅ν–ˆλ‹€.)

    3. 끝

    ν΄λž˜μŠ€λΌλŠ” λΌˆλŒ€λ₯Ό λ§Œλ“€κ³  μ •μ˜ν•˜λŠ” 것 μžμ²΄λŠ” μ΄μ •λ„λ‘œ 쉽닀. μ—¬κΈ°μ„œ 이제 public 이 protected, private 이 될 μˆ˜λ„ 있고 클래슀 이름 μ˜†μ— implements, extends κ°€ 올 μˆ˜λ„ μžˆλ‹€. λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ„ μž‘μ„± ν•΄μ•Όν•œλ‹€. 살을 λΆ™μ΄λ©΄μ„œ κ³΅λΆ€ν•΄λ³΄μž.

    ν•˜λ‚˜μ˜ .java νŒŒμΌμ— μ—¬λŸ¬ 클래슀λ₯Ό μ •μ˜ν•  수 μžˆμ§€λ§Œ λ˜λ„λ‘ ν•œ νŒŒμΌμ— ν•˜λ‚˜μ˜ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ’‹λ‹€.
    (μ°Έκ³ : ν΄λž˜μŠ€μ—” public, default 이 두 가지 μ ‘κ·Ό μ œν•œμžλ₯Ό μ μš©ν•  수 있고, 파일λͺ…κ³Ό 같은 ν΄λž˜μŠ€μ—λ§Œ public 을 μ μš©μ‹œν‚¬ 수 μžˆλ‹€)

     

    객체λ₯Ό λ§Œλ“œλŠ” 방법, new ν‚€μ›Œλ“œ μ΄ν•΄ν•˜κΈ°

    클래슀λ₯Ό μ •μ˜ν•˜λŠ” 방법은 μ•Œμ•˜λ‹€. 클래슀λ₯Ό λ§Œλ“œλŠ” 방법은 new λΌλŠ” μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀.
    κ·Έλ™μ•ˆμ€ new μ—°μ‚°μžλŠ” 말 κ·ΈλŒ€λ‘œ 'κ·Έλƒ₯' μ“°κ³  μžˆμ—ˆλ‹€. κΉŠμ€ κ³ λ―Ό 없이. 온라인 μŠ€ν„°λ””λ₯Ό 기회둜 μ •λ¦¬ν•΄λ³΄κ²Œ λ˜μ—ˆλ‹€.

    μΈμŠ€ν„΄μŠ€ν™”(Instantiation) λΌλŠ” 것을 μ•Œμ•„μ•Ό ν•  것 κ°™λ‹€. 클래슀λ₯Ό 객체λ₯Ό μ •μ˜ν•΄ 놓은 것 이라고 ν–ˆλŠ”λ°, ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό λ§Œλ“œλŠ” 과정을 μΈμŠ€ν„΄μŠ€ν™” ν•œλ‹€κ³  ν•œλ‹€. 그리고 ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체λ₯Ό κ·Έ 클래슀의 μΈμŠ€ν„΄μŠ€(instance) 라고 ν•œλ‹€.

    객체λ₯Ό λ§Œλ“œλŠ” 방법은 2단계λ₯Ό 거쳐야 ν•œλ‹€.

    1. μ„ μ–Έ (Declaration)
    2. μΈμŠ€ν„΄μŠ€ν™”

    1. μ„ μ–Έ λ‹¨κ³„μ—μ„œλŠ” μš°λ¦¬κ°€ μ •μ˜ν•œ 클래슀λ₯Ό νƒ€μž…μœΌλ‘œ κ°€μ§€λŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것이닀. 

    MyClass myClass;

     

    μ—¬κΈ°μ„œ myClass λŠ” 객체λ₯Ό λ‹΄κ³  μžˆλŠ” λ³€μˆ˜κ°€ μ•„λ‹ˆκ³  객체λ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” μ°Έμ‘° λ³€μˆ˜μ΄λ‹€. 

    2. μΈμŠ€ν„΄μŠ€ λ‹¨κ³„μ—μ„œ 이제 new μ—°μ‚°μžκ°€ λ“±μž₯ν•œλ‹€. 

    myClass = new MyClass();
    MyClass myClass = new MyClass(); // ν•œμ€„λ‘œ μž‘μ„±ν•΄λ„ λœλ‹€.

     

    new μ—°μ‚°μžλŠ” λŸ°νƒ€μž„(μ‹€ν–‰μ‹œμ )에 μƒˆλ‘œμš΄ 객체에 λŒ€ν•œ λ©”λͺ¨λ¦¬λ₯Ό νž™(Heap) μ˜μ—­μ— λ™μ μœΌλ‘œ ν• λ‹Ήν•˜κ³ , ν•΄λ‹Ή λ©”λͺ¨λ¦¬μ— λŒ€ν•œ μ°Έμ‘°(μ£Όμ†Œκ°’)λ₯Ό λ°˜ν™˜ν•΄μ„œ 클래슀λ₯Ό μΈμŠ€ν„΄μŠ€ν™” ν•˜λŠ” 것이닀.

    이제 myClass λ³€μˆ˜λ‘œ νž™ μ˜μ—­μ— ν• λ‹Ήλœ MyClass 객체에 μ ‘κ·Όν•  수 μžˆλ‹€.

     

    λ³€μˆ˜ μ„ μ–Έν•˜κΈ°

    λ³€μˆ˜λŠ” μ„Έ 가지 μ’…λ₯˜κ°€ μžˆλ‹€.

    • 클래슀 λ³€μˆ˜
    • μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
    • 지역 λ³€μˆ˜

    λ³€μˆ˜κ°€ μ„ μ–Έλœ μœ„μΉ˜μ— 따라 λ³€μˆ˜μ˜ μ’…λ₯˜κ°€ κ²°μ •λœλ‹€. 

    public class Party {
        
        static int limit; // 클래슀 λ³€μˆ˜
        
        String subject; // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
        
        void open() {
            int time = 8; // 지역 λ³€μˆ˜
        }
        
    }

     

    μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

    클래슀 μ˜μ—­μ— μ„ μ–Έλ˜κ³ , 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ λ§Œλ“€μ–΄μ§„λ‹€. κ·Έλž˜μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ•Όν•œλ‹€.
    μΈμŠ€ν„΄μŠ€λŠ” Heap μ˜μ—­μ— 각각 μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€λŠ” κ³ μœ ν•œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό 가진닀.

    Party party = new Party();
    System.out.println(party.subject);


    - μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„  λ¨Όμ € 생성해야 ν•œλ‹€.

    클래슀 λ³€μˆ˜, static λ³€μˆ˜

    클래슀 λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ•žμ— static ν‚€μ›Œλ“œλ₯Ό 뢙이면 λœλ‹€. κ·Έλž˜μ„œ static λ³€μˆ˜λΌκ³ λ„ ν•œλ‹€. 클래슀 λ³€μˆ˜λŠ” ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— 올라갈 λ•Œ 생성이 λœλ‹€.
    JVM 이 .class νŒŒμΌμ„ μ½μ–΄μ„œ ν΄λž˜μŠ€μ— λŒ€ν•œ 정보λ₯Ό Method Area λΌλŠ” 곳에 μ €μž₯ν•˜λŠ”λ°, 이 λ•Œ 클래슀 λ³€μˆ˜λ„ 이 μ˜μ—­μ— μ €μž₯λœλ‹€. κ·Έλž˜μ„œ μΈμŠ€ν„΄μŠ€μ—μ„œ static λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  땐 이 μ˜μ—­μ„ 찾게 되고, λͺ¨λ“  μΈμŠ€ν„΄μŠ€λŠ” 클래슀 λ³€μˆ˜λ₯Ό κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•˜κ²Œ λœλ‹€.

    System.out.println(Party.limit);


    - 클래슀 λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. 클래슀 μ΄λ¦„μœΌλ‘œ μ ‘κ·Όν•  수 μžˆλ‹€.

    μ§€μ—­λ³€μˆ˜

    λ©”μ„œλ“œ, μƒμ„±μž, μ΄ˆκΈ°ν™” λΈ”λŸ­μ— μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ‘ μ§€μ—­λ³€μˆ˜μ΄λ‹€. λ©”μ„œλ“œ λΈ”λŸ­, μƒμ„±μž λΈ”λŸ­, μ΄ˆκΈ°ν™” λΈ”λŸ­ { } λ‚΄μ—μ„œλ§Œ μ‚¬μš©λ˜κ³  λΈ”λŸ­μ΄ λλ‚˜λ©΄ μ†Œλ©Έλœλ‹€.

     

    λ©”μ„œλ“œ μ„ μ–Έν•˜κΈ°

    λ©”μ„œλ“œλŠ” μ„ μ–ΈλΆ€, κ΅¬ν˜„λΆ€λ‘œ 이루어져 μžˆλ‹€.

    λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œ_이름(λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜2..) { // μ„ μ–ΈλΆ€
        // κ΅¬ν˜„λΆ€
    }
    int add(int x, int y) {
        return x + y;
    }

     

    λ°˜ν™˜νƒ€μž… - λ©”μ„œλ“œμ˜ 좜λ ₯ 결과의 μžλ£Œν˜•μ„ μž‘μ„±ν•˜λ©΄ λœλ‹€. λ°˜ν™˜κ°’μ΄ μ—†λŠ” κ²½μš°λŠ” void 라고 μž‘μ„±ν•˜λ©΄ λœλ‹€.

    λ©”μ„œλ“œ 이름 - λ©”μ„œλ“œκ°€ μ–΄λ–€ 일을 ν•˜λŠ”μ§€ 이름을 잘 μ •ν•΄μ„œ μž‘μ„±ν•˜λ©΄ λœλ‹€. (이름을 잘 μ •ν•˜λŠ” 건 μ–΄λ €μš΄ 일이닀..) λ©”μ„œλ“œ 이름은 lowCamelCase κ·œμΉ™μ„ λ”°λ₯Έλ‹€.

    λ§€κ°œλ³€μˆ˜ - 'μžλ£Œν˜• λ³€μˆ˜λͺ…' 짝을 지어 μž‘μ„±ν•˜λ©΄ λœλ‹€. 각 λ§€κ°œλ³€μˆ˜λŠ” μ‰Όν‘œ ',' 둜 μ—°κ²°ν•˜λ©΄ λœλ‹€. μžλ£Œν˜•μ΄λ‚˜ λ³€μˆ˜λͺ…을 μƒλž΅ν•  수 μ—†λ‹€. λ§Œμ•½ λ§€κ°œλ³€μˆ˜κ°€ ν•„μš” μ—†λ‹€λ©΄ int add() μ΄λ ‡κ²Œ λΉ„μ›Œλ‘λ©΄ λœλ‹€.

    κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜ - λ§€κ°œλ³€μˆ˜κ°€ μ›μ‹œ νƒ€μž… (primitive type) 인 경우 κΈ°λ³Έν˜• 값이 λ³΅μ‚¬λ˜μ„œ λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©λœλ‹€. λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ κΈ°λ³Έν˜• λ§€κ°œλ³€μˆ˜μ˜ 값을 변경해도 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ μͺ½μ—μ„œμ˜ 원본은 변동이 μ—†λ‹€.

    μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜ - λ§€κ°œλ³€μˆ˜κ°€ μ°Έμ‘°ν˜•μΌ 경우 μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œ 값이 λ³΅μ‚¬λ˜μ„œ λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©λœλ‹€. λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜μ— 값을 λ³€κ²½ν•˜λ©΄ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ μͺ½μ˜ 원본도 λ³€κ²½λœλ‹€.

    public class ParameterSample {
    
        public static void main(String[] args) {
            ParameterSample sample = new ParameterSample();
    
            int x = 1000;
    
            System.out.println("호좜 μ „: " + x);
            sample.changeAndDisplay(x);
            System.out.println("호좜 ν›„: " + x);
        }
    
        void changeAndDisplay(int x) {
            x = 2000;
            System.out.println("Method λ‚΄λΆ€: " + x);
        }
    
    }
    
    // 좜λ ₯ κ²°κ³Ό
    // 호좜 μ „: 1000
    // Method λ‚΄λΆ€: 2000
    // 호좜 ν›„: 1000


    μ›μ‹œ νƒ€μž…μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό λ„˜κ²¨μ„œ λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ λ³€κ²½ν•œλ‹€κ³  해도 원본 κ°’μ—λŠ” 변동이 μ—†λ‹€. 

    class Data {
        int x;
    }
    
    public class ParameterSample {
    
        public static void main(String[] args) {
            ParameterSample sample = new ParameterSample();
    
            Data data = new Data();
            data.x = 1000;
    
            System.out.println("호좜 μ „: " + data.x);
            sample.changeAndDisplay(data);
            System.out.println("호좜 ν›„: " + data.x);
        }
    
        void changeAndDisplay(Data data) {
            data.x = 2000;
            System.out.println("Method λ‚΄λΆ€: " + data.x);
        }
    
    }
    
    // 좜λ ₯κ²°κ³Ό
    // 호좜 μ „: 1000
    // Method λ‚΄λΆ€: 2000
    // 호좜 ν›„: 2000


    μ°Έμ‘°ν˜• λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œ 값을 λ„˜κΈ΄λ‹€κ³  ν–ˆλ‹€. λ•Œλ¬Έμ— λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ£Όμ†Œ 값을 μ΄μš©ν•΄ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 값을 λ³€κ²½ν•˜λ©΄, ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€ μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜λŠ” μͺ½μ—μ„œλŠ” λ‹Ήμ—°νžˆ λ³€κ²½λœ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 값을 μ–»κ²Œ λœλ‹€.

    return - λ©”μ„œλ“œμ˜ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” keyword 이닀. μ΄λ•Œ return 뒀에 μž‘μ„±ν•˜λŠ” κ°’, λ³€μˆ˜λŠ” μœ„μ—μ„œ μž‘μ„±ν•œ λ°˜ν™˜νƒ€μž…κ³Ό μžλ£Œν˜•μ΄ κ°™μ•„μ•Ό ν•œλ‹€.
    λ°˜ν™˜νƒ€μž…μ„ μž‘μ„±ν•œ 경우 return 문으둜 값을 λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€. λ°˜ν™˜νƒ€μž…μ΄ μ—†λŠ” void 경우 return 문을 μƒλž΅ν•  수 μžˆλŠ”λ°, 사싀 μ»΄νŒŒμΌλŸ¬κ°€ return; 을 μžλ™μœΌλ‘œ λΆ™μ—¬μ€˜μ„œ κ°€λŠ₯ν•œ 것이닀. 

    λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό 잘 ν™•μΈν•˜λŠ” 것은 정말 μ€‘μš”ν•˜λ‹€. λ§€κ°œλ³€μˆ˜κ°€ μ μ ˆν•œ κ°’μœΌλ‘œ 잘 λ“€μ–΄μ™”λŠ”μ§€ ν™•μΈν•˜λŠ” μž‘μ—…μ„ λ©”μ„œλ“œμ˜ μ‹œμž‘ λΆ€λΆ„μ—μ„œ ν•˜λ©΄ μ’‹λ‹€.


    static λ©”μ„œλ“œ

    μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— static 을 뢙이면 클래슀 λ³€μˆ˜(static λ³€μˆ˜) κ°€ λœλ‹€κ³  ν–ˆλ‹€. λ©”μ†Œλ“œμ—λ„ static 을 뢙일 수 μžˆλ‹€. 

    public class StaticMethod {
    
        static void show(String name) {
            System.out.println(name);
        }
    
        public static void main(String[] args) {
            StaticMethod.show("ohhhmycode");
        }
    
    }

     

    static λ©”μ„œλ“œλ„ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  클래슀λͺ…을 톡해 μ ‘κ·Όν•΄μ„œ λ°”λ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

    static λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œλŠ” static λ³€μˆ˜λ§Œ μ‚¬μš©κ°€λŠ₯ν•˜κ³ , μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

    μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ λ§Œλ“€μ–΄μ§„λ‹€κ³  ν–ˆλ‹€. λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ μ‚¬μš©ν•  수 μžˆλŠ” static λ©”μ„œλ“œλŠ” λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ λ§Œλ“€μ–΄μ§€μ§€ μ•Šμ€ μƒνƒœμΌ μˆ˜λ„ μžˆλ‹€.

    κ·Έλž˜μ„œ static λ©”μ„œλ“œμ—μ„œλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μ‚¬μš©μ„ κΈˆμ§€ν•˜κ³  μžˆλ‹€.


    λ°˜λŒ€λ‘œ 일반 method μ—μ„œλŠ” static λ³€μˆ˜, static λ©”μ„œλ“œ λ‘˜ λ‹€ μ°Έμ‘°ν•˜κ³  ν˜ΈμΆœν•  수 μžˆλ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, λ©”μ„œλ“œκ°€ μžˆλŠ” μ‹œμ μ—” 클래슀 λ³€μˆ˜, λ©”μ„œλ“œλŠ” ν™•μ‹€ν•˜κ²Œ μ‘΄μž¬ν•˜λŠ” μƒνƒœμ΄κΈ° λ•Œλ¬Έμ΄λ‹€.

    static λ©”μ„œλ“œλŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•΄μ•Όν•  λ•Œ, λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ— static λ©”μ†Œλ“œλ‘œ λ§Œλ“œλŠ” 것을 κ³ λ €ν•΄μ„œ μ‚¬μš©ν•˜λ©΄ λœλ‹€. static λ©”μ„œλ“œλŠ” λ©”μ„œλ“œ 호좜 μ‹œκ°„μ΄ 짧아지기 λ•Œλ¬Έμ— μ„±λŠ₯ ν–₯μƒμ˜ 이점이 μžˆλ‹€κ³  ν•œλ‹€.

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

    λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•  λ•Œ μ„œλ‘œ ꡬ뢄할 수 μžˆλ„λ‘ 각각 λ‹€λ₯Έ λ©”μ„œλ“œλͺ…μœΌλ‘œ λΆ™μ—¬μ€˜μ•Ό ν•œλ‹€. μžλ°”μ—μ„œλŠ” 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œκ°€ μžˆλ”λΌλ„ 맀개 λ³€μˆ˜μ˜ κ°œμˆ˜λ‚˜ νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ μ„œλ‘œ λ‹€λ₯΄κ²Œ ꡬ뢄할 수 μžˆλ‹€. 이λ₯Ό μ˜€λ²„λ‘œλ”©μ΄λΌκ³  ν•œλ‹€.

    λ©”μ„œλ“œ λͺ…이 같은데 λ§€κ°œλ³€μˆ˜κΉŒμ§€ κ°™λ‹€λ©΄ 쀑볡 였λ₯˜κ°€ λ°œμƒν•œλ‹€. 맀개 λ³€μˆ˜λŠ” 같은데 λ°˜ν™˜νƒ€μž…μ΄ λ‹€λ₯΄λ‹€κ³  ν•΄μ„œ μ˜€λ²„λ‘œλ”© λ˜μ§€λŠ” μ•ŠλŠ”λ‹€.

    μ˜€λ²„λ‘œλ”©μ˜ λŒ€ν‘œμ μΈ μ˜ˆλŠ” println λ©”μ„œλ“œλΌκ³  ν•œλ‹€.

    void println();
    void println(int x);
    void println(boolean x);
    ...


    μ•„λž˜μ²˜λŸΌ λ§€κ°œλ³€μˆ˜ λͺ…이 λ‹€λ₯΄λ‹€κ³  μ˜€λ²„λ‘œλ”©μ΄ λ˜μ§€λŠ” μ•ŠλŠ”λ‹€.

    int add(int a, int b);
    int add(int x, int y);

     

    κ°€λ³€μΈμž (varargs)

    Jdk 1.5 λΆ€ν„° κ°€λ³€μΈμžλΌλŠ” κΈ°λŠ₯을 μ΄μš©ν•΄ λ§€κ°œλ³€μˆ˜λ₯Ό λ™μ μœΌλ‘œ 지정해 쀄 수 있게 λ˜μ—ˆλ‹€.

    'νƒ€μž…... λ³€μˆ˜λͺ…' μ΄λ ‡κ²Œ μž‘μ„±ν•˜λ©΄ λœλ‹€. printfκ°€ λŒ€ν‘œμ μΈ 예라고 ν•œλ‹€.

    public PrintStream printf(String format, Object ...args) {
        // ...
    }


    format 에 %d, %s 와 같은 것듀이 λͺ‡ κ°œλ‚˜ λ“±μž₯ν•  지 λͺ¨λ₯Έλ‹€. μ΄λ•Œ λ™μ μœΌλ‘œ λ§€κ°œλ³€μˆ˜λ₯Ό 지정할 수 μžˆλŠ” κ°€λ³€μΈμžλ₯Ό μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€.

    μœ„ 처럼 κ°€λ³€μΈμžλŠ” λ§€κ°œλ³€μˆ˜ 쀑에 항상 κ°€μž₯ λ§ˆμ§€λ§‰μ— μ„ μ–Έν•΄μ•Ό ν•œλ‹€.

    String concat(String s1, String s2) { .. }
    String concat(String s1, String s2, String s3) { .. }
    String concat(String s1, String s2, String s3, String s4) { .. }
    
    String concat(String... str) { .. }
    
    // μœ„ 처럼 λ§€κ°œλ³€μˆ˜κ°€ λͺ‡ κ°œκ°€ μ˜¬μ§€ λͺ¨λ₯΄κ±°λ‚˜, 같은 ν˜•μ‹μœΌλ‘œ λ§€κ°œλ³€μˆ˜ 숫자만 λŠ˜μ–΄λ‚  λ•Œ κ°€λ³€μΈμžλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.
    
    // κ°€λ³€μΈμž λ©”μ„œλ“œ 호좜
    
    concat(); // λ§€κ°œλ³€μˆ˜λ₯Ό λ„˜κΈ°μ§€ μ•Šμ•„λ„ λœλ‹€.
    concat("a", "b");
    concat("a", "b", "c");
    concat(new String[] { "a", "b", "c", "d" }); // 배열도 κ°€λŠ₯ν•˜λ‹€.


    κ°€λ³€μΈμžλŠ” λ‚΄λΆ€μ μœΌλ‘œ 배열을 μ΄μš©ν•œλ‹€. κ°€λ³€μΈμžκ°€ μ„ μ–Έλœ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ 배열이 μƒˆλ‘œ μƒμ„±λœλ‹€κ³  ν•œλ‹€. 맀번 배열을 μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— λΉ„νš¨μœ¨μ μΌ 수 있기 λ•Œλ¬Έμ— ν•„μš”ν•  λ•Œ 잘 μ‚¬μš©ν•΄μ•Ό 될 것 κ°™λ‹€.

    λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œλŠ” μ•„λž˜ 처럼 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

    String concat(String... str) { 
        for (String s : str) {
            // do something..
        }
    }


    μ£Όμ˜ν•  것이 μžˆλ‹€.

    String concat(String delim, String... str);
    String concat(String... str);


    μœ„μ˜ μ˜€λ²„λ‘œλ”©μ€ 쀑볡 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. μœ„μ²˜λŸΌ μž‘μ„±λ˜μ–΄ μžˆλ‹€κ³  κ°€μ •ν•˜κ³  ν˜ΈμΆœν•  λ•ŒλŠ” λ‹€μŒκ³Ό 같을 것이닀.
    concat("a", "b", "c");
    concat("-", "b", "c");

    μ–΄λ–€κ²Œ μœ„μ— λ©”μ„œλ“œμΈμ§€, μ•„λž˜ λ©”μ„œλ“œμΈμ§€ ꡬ뢄할 수 μ—†λ‹€. κ·Έλž˜μ„œ μ»΄νŒŒμΌλŸ¬κ°€ Ambiguous method call μ—λŸ¬λ₯Ό μ•Œλ €μ€€λ‹€.

     

    μƒμ„±μž μ •μ˜ν•˜κΈ°

    μƒμ„±μžλŠ” new μ—°μ‚°μžλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜λŠ” μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λ©”μ„œλ“œλ‹€. μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” μž‘μ—…μ„ μœ„ν•΄ μ‚¬μš©λ˜κ±°λ‚˜, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

    μƒμ„±μžλŠ” 클래슀 내에 μ„ μ–Έλ˜κ³ , λ©”μ„œλ“œ 처럼 μƒκ²Όμ§€λ§Œ λ‹€λ₯Έμ μ΄ μžˆλ‹€.

    - μƒμ„±μžμ˜ 이름은 클래슀의 이름과 κ°™λ‹€.
    - μƒμ„±μžλŠ” λ°˜ν™˜ 값이 μ—†λ‹€. void 도 μž‘μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

    public class Party {
        
        int limit;
        String location;
        
        Party() {
        }
        
        Party(int limit, String location) {
        }
        
    }


    μƒμ„±μžλ„ μ˜€λ²„λ‘œλ”©μ΄ κ°€λŠ₯ν•˜λ‹€. 

    Party partyA = new Party();
    Party partyB = new Party(10, "Home");


    new μ—°μ‚°μžλ‘œ μΈμŠ€ν„΄μŠ€ν™”ν•  λ•Œ 였λ₯Έμͺ½μ— μž‘μ„±ν•œ 것이 μƒμ„±μžμ˜€λ˜ 것이닀. 

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

    λͺ¨λ“  ν΄λž˜μŠ€μ—λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ μƒμ„±μžκ°€ μžˆμ–΄μ•Ό ν•œλ‹€. κΈ°λ³Έ μƒμ„±μžλŠ” λ§€κ°œλ³€μˆ˜λ„ μ—†κ³ , μ–΄λ–€ λ‚΄μš©λ„ μ—†λŠ” μƒμ„±μžμ΄λ‹€.

    public class Party {
    
        int limit;
        String location;
    
        Party() { // κΈ°λ³Έ μƒμ„±μž
        }
    
    }


    λ‹€λ₯Έ μƒμ„±μžκ°€ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μžλŠ” μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ€€λ‹€.


    맀개 λ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž

    맀개 λ³€μˆ˜λ₯Ό λ°›λŠ” μƒμ„±μžλ₯Ό λ§ν•œλ‹€. μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ λ‹€λ₯Έ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•˜λŠ” 경우 맀개 λ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μœ μš©ν•  λ•Œκ°€ λ§Žλ‹€.

    public class Party {
    
        int limit;
        String location;
    
        Party() {
        }
    
        Party(int limit, String location) {
            this.limit = limit;
            this.location = location;
        }
    
    }
    

     

    Party party = new Party();
    party.limit = 10;
    party.location = "home";
    
    Party party = new Party(10, "home"); // 더 κ°„κ²°ν•˜λ‹€.


    κΈ°λ³Έ μƒμ„±μžλ₯Ό μ‚¬μš©ν•΄ μ΄ˆκΈ°ν™”ν•΄μ£ΌλŠ” 것 보닀 맀개 λ³€μˆ˜λ₯Ό λ°›μ•„μ„œ μ΄ˆκΈ°ν™” ν•΄μ£ΌλŠ” 것이 더 κ°„κ²°ν•˜κ³  직관적이닀.

    μƒμ„±μžμ—μ„œ λ‹€λ₯Έ μƒμ„±μž 호좜

    μƒμ„±μžμ—μ„œ λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€. μ΄λ•Œλ„ κ·œμΉ™μ΄ μžˆλ‹€.

    - λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  땐 this() λ₯Ό μ‚¬μš©ν•œλ‹€. this();, this(10, "home"); μ΄λ ‡κ²Œ μ‚¬μš©ν•˜λ©΄ λœλ‹€.
    - λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  땐 첫 μ€„μ—μ„œλ§Œ 호좜이 κ°€λŠ₯ν•˜λ‹€. 

    public class Party {
    
        int limit;
        String location;
    
        Party() {
        }
    
        Party(int limit) {
            this(10, "home"); // λ‹€λ₯Έ μƒμ„±μž 호좜, 첫 쀄 μœ„μ— μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ μ—λŸ¬ λ°œμƒ
        }
    
        Party(int limit, String location) {
            this.limit = limit;
            this.location = location;
        }
    
    }
    

     

    this ν‚€μ›Œλ“œ μ΄ν•΄ν•˜κΈ°

    μœ„μ—μ„œ λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό μ‚¬μš©ν•  λ•Œ λ‚΄λΆ€μ—μ„œ this λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν–ˆλ‹€. this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ μ•„λž˜ 처럼 μž‘μ„±ν–ˆμ–΄μ•Ό ν–ˆλ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λͺ…κ³Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ 언더바 _ λ₯Ό 뢙여쀬닀. 

    Party(int _limit, String _location) {
        limit = _limit;
        location = _location;
    }
    


    this λŠ” μ°Έμ‘°λ³€μˆ˜λ‘œ μΈμŠ€ν„΄μŠ€ μžμ‹ μ„ κ°€λ¦¬ν‚€λŠ” λ³€μˆ˜μ΄λ‹€. this μ—λŠ” μžμ‹ μ˜ μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œκ°€ μ €μž₯λ˜μ–΄ 있고, λͺ¨λ“  μƒμ„±μžμ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ— μ§€μ—­λ³€μˆ˜λ‘œ μˆ¨κ²¨μ§„ μƒνƒœλ‘œ μ‘΄μž¬ν•œλ‹€.

    this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ λ³€μˆ˜μ™€ κ΅¬λΆ„ν•΄μ„œ μ‚¬μš©ν•  수 μžˆκ²Œλœλ‹€. κ·Έλž˜μ„œ this.limit = limit; 라고 μž‘μ„±ν•  수 μžˆμ—ˆλ˜ 것이닀.

    static λ©”μ„œλ“œμ—μ„œλŠ” this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λŠ” μ΄μœ μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ static λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μ‹œμ μ—” μΈμŠ€ν„΄μŠ€κ°€ 없을 수 있기 λ•Œλ¬Έμ΄λ‹€.

     

    References

    www.geeksforgeeks.org/new-operator-java/
    google.github.io/styleguide/javaguide.html#s5.2.2-class-names
    μžλ°”μ˜ 정석 (www.yes24.com/Product/Goods/24259565)
Designed by Tistory.