et cetera/TIL
-
객체지향 프로그래밍 입문 강의 (5) - 의존과 DIet cetera/TIL 2022. 1. 2. 17:59
■ 의존 기능 구현을 위해 다른 구성 요소를 사용하는 것. ex) 객체 생성, 메서드 호출, 데이터 사용 - 의존은 변경이 전파될 가능성을 의미 - 의존하는 대상이 바뀌면 덩달아 바뀔 가능성이 높아진다. ex) 호출하는 메서드의 파라미터가 변경 호출하는 메서드가 발생할 수 있는 익셉션 타입이 추가 ⇒ 그 메서드를 사용하는 코드도 덩달아 바뀌게 된다. ■ 순환 의존 순환 의존 → 변경 연쇄 전파 가능성 A가 B에 의존하고, B가 C에 의존하고, C는 다시 A에 의존하고 있다고 치자. 이렇게 되면 A의 변경이 C에 영향을 주고, C의 변경은 B에, B의 변경은 다시 A에 영향을 준다. ⇒ 클래스, 패키지 모듈 등 모든 수준에서 순환 의존이 없도록 해야한다. ※ 의존하는 대상이 많다면? A가 의존하고 있는 대..
-
객체지향 프로그래밍 입문 강의 (4) - 기능과 책임 분리et cetera/TIL 2021. 12. 31. 18:31
■ 기능 분리 - 하나의 기능은 여러 하위 기능으로 분리할 수 있다. (즉, 하나의 기능은 여러 하위 기능을 통해 구현하게 된다) ex) 암호 변경 → 변경 대상 확인, 대상 암호 변경 변경 대상 확인 → 변경 대상 구하기, 대상이 없으면 오류 응답하기 대상 암호 변경 → 암호 일치 여부 확인, 암호 데이터 변경 - 분리한 하위 기능을 누가 제공할 지 결정하는 것이 바로 객체지향 설계의 기본이다. 기능은 곧 책임이다. 분리한 각 기능을 각 객체에게 알맞게 분배해야 한다. - 하나의 클래스나 메서드가 크다면 절차 지향과 동일한 문제가 발생한다. - 큰 클래스 → 많은 필드를 많은 메서드가 공유 - 큰 메서드 → 많은 변수를 많은 코드가 공유 - 여러 기능이 한 클래스/메서드에 섞이게 됨 필드와 변수는 결국..
-
객체지향 프로그래밍 입문 강의 (3) - 상속보단 조립et cetera/TIL 2021. 12. 30. 18:23
■ 상속을 통한 기능 재사용 시 발생할 수 있는 단점 - 상위 클래스 변경 어려움 ⇒ 상위 클래스를 변경하면, 그 변경이 모든 하위 클래스에 영향을 줄 수가 있다. (변경의 여파가 전파된다) ⇒ 상위 클래스를 조금만 잘못 변경해도 모든 하위클래스가 비정상적으로 동작할 가능성이 생긴다. - 클래스가 불필요하게 증가 - 상속 오용의 가능성 예를 들어, ArrayList를 상속받아 다음과 같이 Container 클래스를 구현했다고 치자. public class Container extends ArrayList { private int maxSize; private int currentSize; public Container(int maxSize) { this.maxSize = maxSize; } public ..
-
객체지향 프로그래밍 입문 강의 (2) - 다형성과 추상화et cetera/TIL 2021. 12. 29. 03:48
■ 다형성(Polymorphism) - 여러 모습을 갖는 것 - 객체 지향에서는 한 객체가 여러 타입을 갖는 것 - 타입 상속으로 구현 → 타입을 상속했다 = 하위 타입은 상위 타입도 된다 = 한 객체가 여러 타입을 가질 수 있다. public class Timer { public void start() { ... } public void stop() { ... } } public interface Rechargeable { void charge(); } public class IotTimer extends Timer implements Rechargeable { public void charge() { ... } } IotTimer 객체는 Timer 타입도 되고, Rechargeable 타입도 된다. ..
-
클린코드 자바스크립트 강의 (2)et cetera/TIL 2021. 12. 29. 03:04
■ 삼항 연산자 다루기 function alertMessage(isAdult) { isAdult ? alert('입장이 가능합니다') : alert('입장이 불가능합니다'); } 위 함수의 경우, alert 함수는 사실 아무런 return값도 가지지 않는다. alert 창을 띄운다는 행동을 하긴 하지만, 결국 저 삼항 연산자가 어떤식으로 변환되는가를 생각해보면 isAdult ? undefined : undefined 와 같다. 따라서 이런 경우에는 삼항 연산자를 용도에 맞게 사용했다기 보다는, 그냥 숏코딩을 통해 코드의 길이만 줄이려고 했다는 느낌에 가깝다. 결국, 삼항 연산자를 어떤 경우에 사용해야 적절한지를 생각해보면서 코딩을 하라는 뜻. function alertMessage(isAdult) { r..
-
객체지향 프로그래밍 입문 강의 (1) - 캡슐화et cetera/TIL 2021. 12. 27. 23:51
■ 캡슐화(Encapsulation) - 데이터 + 데이터 관련 기능을 묶는 것. - 객체의 기능 구현을 외부에 감추는 것 - 정보 은닉(Information Hiding)의 의미도 포함 - 외부에 영향을 끼치지 않고 객체 내부 구현을 변경 가능 ▶ 캡슐화를 하지 않으면.. if (acc.getMembership() == REGULAR && acc.getExpDate().isAfter(now()) { // 정회원 기능 } 여기서 5년 이상 사용자에게 일부 기능의 정회원 혜택을 1개월 무상 제공하는 이벤트를 열었다고 가정해보자. 그리하려 코드를 다음과 같이 수정했다. if (acc.getMembership() == REGULAR && ( (acc.getServiceDate().isAfter(fiveYear..
-
클린코드 자바스크립트 강의 (1)et cetera/TIL 2021. 12. 27. 15:37
■ 임시변수 줄이기 function getDateTime(targetDate) { let month = targetDate.getMonth(); let day = targetDate.getDay(); let hour = targetDate.getHour(); month = month >= 10 ? month : '0' + month; day = day >= 10 ? day : '0' + day; hour = hour >= 10 ? hour : '0' + hour; return { month, day, hour }; } - 위 함수가 할 수 없는 추가적인 스펙을 구현해야하는 상황이 오면 우리는 두 가지 선택을 할 수 있다. 새로 함수를 만들어서 사용하느냐, 아니면 위의 함수를 유지보수/수정하느냐의 두 가지..
-
타입스크립트 강의 내용 정리 (2)et cetera/TIL 2021. 12. 23. 19:48
■ 제네릭(Generic) function logText(text: string): string { console.log(text); return text; } function logNumber(num: number): number { console.log(num); return num; } logText('a'); logNumber(10); 유사한 함수를 두 개 선언하고 있다. 이 경우, 코드를 줄일 수 있는 방법은 크게 union 타입을 활용하는 방법과 Generic을 사용하는 방법이 있다. // union type을 통한 해결 function logText(text: string | number) { console.log(text); return text; } 이 방법을 사용하면 함수 내부에서는 s..