20210115 - TIL
오늘 한 일
-
미션 완료 및 예외처리 / 출력 메소드 생성
-
마스터 클래스 수강!
-
상속과 다형성 공부
-
상속- 기존의 클래스를 재 사용하여 새로운 클래스를 작성하는 것.
상속을 할 경우, 부모클래스로부터 거의 모든 코드를 재사용 할 수 있다.
공통적으로 코드를 관리할 수 있기 때문에, 추가 및 변경에 용이하다는 장점이 있다.(유지보수가 쉽다!)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가 입력되게 된다.
- this는 MyTv에 생성한 remoteController를 뜻하고,
-
-
객체 인스턴스 비교에 대한 공부
-
객체는 단순히 선언만 된 것이며, 인스턴스는 실제로 메모리에 등록된 것을 의미한다.
위와 같은 Tv클래스가 있다고 가정하였을 때,Tv t; // 객체를 선언하였으나, 선언만 했을 뿐 메모리에 등록되지않았다. Tv t1 = new Tv(); // 선언 후, 클래스의 인스턴스를 생성했고, 메모리에 객체가 등록되었다.
위처럼 선언만 된 것을 객체, 그리고 실제로 실체화 된 객체를 인스턴스라 한다.
-
-
SOLID 원칙 - SRP 단일책임원칙 공부
한 클래스는 하나의 책임만 가져야한다.클래스는 하나의 책임을 완전히 캡슐화 해야함을 일컫는다.
- ex) 특정한 문서를 수정해야할 때, 잘못된 정보가 적혀있어 수정하는 경우도 있을 것이고 디자인을 변경하기 위하여 수정하는 경우도 있을 것이다.
이와 같은 경우를 단일책임원칙에 따르면, 두 가지의 수정 원인이 실제로 각각의 책임 때문에 일어난 것으로, 분리된 클래스 혹은 모듈로 나뉘어야 하는 것이다.
이렇게 한 클래스는 한 목적에 집중 하도록 유지하는 것은, 클래스를 더욱 튼튼하게 만드는 것에 이바지 한다.
- ex) 특정한 문서를 수정해야할 때, 잘못된 정보가 적혀있어 수정하는 경우도 있을 것이고 디자인을 변경하기 위하여 수정하는 경우도 있을 것이다.
-
SOLID 원칙 - OCP 열림-닫힘원칙 공부
소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀있어야 한다.
개발 과정에서 만들어진 많은 모듈들 중, 하나를 수정 할 때 그 모듈을 이용하는 다른 모듈을 계속 고쳐야 한다면 프로그램 수정이 어렵기 때문에, 열림-닫힘 원칙은 시스템 구조를 리팩토링 하여 추후 모듈 변경을 하더라도 수정을 크게 유발하지 않도록 하는 것이다.- 확장에 열려있다:
특정 요구사항에 맞게 새로운 동작을 추가해, 모듈을 확장하거나 모듈이 하는 일을 변경할 수 있다. - 변경에 닫혀있다:
소스코드나 바이너리 코드를 변경하지 않아도, 모듈의 기능을 수정하거나 확장할 수 있다.
- 확장에 열려있다:
-
SOLID 원칙 - LSP 리스코프교환원칙 공부
상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상동작 해야한다.
- ex) 직사각형을 상속한 정사각형 클래스의 경우, 정사각형의 특징인 "네 변이 동일"한 것에 반해 직사각형은 네 변의 길이가 같지 않을 수 있다.
이런 경우, 직사각형을 하위타입인 정사각형에 치환했을 때 기존 프로그램이 오작동 할 수 있음을 의미한다.
위 처럼, 하위 타입의 객체로 치환해도 문제가 발생하지 않도록 하기 위해, 하위 타입의 객체 또한 상위 타입의 객체가 따르던 계약 사항을 따라야한다.
- ex) 직사각형을 상속한 정사각형 클래스의 경우, 정사각형의 특징인 "네 변이 동일"한 것에 반해 직사각형은 네 변의 길이가 같지 않을 수 있다.
오늘 느낀점
- 어제에 이어서... 오늘도.. 객체지향.. 너무너무 어렵다. 좀 더 연구하고 고민하면서 성장하고 싶다.
오늘 객체지향 책이 도착했으니, 주말 동안에 좀 읽어봐야겠다!!! - 코드스쿼드에서의 2주차가 완료 되었다.
저번 주에도 느꼈지만, 팀원들을 통해 많은 것을 배우고, 반성도 하고, 위로도 받는 것이 너무 좋은 것 같다.
오늘 마스터 클래스에서도 여러모로 위안을 많이 받아서 좀 더 힘내보자는 마음이 생긴다.
내일 할 일
- 객체지향 토끼 책 읽기!
- 자바의 정석 정리
Author And Source
이 문제에 관하여(20210115 - TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@znfhdnal1/20210115-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)