일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
- 안드로이드
- android push
- Django REST Android
- Android
- kodility
- UWP
- 안드로이드 구글맵
- C
- C++
- mfc
- livedata
- Flutter TextField
- FLUTTER
- 프로그래머스
- dart
- RxAndroid
- Kotlin
- C/C++
- flutter firestore
- android architecture component
- Java
- NDK
- Android P
- Django REST framework
- RxJava
- Rxjava2
- 알고리즘
- 코틀린
- Python
- Django REST
- Today
- Total
목록2018/09 (25)
개발하는 두더지
[Effective Java 규칙17] 상속을 위한 설계와 문서가 없다면 상속하지 마라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 상속하고 메서드를 재정의하면 무슨일이 생기는지 어떻게 사용하는지 반드시 문서에 남겨야 한다. 하지만 문서만 제대로 작성했다고 상속에 적합한 설계가 되지는 않는다. 클래스 내부 동작을 자유자재로 수정/접근할 수 있는 메서드를 신중하게 선정한 다음에 protected 메서드 형태로 제공해야 한다. 이 protected로 사용할 메서드를 어떻게 정할 것인가? 정확한 답은 없다. 열심히 생각하고 신중하게 고른 다음, 실제로 하위 클래스들을 만들어서 테스트하는 것이 최선이다. 저자에 의하면 상속을 위해 하위 클래스 3개정도 만..
[Effective Java 규칙16] 계승하는 대신 구성하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 상속은 강력한 도구이지만 캡슐화 원칙을 침해하므로 문제를 발생시킬 가능성이 있다. 그리고 상위 클래스와 하위 클래스가 IS-A 관계일 때만 사용하는 것이 좋다. 만약 IS-A 관계가 성립해도, 하위 클래스가 상위 클래스와 다른 패키지에 있거나 상속을 고려해 만들어진 클래스가 아니라면 하위 클래스는 깨지기 쉽다. 이런 문제들을 피하려면 상속(extends)대신 구현(implements)해야한다. 래퍼 클래스를 만든다면 하위 클래스를 만드는 것보다 견고하고 강력하다 //TODO 철학/유래 찾아보기자바는 처음 설계부터 다중상속을 지원하지 않게 만들..
문제는 아래와 같이 주어집니다. Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).For example: Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 return its level order traversal as: [ [3], [9,20], [15,7] ] depth 1, 2와 같이 레벨로 구하는 것이기 때문에 너비 우선 탐색 (BFS, Breadth First Search) 와 같은 개념으로 풀 수 있습니다. [필수 개념]1. 너비 우선 탐색(BFS) 깊이 우선 탐색(DFS)과..
import java.util.*; /** * 이진트리 * input 1 null 2 3 * output 1 3 2 * inorder left self right * preorder self left right * postorder left right self */public class Test { List ret; public static void main(String[] args) { TreeNode root = new TreeNode(1); TreeNode t1 = new TreeNode(2); TreeNode t2 = new TreeNode(3); root.right = t1; t1.left = t2; Test test = new Test(); for(Integer i : test.inorderT..
[Effective Java 규칙15] 변경 가능성을 최소하하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 자바 플랫폼에는 String, 기본 자료형 클래스, BigInteger, BigDecimal과 같은 변경 불가능(immutable) 클래스가 많다. 변경 불가능 클래스는 변경 가능 클래스보다 설계하기 쉽고, 구현하기 쉽고, 사용하기 쉽다. 오류 가능성도 적으며 더 안전하다.아래 다섯가지 규칙을 따르면 변경 불가능한 클래스를 만들 수 있다.1. 객체 상태를 변경하는 메서드를 제공하지 않는다.2. 상속할 수 없도록 한다.3. 모든 필드를 final로 선언한다. 이렇게하면 자바 메모리 모델에 명시된 바와 같이 새로 생성된 객체에 대한 참조가 동기..
[Effective Java 규칙13] 클래스와 멤버의 접근 권한은 최소화하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 잘 설계된 모듈은 구현 세부사항을 전부 API 뒤쪽에 감춘다. 모듈들은 API를 통해서만 서로 통신하며, 각자 내부적으로 어떻게 동작하는지 신경 쓰지 않는다.이러한 개념은 정보 은닉/캡슐화라고 알려져 있는 소프트웨어 설계의 기본적인 원칙 가운데 중 하나이다. 캡슐화가 시스템을 구성하는 모듈 사이의 의존성을 낮춰서, 각자 개별적으로 개발하고, 테스트하고, 변경할 수 있게 한다. 그러면 각각의 모듈을 병렬적으로 개발하여 시스템 개발 속도가 올라가게 되고, 유지보수도 쉽게할 수 있다. 정보 은닉 원칙이 좋은 성능을 보장하지는 않지만..
[Effective Java 규칙12] Comparable 구현을 고려하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. Comparable 인터페이스에 포함된 유일한 메서드이고, 이를 구현한 클래스는 순서를 가지게 된다. 또한 검색하거나 최대/최소치를 계산하기도 간단하고, 그 컬렉션을 정렬된 상태로 유지하기도 쉽다. 그리고 다양한 제네릭 알고리즘 및 Comparable 인터페이스를 이용하도록 작성된 컬렉션 구현체와도 전부 연동할 수 있다.만능?? 자바 플랫폼 라이브러리에 포함된 거의 모든 값 클래스는 Comparable 인터페이스를 구현한다. 알파벳 순서나 값의 크기, 시간적 선후관계처럼 명확한 순서를 따르는 값 클래스를 구현할 때는 Compara..
[Effective Java 규칙11] clone을 재정의할 때는 신중하라Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다. 어떤 클래스가 Cloneable 인터페이스를 구현하면 Object의 protected 인 clone 메서드가 어떻게 동작할지를 정하게된다.먼저 clone 메서드의 규약은 느슨한 편인데 아래 규약을 살펴보자 객체의 필드단위까지 복사하여 반환하는데 다음의 조건이 일반적으로 충족되야 한다x.clone() != x 이 조건은 참이어야 한다x.clone().getClass() == x.getClass() 이 조건은 참이겠지만 반드시 그래야하는 것은 아니다x.clone().equals(x) 이 조건도 참이겠지만 반드시 그래야하는 것은 아니다..