JAVA πŸ”₯πŸ”₯ 정리 및 μ˜€λ‹΅λ…ΈνŠΈ πŸ”₯πŸ”₯

μœ€μ§€μ˜Β·2024λ…„ 4μ›” 22일

κΈ°λ³Έ κ°œλ…μ •λ¦¬

  • 띄어쓰기 μ—¬λΆ€ 확인!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  • μƒμ„±μž

    μƒμ„±μžλŠ” 객체λ₯Ό 생성할 λ•Œ ν˜ΈμΆœλ˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œ

  • 상속 관계에 μžˆμ„ λ•Œ μƒμ„±μž 호좜

    μžλ°”μ—μ„œ 상속 관계에 μžˆμ„ λ•Œ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λ©΄, μžμ‹ 클래슀의 μƒμ„±μž 싀행에 μ•žμ„œ λΆ€λͺ¨ 클래슀의 μƒμ„±μžκ°€ λ¨Όμ € ν˜ΈμΆœλœλ‹€. superλ₯Ό μ‚¬μš©ν•΄ λͺ…μ‹œμ μœΌλ‘œ λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό μ§€μ •ν•  수 있으며, 이 경우 μ§€μ •λœ λΆ€λͺ¨ μƒμ„±μžκ°€ μ‹€ν–‰λœλ‹€. λͺ…μ‹œμ μœΌλ‘œ λΆ€λͺ¨ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμœΌλ©΄, λ¬΅μ‹œμ μœΌλ‘œ 인자 μ—†λŠ” λΆ€λͺ¨ 클래슀의 κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.
    λΆ€λͺ¨ 클래슀의 μƒμ„±μžκ°€ 싀행을 마치고 λ‚˜λ©΄, μžμ‹ 클래슀의 μƒμ„±μžλ‘œ λŒμ•„μ™€μ„œ μ½”λ“œλ₯Ό 계속 μ‹€ν–‰ν•œλ‹€.

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

    같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό λ§€κ°œλ³€μˆ˜μ˜ 개수 λ˜λŠ” νƒ€μž…μ— 따라 μ—¬λŸ¬λ²ˆ μ •μ˜ν•˜λŠ” 것

    class Calculator {
        // add λ©”μ„œλ“œ, μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜μ—¬ μ •μ˜
        int add(int a, int b) {
            return a + b;
        }
    
        // λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜κ°€ λ‹€λ₯Έ add λ©”μ„œλ“œ
        int add(int a, int b, int c) {
            return a + b + c;
        }    
      }
          
    Calculator calc = new Calculator();
    System.out.println(calc.add(5, 10));        // 15
    System.out.println(calc.add(5, 10, 15));   // 30
  • μ˜€λ²„ 라이딩

    상속 관계 μ—μ„œ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ μž¬μ •μ˜ ν•˜λŠ” 것. (λ©”μ„œλ“œλͺ…, λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…κ³Ό 개수, λ°˜ν™˜ νƒ€μž…μ€ 동일해야 함)

    class Animal {
      void sound() {
            System.out.println("동물 μ†Œλ¦¬");
        }
    }
    
    class Dog extends Animal {
        // Animal 클래슀의 sound λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©
        void sound() {
            System.out.println("멍멍");
        }
    }
    Animal dog = new Dog();
    dog.sound();  // 멍멍
  • ν•˜μ΄λ”©

    μƒμœ„ 클래슀의 static λ©”μ„œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 같은 μœ ν˜•μœΌλ‘œ λ‹€μ‹œ μ„ μ–Έν•˜λŠ” 것. ν•˜μ΄λ”©λœ λ©”μ„œλ“œλŠ” λ©”μ„œλ“œ 호좜이 클래슀 νƒ€μž…μ— 따라 κ²°μ •λœλ‹€. (상속 κ΄€κ³„μ—μ„œλ§Œ λ°œμƒν•˜λ©° 정적 λ©”μ„œλ“œμ— ν•œμ •λœ νŠΉμ„±)

    class Base {
        static void display() {
            System.out.println("λΆ€λͺ¨ 클래슀의 λ””μŠ€ν”Œλ ˆμ΄ λ©”μ„œλ“œ");
        }
    }
    
    class Derived extends Base {
        // Base 클래슀의 display λ©”μ„œλ“œ νžˆλ”©
        static void display() {
            System.out.println("μžμ‹ 클래슀의 λ””μŠ€ν”Œλ ˆμ΄ λ©”μ„œλ“œ");
        }
    }
    Base.display();      // λΆ€λͺ¨ 클래슀의 λ””μŠ€ν”Œλ ˆμ΄ λ©”μ„œλ“œ
    Derived.display();   // μžμ‹ 클래슀의 λ””μŠ€ν”Œλ ˆμ΄ λ©”μ„œλ“œ
  • μ˜€λ²„λΌμ΄λ”© vs ν•˜μ΄λ”©

    class A {
       static void f() { System.out.print("1 "); } // λΆ€λͺ¨ 클래슀의 정적 λ©”μ„œλ“œ
       void g() { System.out.print("2 "); } // λΆ€λͺ¨ 클래슀의 μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ
    }
    class B extends A {
       static void f() { System.out.print("3 "); } // ν•˜μ΄λ”©: A 클래슀의 f() λ©”μ„œλ“œλ₯Ό ν•˜μ΄λ”©
       void g() { System.out.print("4 "); } // μ˜€λ²„λΌμ΄λ”©: A 클래슀의 g() λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©
    }
    class C {
       public static void main(String[] args) {
           A a = new B();
           a.f(); // ν•˜μ΄λ”©λœ λ©”μ„œλ“œ 호좜, A의 f()κ°€ 호좜됨
           a.g(); // μ˜€λ²„λΌμ΄λ”©λœ λ©”μ„œλ“œ 호좜, B의 g()κ°€ 호좜됨
       }
    }
  • 좔상 클래슀 (abstract)

    // 좔상 클래슀 μ •μ˜
    abstract class 동물 {
       abstract void μšΈλ‹€();  // 좔상 λ©”μ„œλ“œ, κ΅¬ν˜„λ˜μ§€ μ•ŠμŒ
    
       // 좔상 클래슀 λ‚΄μ—μ„œλ„ 일반 λ©”μ„œλ“œ κ΅¬ν˜„μ΄ κ°€λŠ₯
       void μˆ¨μ‰¬λ‹€() {
           System.out.println("μˆ¨μ„ μ‰½λ‹ˆλ‹€.");
       }
    }
    // 좔상 클래슀λ₯Ό 상속받은 ꡬ체적인 클래슀 μ •μ˜
    class 개 extends 동물 {
       // 좔상 λ©”μ„œλ“œ 'μšΈλ‹€' κ΅¬ν˜„
       void μšΈλ‹€() {
           System.out.println("멍멍!");
       }
    }
    class 고양이 extends 동물 {
       // 좔상 λ©”μ„œλ“œ 'μšΈλ‹€' κ΅¬ν˜„
       void μšΈλ‹€() {
           System.out.println("μ•Όμ˜Ή!");
       }
    }
    public class μΆ”μƒν΄λž˜μŠ€μ˜ˆμ œ {
       public static void main(String[] args) {
           개 개 = new 개();  // '개' 클래슀의 μΈμŠ€ν„΄μŠ€ 생성
           개.μšΈλ‹€();  // κ΅¬ν˜„λœ λ©”μ„œλ“œ 호좜
           개.μˆ¨μ‰¬λ‹€();  // 상속받은 일반 λ©”μ„œλ“œ 호좜
    
           고양이 고양이 = new 고양이();  // '고양이' 클래슀의 μΈμŠ€ν„΄μŠ€ 생성
           고양이.μšΈλ‹€();  // κ΅¬ν˜„λœ λ©”μ„œλ“œ 호좜
           고양이.μˆ¨μ‰¬λ‹€();  // 상속받은 일반 λ©”μ„œλ“œ 호좜
       }
    }
  • ν•˜λ‚˜ μ΄μƒμ˜ 좔상 λ©”μ„œλ“œ(abstract method)λ₯Ό ν¬ν•¨ν•˜λŠ” 클래슀둜, 이 λ©”μ„œλ“œλ“€μ€ μ„ μ–Έλ§Œ 있고 κ΅¬ν˜„μ΄ μ—†μ–΄μ„œ, 이λ₯Ό μƒμ†λ°›λŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.
  • 좔상 클래슀 μžμ²΄λ‘œλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λ‹€
  • μΈν„°νŽ˜μ΄μŠ€

    • λͺ¨λ“  λ©”μ„œλ“œκ°€ 기본적으둜 좔상 λ©”μ„œλ“œμΈ ν˜•νƒœ => 객체 생성 λΆˆκ°€
    • κ΅¬ν˜„λœ μƒνƒœ 없이 μ „λΆ€ μ‹œκ·Έλ‹ˆμ²˜(μ„ μ–Έ)만 μžˆλŠ” ꡬ쑰
    • implements와 ν•¨κ»˜ 쓰인닀! (extends μ•„λ‹ˆμ•Ό!!!!!!)

μ‹€μˆ˜ double, float

  • Javaμ—μ„œλŠ” μœ ν˜•μ„ μ§€μ •ν•˜μ§€ μ•Šκ³  μ‹­μ§„μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 기본적으둜 double둜 처리
    (λͺ…μ‹œμ μœΌλ‘œ float둜 λ§Œλ“€λ €λ©΄ 24.8f와 같이 숫자 뒀에 f λ˜λŠ” Fλ₯Ό μΆ”κ°€ν•΄μ•Ό 함)

    
    class Calculate {    
        public int cal(int a, int b) {
            return a - b; // a와 b의 μ°¨λ₯Ό λ°˜ν™˜
        }
    
        // 두 μ‹€μˆ˜(float)의 λ§μ…ˆμ„ μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œ
        public float cal(float a, float b) {
            return a + b; // a와 b의 합을 λ°˜ν™˜
        }
    
        // 두 μ‹€μˆ˜(double)의 λ§μ…ˆμ„ μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œ
        public double cal(double a, double b) {
            return a + b; // a와 b의 합을 λ°˜ν™˜
        }
    
        // μ„Έ μ •μˆ˜μ˜ λ§μ…ˆμ„ μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œ
        public int cal(int a, int b, int c) {
            return a + b + c; // a, b, c의 합을 λ°˜ν™˜
        }
    }
    
    class Example {
        public static void main(String[] args) {
            Calculate a = new Calculate(); // 'Calculate' 클래슀의 μΈμŠ€ν„΄μŠ€ 생성
    
            System.out.println(a.cal(31, 69, 25)); // 좜λ ₯: 125
    
            // μ‹€μˆ˜(double) λ§μ…ˆ λ©”μ†Œλ“œ 호좜 및 κ²°κ³Ό 좜λ ₯
            System.out.println(a.cal(24.8, 5.1)); // 좜λ ₯: 29.9
        }
    }

μ‚¬μš©λœ 기법


class Adder {
    // μ˜€λ²„λ‘œλ”©(Overloading): 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό λ§€κ°œλ³€μˆ˜μ˜ μœ ν˜•κ³Ό 개수λ₯Ό λ‹€λ₯΄κ²Œ ν•΄μ„œ μ—¬λŸ¬ 개 μ •μ˜
    public int add(int a, int b) { return a+b; } // μ •μˆ˜ λ§μ…ˆ
    public double add(double a, double b) { return a+b; } // μ‹€μˆ˜ λ§μ…ˆ
}

// Computer 클래슀: Adder 클래슀λ₯Ό 상속(Inheritance)λ°›μ•„ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€
class Computer extends Adder {
    // μΊ‘μŠν™”(Encapsulation) 및 정보 은닉(Information Hiding): λ³€μˆ˜ xλ₯Ό private둜 μ„ μ–Έν•˜μ—¬ μ™ΈλΆ€ μ ‘κ·Ό μ œν•œ    
    private int x;

    // μ˜€λ²„λ‘œλ”©λœ add λ©”μ„œλ“œ: λ§€κ°œλ³€μˆ˜κ°€ μ„Έ 개인 μ •μˆ˜ λ§μ…ˆ
    public int cal(int a, int b, int c) {
        if (a == 1) return add(b, c); // 상속받은 Adder의 add λ©”μ„œλ“œ μ‚¬μš©
        else return x;
    }
}

class Adder_Main {
    public static void main(String[] args) { 
        Computer c = new Computer();
        
        // μ˜€λ²„λ‘œλ”©λœ λ©”μ„œλ“œ 호좜: int ν˜•μ‹κ³Ό double ν˜•μ‹μ— 맞게 add λ©”μ„œλ“œκ°€ 호좜됨
        System.out.println("100 + 200 = " + c.add(100, 200)); 
        System.out.println("5.7 + 9.8 = " + c.add(5.7, 9.8));
    }
}

λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„

// κΈ°λ³Έ 클래슀 X μ •μ˜
class X {
  int i;
  X() { i = 10; }  // μƒμ„±μžμ—μ„œ iλ₯Ό 10으둜 μ΄ˆκΈ°ν™”
  void print() { System.out.print(i+", "); }  // iκ°’ 좜λ ₯
}

// Xλ₯Ό μƒμ†λ°›λŠ” 클래슀 Y μ •μ˜
class Y extends X {
  int i;  // 클래슀 X와 λ™μΌν•œ μ΄λ¦„μ˜ i λ³€μˆ˜λ₯Ό 가짐
  int j;
  Y() { 
      i = 15;  // Y의 iλ₯Ό 15둜 μ΄ˆκΈ°ν™”
      j = 20;  // Y의 jλ₯Ό 20으둜 μ΄ˆκΈ°ν™”
  }
  void print() { System.out.print(j+", "); }  // Y의 jκ°’ 좜λ ₯
  void superprint() { super.print(); }  // X의 print() 호좜
}

// Yλ₯Ό μƒμ†λ°›λŠ” 클래슀 Z μ •μ˜
class Z extends Y {
  int k;
  Z() {
      super();  // λΆ€λͺ¨ 클래슀 Y의 μƒμ„±μž 호좜
      k = 30;  // Z의 kλ₯Ό 30으둜 μ΄ˆκΈ°ν™”
  }
  void print() { System.out.print(k+", "); }  // Z의 kκ°’ 좜λ ₯
  void test() {
      print();  // Z의 print() 호좜
      superprint();  // Y의 print() 호좜
      System.out.print(super.j+", ");  // Y의 jκ°’ 좜λ ₯
      System.out.println(i);  // Z의 iκ°’ 좜λ ₯ (μ—¬κΈ°μ„œλŠ” Y의 iκ°€ 좜λ ₯됨)
  }
}

// 메인 ν΄λž˜μŠ€μ™€ 메인 λ©”μ„œλ“œ μ •μ˜
public class Main {
  public static void main(String[] args) {
      Z z = new Z();  // Z 클래슀의 μΈμŠ€ν„΄μŠ€ 생성
      z.test();  // Z의 test() λ©”μ„œλ“œ 호좜
  }
}
profile
μ‘₯μ‘₯μ‘₯μ‘₯ λ ˆλ²¨μ—…πŸŒ±πŸŒΌπŸŒ³

0개의 λŒ“κΈ€