Language89 이펙티브 자바 - 종료자 사용을 피하라 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 종료자 Java 의 종료자(finalize)는 예측 불가능하며 대체로 위험하고 일반적인 상황에서는 불필요 하다. C++ 소멸자의 경우 메모리 반환과 자원반환의 일반적인 수단이지만, Java 의 경우 GC가 메모리를 정리해주고 자원반환과 같은 경우에도 try-finally 구문을 사용하기 때문에 정말 특수한 상황이 아니면 종료자를 사용할 필요가 없다. - 종료자의 단점 종료자의 첫번째 단점은 예측이 되지 않는다는것이다. 즉시 실행이 보장되지 않는데 모든 참조가 사라지고 난 후 종료자가 실행되기까지에는 어느정도 간격이 존재한다. 그래서 특히 time-critical 한 작업에는 절대로 종료자는 사용하면 안된다. 만약 file close .. 2021. 9. 22. 이펙티브 자바 - 유효기간이 지난 객체 참조 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - Java 의 GC C, C++ 처럼 메모리 관리를 손수 하다가 Java 를 처음 사용해보면 편리함을 느끼게 된다. 메모리 관리를 손수하지 않아도 GC 가 알아서 해주기 때문이다. 그렇다며 메모리 관리는 전혀 신경쓰지 않아도 되는거 아닌가 라고 착각하게 될 수 있는데 이는 잘못된 생각이다. - 유효기간이 지난 객체 참조 자료구조를 젤 처음 접할 때 보통은 Queue 나 Stack 을 구현하게 된다. Stack 의 경우 배열을 선언해놓고 push, pop 연산시 index 를 증감시킨다. public class SimpleStack { private Object[] elements; private static final int DEFAU.. 2021. 9. 19. 이펙티브 자바 - 불필요한 객체 생성 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 불필요한 객체 생성 기능이 동일한 객체가 있다면 새로 생성하지 않고 재사용을 하는 편이 좋다. 특히 변경 불가능한 immutable 객체의 경우 값을 변경하지 않기 때문에 언제나 재사용이 가능하다. String test1 = "test1"; String test2 = "test1"; String test3 = new String("test1"); String test4 = new String("test1"); 위의 코드에서 모두 같은 test1 이라는 문자열을 생성하지만 test1 과 test2 는 리터럴 형식으로, test3 과 test4 는 new 를 이용해서 String 객체를 생성했다. test1 과 test2 는 JVM 내에.. 2021. 9. 18. 이펙티브 자바 - 싱글턴 패턴 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 싱글턴 싱글턴은 객체를 하나만 만들 수 있는 클래스이다. 1.5 이전 버전의 JDK 에서는 2 가지 방법으로 싱글턴을 구현할 수 있다. 하나는 정적 멤버를 선언하는 것이고 다른 하나는 정적 팩토리 메소드를 이용하는 것이다. 이 방법으로 어떻게 싱글턴을 구현할 수 있는지 살펴보자. 2 가지 방법은 구현방법이 다르지만 공통점이 있는데 생성자가 private 여야 한다는 것이다. 생성자를 private 로 써야한다니 뭔가 있어 보이지만 생각해보면 객체가 하나만 존재하려면 자기자신 외에 생성자를 호출하면 안되므로 당연한것이다. - 정적 멤버 첫번째 방법은 정적 멤버 final (static final) 멤버를 초기화하고 이를 외부에 공개하는.. 2021. 9. 18. 이펙티브 자바 - Builder 패턴 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - Builder 패턴 정적 팩토리 메소드나 생성자는 선택적 인자가 많을 때 사용하기가 난감하다. 빌더 패턴은 이런 문제를 해결하기 위해 사용하는 패턴인데 예를 통해서 알아보도록 하자. - 점층적 생성자 패턴 만약 성분표에 필수 항목으로 총 제공량, 1회 제공량이 있고, 선택적 항목에는 칼로리, 지방, 나트륨, 탄수화물이 있다고 가정해보자. 만약 필수적인 항목과 선택적인 항목으로도 생성자를 사용할 수 있게 하려면 생성자를 여러 개 정의 해야 한다. 점층적 생성자 패턴이라고 불리우는 방식을 통해 이 문제를 해결하려고 하면 코드는 아래와 같이 될 것이다. public class NutritionFactsTelescoping { private.. 2021. 9. 16. 이펙티브 자바 - 정적 팩토리 메소드 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 정적 팩토리 메소드 객체를 생성하는 일반적인 방법은 public 생성자를 이용하는것이다. 하지만 정적 팩토리 메소드를 이용할 수도 있다. Boolean 의 valueOf 메소드는 기본 타입의 boolean 을 Boolean 객체 참조로 변환한다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 흔히 정적 팩토리 메소드를 디자인 패턴의 팩토리 메소드와 혼동한다. 디자인 패턴의 팩토리 메소드는 하나의 환경변수나 다른 변수를 (팩토리)만 변경하면 제품군들도 일괄적으로 변경되어 생성되도록 하는 패턴이다. 예를 들어 객체 RadioA1과 .. 2021. 9. 5. [React 공식 Advanced Doc] Forwarding Refs - 이 글은 React 공식 홈페이지 Docs https://facebook.github.io/react-native/ 에 기반하여 작성한 글입니다 - Forwarding Refs Ref forwarding은 component에서 그의 자식들에게 ref를 자동으로 전파하는 기법이다. 일반적인 Component에서 사용할일은 없겠지만 특정 상황에서는 유용하게 사용된다. 특히 재사용가능한 component 라이브러리같은 경우가 그렇다. ref를 사용하는 일반적인 시나리오를 살펴보자. - Forwarding refs to DOM components DOM의 button을 rendering 하는 FancyButton component가 있다고 가정해보자. function FancyButton(props) { r.. 2021. 2. 11. [React 공식 Advanced Doc] Fragment - 이 글은 React 공식 홈페이지 Docs v16.8.3 (https://reactjs.org/docs) 에 기반하여 작성한 글입니다. - Fragments React 에서 1 Component 안에서 복수개의 element들을 반환하는 형태가 일반적이다. 이때 반환하는 element 부분에서 최상위 노드가 1개 여야 하는데, "Fragment"는 여러개의 element 노드를 강제로 같은 DOM 노드로 엮을 필요 없이 1개의 그룹으로 엮어준다. render() { return ( ); } React.Fragment를 선언할 때 줄임문법(일종의 sugar syntax)가 있긴 하지만, 공식 Doc 에서는 일반적인 tool 모두가 지원하지는 않는다고 하는거 보니 쓰기를 권장하지는 않는 것 같다. - M.. 2021. 2. 11. [React 공식 Advanced Doc] Error Boundaries - 이 글은 React 공식 홈페이지 Docs v16.8.3 (https://reactjs.org/docs) 에 기반하여 작성한 글입니다. - Error Boundaries 이전 버전까지는 component 안에서 발생한 Javascript error가 React의 내부상태를 망가뜨리거나, emit, cryptic, errors 에러들의 원인이었다. 이런 에러들은 app 코드에서는 미리알 수 있는 에러들이었지만, React에서는 Component안에서 그 에러들을 다룰 수 있는 방법이 없었고, 복구기능도 없었다. - Introducing Error Boundaries 어떤 특정 UI에서 발생한 JavaScript 에러가 전체 app을 망가뜨려서는 안된다. React를 쓰는 사용자들에게 이런 문제를 해결해.. 2021. 2. 11. [React 공식 Advanced Doc] Code-Splitting - 이 글은 React 공식 홈페이지 Docs v16.8.3 (https://reactjs.org/docs) 에 기반하여 작성한 글입니다. - Bundling 대부분의 React app들은 Webpack 이나 Browserify 같은 tool 을 이용한 bundling된 파일들로 구성되어 있다. 여기서 bundling 이란 import 된 파일들을 1개의 파일로 합치는 프로세스를 말한다. 그리고 이때 생성된 1개의 파일을 "bundle" 이라 한다. 이렇게 "bundle" 이 만들어 지게 되면 webpage 에서 전체 app을 한번에 로딩될 수 있다. import { add } from './math.js'; console.log(add(16, 26)); export function add(a, b) {.. 2021. 2. 11. 이전 1 ··· 3 4 5 6 7 8 9 다음