본문 바로가기
JAVA

JAVA 4주차

by Zㅣ존수빈zz 2022. 11. 23.

1. Overloading

- 같은 이름으로 메서드를 여러개 만드는 것

- 메서드 이름이 같아도 매개변수가 다르면 정상적으로 작동한다

- 자바에서는 생성자에만 주로 쓰이며 일반메서드에서는 헷갈릴 수 있으므로 권장X

public int Print() {
     System.out.println(num);
     return num;
}
// Print 메서드를 오버로딩
public int Print(int num) {
     System.out.println(num);
     return num;
}

- getter와 setter

  • private인 멤버변수는 다른 class에서 바로 사용할 수 없으므로 getter와 setter를 통해 값을 입력하고 받아야 한다.
  • get: 변수로 직접 사용
  • set: 변수에 값을 대입할 때 이 메서드를 통할것

* 변수 생성 > 빈 공간에 오른쪽 마우스 클릭 > source > Generate Getters and Setters

private String str;

public
String getStr() {
     return str;
}
public void setStr(String str) {
     this.str = str;
}

2. Extends (상속)

- extends를 통해 기존 클래스의 변수와 메서드를 물려받는다.

- 기존 클래스를 수정할 때 파생된 클래스도 함께 수정되며 파생된 클래스의 메서드를 따로 수정하거나 추가할 수 있다.

- Override: 상속받은 후 수정하고자 하는 메서드만 적어줌.

*Super.: 부모클래스의 메서드 혹은 변수 사용시

ex)
class MyOper {     // 기존 클래스
     private int num1, num2;
     public void setNum(int num1, int num2) {
          this.num1 = num1;
          this.num2 = num2;
}

class MyOperEx extends MyOper {        // 파생된 클래스
     public void setNum(int num1, int num2) {
          if(num1 < 0) {
               num1 *= -1;
          }
          if(num2 < 0) {
               num2 = num2 * -1;
          }
          super.setNum(num1, num2);
     }
}

3. Interface

- 구현기준을 제공하기 위한 상속용 클래스로 활용

- implement를 통해 상속

 

- 따라서 메서드는 구현을 하지 않고 곡 필요한 정보만 제공.

   > 모든 메서드가 "추상(abstract)메서드" : 코드를 구현하지 않고 선언만 한 메서드. 무조건 재정의 필요.

   > 따라서 모든 메서드가 '재정의'되어야만 함.

 

- 인터페이스를 사용하는 경우

     1) 구현해야 하는 메서드를 안내하기 위해

     2) 다중 상속이 가능 (extends는 한번에 하나만, implements는 여러개를 상속받을 수 있음)

Interface 예시
public interface
Star2 {
     int price = 0;
     public static final String menu = "";
     int index = 0;

     void sell();      // abstract public가 생략된 경우. // interface 내에 있는 메서드는 모두 추상메서드이다.
     abstract public void info(); 
}

*static: 멤버 또는 지역 변수를 전역변수처럼 취급 (전역변수 : 해당 함수 또는 클래스가 끝나도 계속 남아있음) 

* final: 값 변경이 불가능

* static final: 멤버변수가 변경되지 않고 일관된 값을 사용할 때는 새로운 메모리를 할당하지 않고 한 공간을 공유하면 되기

  때문에 static와 final를 조함하여 사용


3. Abstract Class

- 추상클래스: 추상 클래스를 상속받은 클래스는 추상클래스 안에 있는 모든 추상 메서드를 구현해야 한다.

- 클래스와 인터페이스의 중간역할.

- extends로 상속

public abstract class AbstractClass1 implements Interface1 {

// 구현을 안할거면 abstract
     public abstract void speed();

// 구현을 할거면
     public void bigdata() {
         System.out.println("5G 사용");
     }
}

> interface와 abstract class 모두 객체로 생성할 수 없다.

> interface는 모든 메서드가 추상메서드이지만 abstract class는 일반 메서드와 추상메서드가 함께 존재한다.

> 추상메서드는 무조건 재정의가 필요하지만 일반 메서드(default)는 구현이 자율적이다.

> 따라서 interface는 전체적인 틀을 잡는 역할을 하며 abstract class는 기능의 확장에 중점을 둔다.


4. MVP 패턴

- Model - View - Controller 코딩방식

   > Model class에서 변수를 생성, 저장

   > View class에서 출력

   > Controller class에서 흐름(로직)을 제어

Model )
public class Model {
     private int price;
     private String menu;
     public Model() {}
     public Model(int price, String menu) {   ① 생성자를 통해 view에서 price와 menu의 값을 저장
         super();
          this.price = price;
          this.menu = menu;
     }
     public int getPrice() {
         return price;
     }
     public String getMenu() {
         return menu;
     }
}
View )
public class View {
public static void main(String[] args) {
Model model = new Model(3000,"아메리카노");     ② 생성자를 통해 Model 함수의 menu와 price에 값을 저장
Model model2 = new Model(5000,"카페라떼");

Controller con = new Controller(model);      ⑤ Controller 클래스에 저장된 정보를 넘겨줌 
System.out.println(con.sell()+"를 판매합니다.");
System.out.println(con.info().getMenu()+"의 가격은 "+con.info().getPrice()+"원 입니다.");
}
}
Controller )
class Controller {
     Model model = new Model();       ③ Model 클래스 객체화. menu와 price 변수를 가져다쓰기 위해
     public Controller(Model model) {     ④ 비어있는 Model 데이터에 view에서 입력받은 데이터를 저장
          this.model.setPrice(model.getPrice());
          this.model.setMenu(model.getMenu());
     }
     public String sell() {      // con.sell()함수를 사용하면 Model 생성자에서 입력받은 menu값을 리턴
         return model.getMenu();
     }
     public Model info() {     // 자료형 대신 클래스명을 사용하여 자기 자신을 리턴값으로 받을 수 있다.
          return model;           // model을 리턴한다는 것은 getmenu()와 getprice() 모두 리턴한다는 의미
     }
}

5. 다형성

- 부모자식 상속 관계에 있는 클래스에서 부모클래스 하나로 여러 자식 클래스를 객체화 

- 잘 정리되어있는 링크 참고......흑흑넘무어렵따!

- https://life-with-coding.tistory.com/485

 

[JAVA] 자바 다형성 기본 및 활용

목차 1. 다형성이란? 2. 다형성의 이점 3. 다형성 필수 조건 4. 다형성 구현 방법 5. 예제 6. 객체 타입 확인 : instanceof 📌 1. 다형성이란? 다형성(polymorphism)이란 부모-자식 상속 관계에 있는 클래스에

life-with-coding.tistory.com

 

 

'JAVA' 카테고리의 다른 글

JAVA 6주차  (0) 2022.12.11
자바 5주차  (0) 2022.12.09
JAVA 3주차  (0) 2022.11.16
JAVA 2주차  (0) 2022.11.10
JAVA 1주차  (0) 2022.10.31

댓글