TIL 아닌 WIL - 1월 둘째주

becolorful·2022년 1월 15일
0

TIL

목록 보기
3/5
post-thumbnail

스스로 부족한 것을 채우기 위한 학습 기록입니다(a.k.a 개인공부). 부족함을 알고 채워나가려 노력하고 있습니다. 피드백은 언제나 환영합니다.😺

클래스와 객체, 인스턴스 (객체와 인스턴스 비교)

지금까지 클래스와 객체는 붕어빵틀과 붕어빵으로 이해하고 있었는데 한번 더 가볍게 정리하고 넘어가고자 한다.

  • 클래스: 설계도. 예를 들면 자동차의 특성과 기능들을 정의해 놓은 것. 연관되어 있는 메소드와 변수의 집합.
  • 객체(Object): 구현해야 할 대상. 자동차라면 소나타, 카니발 같은 것들이 객체가 될 수 있다. 메모리 할당 전.
  • 인스턴스(Instance): 클래스를 통해서 객체가 구현이 된 것. 메모리 할당된 상태. 객체대로 뽑아 낸 것이 인스턴스라고 생각해서 붕어빵이라고 생각했다.

상속과 다형성

상속: 조상과 자손.

  • 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것. 이를 통해 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통으로 관리할 수 있기 때문에 코드 추가 및 변경이 용이해짐.
    -> 코드의 재사용성을 높이고 코드의 중복을 제거 -> 프로그램의 생산성과 유지보수에 기여.
class Child extends Parents {
//
}
  • 자손 클래스는 조상 클래스의 모든 멤버를 상속 받으므로 항상 조상보다 멤버수가 많거나 같을 수 있음 -> 상속을 받는다는 건 조상을 extends(확장) 한다는 의미로도 볼 수 있음.

class Tv {
    boolean power;
    int channel;

    void power(){power = !power;}
    void channelUp() {++ channel;}
    void channelDown(){-- channel;}
}

class CaptionTv extends Tv {
    boolean caption;
    void displayCaption(String text){
        if (caption) {
            System.out.println(text);
        }
    }
}
class CaptionTvTest {
    public static void main(String[] args) {
        CaptionTv ctv = new CaptionTv();
        ctv.channel = 10;  //조상 클래스로부터 상속받은 멤버(CaptionTv가 Tv로 부터)
        ctv.channelUp();   //조상 클래스로부터 상속받은 멤버
        System.out.println(ctv.channel);
        ctv.displayCaption("Hello");
        ctv.caption = true;
        ctv.displayCaption("Hello");
    }
}

다형성 (아직 공부중..)

  • 객체지향개념에서 다형성은 여러가지 형태를 가질 수 있는 것을 의미.
  • 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함. -> 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 함.

this와 super

  • 요약: this는 자기자신 super는 자신의 부모를 가리킴
분류thissuper
그 클래스의 다른 생성자를 호출(자기자신)슈퍼 클래스(부모)의 생성자를 호출
class Cal {
    public int sum(int v1, int v2) {
        return v1 + v2;
    }

    //오버로딩
    public int sum(int v1, int v2, int v3){
        return this.sum(v1,v2)+v3;
        //이때 this는 자기자신(Cal클래스)의 sum을 가리키게됨
   }
}

class Cal2 extends Cal {
    public int minus(int v1, int v2) {
        return v1 - v2;
    }

    //오버라이딩
    public int sum(int v1, int v2) {
        System.out.println("cal2");
//        return v1+v2; // 그냥 이렇게 사용한다면 코드 중복이 발생
        return super.sum(v1, v2); //super를 써서 부모(cal)에 있는 것을 가리키게됨
    }
}

public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal();
        System.out.println(c.sum(2,1));

        Cal2 c2 = new Cal2();
        System.out.println(c2.sum(2,1));
    }
}

참고

profile
개발자가 되고 싶은 코린이

0개의 댓글