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
댓글