본문 바로가기

Daily19

[effective java] item 18 : 상속보다는 컴포지션을 사용하라 1. 구체클래스 상속의 위험성 다른 패키지의 구체 클래스를 상속하는 일은 위험하다 (인터페이스 상속말고, 구현 상속에서) 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. - 상위 클래스에 따라 하위클래스의 동작에 문제가 생기기 때문 (상위클래스의 릴리즈가 이뤄진다면?) '자기사용' : 자신의 다른 부분을 사용 > 내부 구현 방식이므로 오픈 api가 아니라 다름 릴리즈 변경, 삭제가능 하위 클래스가 깨지기 쉬운 이유 ㄱ. 상위 클래스의 메서드를 재정의 하여 하위클래스의 로직을 방어한다 (HashSet addAll() 예제) 상위클래스의 메서드 동작을 다시 구현하는게 어렵다. 시간도 더든다. 오류나 성능을 떨어뜨릴 수 있다. 하위클래스에서 접근 불가한 private 클래스를 써야하면 구현이 불가능하다. ㄴ. .. 2020. 2. 26.
HashCode 2020 참가 후기 처음으로 PS 대회에 참가해봤다. DSC Korea 슬랙에서 팀원을 구한다는 얘기를 듣고 참가를 하게 됐는데! 하하 UTC 17:30이라니,, 한국시간으로 오전 2:30부터 6:30까지 였다. 그래서 팀원들끼리 코딩할 장소를 찾기 위해 에어비엔비도 잡고 두근두근 설레 하면서 기다렸다. 그렇지만 새벽 2:30부터 6:30이라니 너무 가혹해.. 동양도 배려해 주세요.. 2시가 되길 기다리면서 팀원들하고 쪽잠도 자고, 사진도 찍고, 코딩 시작!! 근데 문제가 너무 대단,, 이걸 정확하게 짜는 게 4시간 만에 가능한가? 싶었달까 언제까지 열려있을지는 모르겠지만 여기서 문제를 확인 할 수 있다. https://hashcodejudge.withgoogle.com/#/rounds/6313004828196864/sco.. 2020. 2. 23.
[effective java] item 17 : 변경 가능성을 최소화하라 불변 클래스 : 그 인스턴스의 내부 값을 수정할 수 없는 클래스 예 ) String, Wrapper Class, BigInteger, BigDecimal - 설계 구현 사용이 쉽다. - 오류 여지가 적고 안전하다. 1. 불변 클래스 5가지 규칙 ㄱ. 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. (setter) ㄴ. 클래스를 확장할 수 없게 한다. (extend X) ㄷ. 모든 필드를 final로 선언한다 ㄹ. 모든 필드를 private으로 선언한다. [아이템 15] : 클래스와 멤버의 접근권한을 최소화하라 [아이템 16] : public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 ㅁ. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. - 객체 참조 X - ge.. 2020. 2. 20.
[effective java] item 16 : public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 1. 접근자와 변경자(mutator) 메서드를 활용해 데이터를 캡슐화 한다. ㄱ. public class @Getter @AllArgsConstructor public class Point{ private double x; private double y; } public class에서는 이 방식이 확실히 맞다. 접근자 제공으로 필드 공개를 안해서 클래스 내부를 마음대로 바꿀 수 있다. ㄴ. Package-private class || private 중첩 클래스 필드를 노출해도 문제가 없다. 클래스가 표현하려는 추상 개념만 올바르게 표현한다. 클라이언트 코드가 이 클래스 내부 표현에 묶이지만, 클라이언트도 어차피 이 클래스를 포함하는 패키지 안에서만 동작한다. 예제 코드 : https://github.co.. 2020. 2. 20.