20210115 - TIL

10823 단어 TILTIL

오늘 한 일

  • 미션 완료 및 예외처리 / 출력 메소드 생성

  • 마스터 클래스 수강!

  • 상속과 다형성 공부

    • 상속- 기존의 클래스를 재 사용하여 새로운 클래스를 작성하는 것.
      상속을 할 경우, 부모클래스로부터 거의 모든 코드를 재사용 할 수 있다.
      공통적으로 코드를 관리할 수 있기 때문에, 추가 및 변경에 용이하다는 장점이 있다.(유지보수가 쉽다!)

      class Channel {
        int mbc;
        int sbs;
        int kbs;
      
        String pairing(){
          return "mbc"+mbc+" sbs"+sbs+" kbs"+kbs;
        }
      }
      
      class ChannelAdd extends Channel {
        int tvn;
      
        String pairing(){
          return "mbc"+mbc+" sbs"+sbs+" kbs"+kbs+" tvn"+tvn;
        }
      }
    • 다형성- 여러가지 형태를 가질 수 있는 것.
      대표적으로 특정 메소드나 클래스가 다양한 방식으로 동작하게 만드는 오버로딩, 오버라이딩이 있으며,
      조상타입의 참조변수로 자손타입(상속)의 객체를 다룰 수 있는 것이 다형성이다.
      (자손타입의 업캐스팅)

      class Channel {
        int mbc =11;
        int sbs =5;
        int kbs =7;
      
        String channelNum(){
          return "mbc"+mbc+" sbs"+sbs+" kbs"+kbs;
        }
      }
      
      class ChannelAdd extends Channel {
        int tvn =20;
      
        String channelNum(){
          return "mbc"+mbc+" sbs"+sbs+" kbs"+kbs+" tvn"+tvn;
        }
      }
      
      class Tv {
        public static void main(String[] args){
          Channel c = new ChannelAdd();
          
          System.out.println(c.channelNum);
          // 결과 : "mbc11 sbs5 kbs7 tvn22
        }
      }

      위와 같이 조상타입의 참조변수로 인스턴스를 참조할 수 있다.
      하지만, 자손타입은 조상타입의 인스턴스를 참조할 수 없다.

  • this와 super 키워드 차이점 공부

    • this- 해당 클래스 내에 선언된 변수.

    • super- 상속 클래스 내에 선언된 변수.

      만일, Tv 클래스를 상속 받은 클래스가 있다고 했을때,

      public class MyTv extends Tv {
        int remoteController;
      
        void control(){
          this.remoteController = 1;
          super.remoteController = 2;
        }
        
      }
      • this는 MyTv에 생성한 remoteController를 뜻하고,
        super는, Tv내에 생성한 remoteController를 뜻한다.
        따라서, 위의 control()메소드를 이용하게 될 경우, MyTv 의 remoteController의 값은 1
        Tv 의 remoteController의 값은 2가 입력되게 된다.
  • 객체 인스턴스 비교에 대한 공부

    • 객체는 단순히 선언만 된 것이며, 인스턴스는 실제로 메모리에 등록된 것을 의미한다.
      위와 같은 Tv클래스가 있다고 가정하였을 때,

      Tv t;	// 객체를 선언하였으나, 선언만 했을 뿐 메모리에 등록되지않았다.
      Tv t1 = new Tv(); // 선언 후, 클래스의 인스턴스를 생성했고, 메모리에 객체가 등록되었다.

      위처럼 선언만 된 것을 객체, 그리고 실제로 실체화 된 객체를 인스턴스라 한다.

  • SOLID 원칙 - SRP 단일책임원칙 공부

    한 클래스는 하나의 책임만 가져야한다.클래스는 하나의 책임을 완전히 캡슐화 해야함을 일컫는다.

    • ex) 특정한 문서를 수정해야할 때, 잘못된 정보가 적혀있어 수정하는 경우도 있을 것이고 디자인을 변경하기 위하여 수정하는 경우도 있을 것이다.
      이와 같은 경우를 단일책임원칙에 따르면, 두 가지의 수정 원인이 실제로 각각의 책임 때문에 일어난 것으로, 분리된 클래스 혹은 모듈로 나뉘어야 하는 것이다.

    이렇게 한 클래스는 한 목적에 집중 하도록 유지하는 것은, 클래스를 더욱 튼튼하게 만드는 것에 이바지 한다.

  • SOLID 원칙 - OCP 열림-닫힘원칙 공부

    소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀있어야 한다.
    개발 과정에서 만들어진 많은 모듈들 중, 하나를 수정 할 때 그 모듈을 이용하는 다른 모듈을 계속 고쳐야 한다면 프로그램 수정이 어렵기 때문에, 열림-닫힘 원칙은 시스템 구조를 리팩토링 하여 추후 모듈 변경을 하더라도 수정을 크게 유발하지 않도록 하는 것이다.

    • 확장에 열려있다:
      특정 요구사항에 맞게 새로운 동작을 추가해, 모듈을 확장하거나 모듈이 하는 일을 변경할 수 있다.
    • 변경에 닫혀있다:
      소스코드나 바이너리 코드를 변경하지 않아도, 모듈의 기능을 수정하거나 확장할 수 있다.
  • SOLID 원칙 - LSP 리스코프교환원칙 공부

    상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상동작 해야한다.

    • ex) 직사각형을 상속한 정사각형 클래스의 경우, 정사각형의 특징인 "네 변이 동일"한 것에 반해 직사각형은 네 변의 길이가 같지 않을 수 있다.
      이런 경우, 직사각형을 하위타입인 정사각형에 치환했을 때 기존 프로그램이 오작동 할 수 있음을 의미한다.

    위 처럼, 하위 타입의 객체로 치환해도 문제가 발생하지 않도록 하기 위해, 하위 타입의 객체 또한 상위 타입의 객체가 따르던 계약 사항을 따라야한다.

    https://pizzasheepsdev.tistory.com/9

    https://ko.wikipedia.org/wiki/%EB%A6%AC%EC%8A%A4%EC%BD%94%ED%94%84_%EC%B9%98%ED%99%98_%EC%9B%90%EC%B9%99

오늘 느낀점

  • 어제에 이어서... 오늘도.. 객체지향.. 너무너무 어렵다. 좀 더 연구하고 고민하면서 성장하고 싶다.
    오늘 객체지향 책이 도착했으니, 주말 동안에 좀 읽어봐야겠다!!!
  • 코드스쿼드에서의 2주차가 완료 되었다.
    저번 주에도 느꼈지만, 팀원들을 통해 많은 것을 배우고, 반성도 하고, 위로도 받는 것이 너무 좋은 것 같다.
    오늘 마스터 클래스에서도 여러모로 위안을 많이 받아서 좀 더 힘내보자는 마음이 생긴다.

내일 할 일

  • 객체지향 토끼 책 읽기!
  • 자바의 정석 정리

좋은 웹페이지 즐겨찾기