관리 메뉴

CASSIE'S BLOG

[슈퍼코딩] 31강 객체의 상속 v1 + generate 단축키 설정 (option + i) 본문

PROGRAMMING/슈퍼코딩 강의 정리

[슈퍼코딩] 31강 객체의 상속 v1 + generate 단축키 설정 (option + i)

ITSCASSIE1107 2023. 12. 12. 22:24
반응형

수업 목표
1. 객체의 상속이란?
2. protected, 메소드 오버 라이딩이란?


객체 관계에도 부모 자식 관계가 존재한다.


그냥 객체 세계에서
자식은 부모 그대로 닮는다.

상속의 장점
코드 재사용성 up
유지보수성 up

자식 객체를 new 키워드로 만든 후 extends 키워드로 상속받으면 부모 클래스의 메소드를 쓸 수 있는거다.


generate 단축키 쓰기 보통 ctrl + i 를 많이 쓴다고 함





 

 
자식에서 추가 속성을 확장할 수도 있다. 확장이라는 표현을 쓴다고함. 
 
private으로 정보은닉화 시키고.
 

 
지금 이미 두개 키 조합 있잖아 그거 다 없애줘야 내가 설정된 단축키 조합으로 단축키를 설정할 수 있음. 
 

String myInfo(){
    return String.format("물고기(sex=%s, havingPoison=%b, leavingSea=%s)",
                         this.sex, this.havingPoison, this.leavingSea);
}

 
 
 
String.format 메서드는 문자열을 형식화하여 반환하는 메서드로, System.out.printf와 유사한 기능을 제공합니다. System.out.printf는 포맷된 문자열을 콘솔에 출력하는 데 사용되지만, String.format은 단순히 포맷된 문자열을 반환합니다.
 
String.format은 주어진 형식 문자열과 그에 대응하는 인수를 사용하여 새로운 문자열을 생성합니다. 예제 코드에서는 %s와 %b와 같은 형식 지정자를 사용하여 문자열의 형식을 지정하고 있습니다. 각 형식 지정자는 인수로 전달된 값의 타입에 따라 해석됩니다.
예를 들어, %s는 문자열을 나타내며, %b는 불리언 값을 나타냅니다. 코드에서 사용된 String.format는 세 가지 변수 this.sex, this.havingPoison, this.leavingSea 값을 형식화된 문자열로 변환하여 반환합니다.
여기 예제를 사용해 System.out.println을 통해 결과를 콘솔에 출력하는 방법을 보여드리겠습니다:
 
public class Main {
    public static void main(String[] args) {
        // 가정: myInfo 메서드가 클래스에 정의되어 있다고 가정
        YourClass instance = new YourClass();  // YourClass는 해당 클래스의 이름으로 대체되어야 합니다.
        
        String formattedInfo = instance.myInfo();
        System.out.println(formattedInfo);
    }
}
 
위 코드에서 YourClass는 형식화된 문자열을 생성하는 myInfo 메서드를 포함하는 클래스의 이름으로 대체되어야 합니다.
 
바로 함수를 넣을 수 있다고함. myInfo()를 System.out.println에 바로 넣음 
 
 

String myInfo(){
    return String.format("물고기(sex=%s, havingPoison=%b, leavingSea=%s)",
                         this.sex, this.havingPoison, this.leavingSea);
}

void printfMyInfo(){
    System.out.println(myInfo());
}

 
Fish 클래스에 이미 setter 메소드 세팅이 되어있어야 다른 클래스에서 new 키워드로 만들어서 setter메소드 호출하면 속성 이 메서드들을 사용하여 클래스 외부에서 객체의 속성을 변경하거나 설정할 수 있습니다.
 

package exercise.chapter_31;

public class Fish {
    // 속성
    private String sex; // "Male", "Female"
    protected boolean havingPoison; // true 독이있고, false: 독이 없고,
    private String StartSpawningDate; // 산란 시작시각
    private String endSpawningDate; // 산란 종료시작
    String leavingSea; // 사는 속성

    // 행위
    void eat(String food){
        System.out.printf(myInfo() + " 는 %s를 먹고 있습니다.\n", food);
    }
    void swim(int meter){
        System.out.println("나는 헤엄칩니다 미터: " + meter);
    }
    void makeCrowd(Fish otherfish){
        System.out.println("나는 다른 물고기와 무리짓습니다.");
    }
    void sleep(){};

    String myInfo(){
        return String.format("물고기(sex=%s, havingPoison=%b, leavingSea=%s)",
                             this.sex, this.havingPoison, this.leavingSea);
    }

    void printfMyInfo(){
        System.out.println(myInfo());
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setHavingPoison(boolean havingPoison) {
        this.havingPoison = havingPoison;
    }

    public void setStartSpawningDate(String startSpawningDate) {
        StartSpawningDate = startSpawningDate;
    }

    public void setEndSpawningDate(String endSpawningDate) {
        this.endSpawningDate = endSpawningDate;
    }

    public void setLeavingSea(String leavingSea) {
        this.leavingSea = leavingSea;
    }

    public boolean isHavingPoison() {
        return havingPoison;
    }
}

 

맞아요! `new Fish();`는 Fish 클래스의 default 생성자를 호출하여 객체를 생성하는 것입니다. 만약 Fish 클래스에 명시적으로 생성자가 정의되어 있지 않다면, 자바는 기본 생성자를 제공하게 됩니다. 이런 경우에 `new Fish();`는 기본 생성자를 호출하는 것이죠.

맞아요. 만약 클래스에 명시적으로 생성자를 하나라도 정의하지 않으면, 컴파일러는 기본 생성자를 자동으로 추가해줍니다. 그러나 클래스에 이미 다른 생성자가 하나라도 정의되어 있다면, 컴파일러는 기본 생성자를 추가하지 않습니다. 따라서 명시적으로 생성자를 정의한 경우에는 기본 생성자를 따로 작성하지 않아도 됩니다.


 
다른 클래스에서
 

package exercise.chapter_31;

public class SeaSituation {

    public static void main(String[] args){
        Fish fish1 = new Fish();
        fish1.setSex("Male");
        fish1.setLeavingSea("동해");
        fish1.setHavingPoison(false);


        FishChild fish2 = new FishChild();
        fish2.setSex("Female");
        fish2.setLeavingSea("서해");
        fish2.setHavingPoison(false);

        System.out.println("독성여부: " + fish2.isHavingPoison());
        fish2.becomeDanger();
        System.out.println("독성여부: " + fish2.isHavingPoison());

        // Ovrride
        fish1.eat("새우");
        fish2.eat("새우");

//        System.out.println(fish2.isEatable());
    }
}

 
 

반응형