본문 바로가기

분류 전체보기

[클린코드] 1장 깨끗한코드 안녕하세요 남갯입니다. 오늘은 클린코드를 읽고 정리한 내용을 적어보려고 합니다. 우리는 코드를 더 좋은 품질의 코드를 짜기위해 항상 고민하고 있다. 이 책의 저자는 말한다. 이 책을 읽는 이유의 두가지는1. 프로그래머라서,2. 더 나은 코드를 짜기 위해 나도 매번 내 코드를 보면서 반성하고 더 나은 코드를 짜기위해 노력한다. 이번 클린코드 스터디를 통해 더 나은 프로그래머가 되었으면 한다. 1장을 시작해 보겠습니다. 1장. 깨끗한코드 - 코드는 존재하리라.코드는 사라지지 않을것이다. 왜냐하면 코드는 요구사항을 상세히 표현 하는 수단이기 때문이다. - 나쁜코드우리는 오랫동안 나쁜코드에 시달려왔기 때문에 좋은코드가 중요하다는 사실을 안다.출시에 바빠 코드를 마구 짠 회사의 제품은 출시주기가 증가하고 버그도 ..
[Effective Java] 아이템 18. 상속보다는 컴포지션을 이용하라 안녕하세요 남갯입니다. 오늘은 이펙티브 자바 아이템 18. 상속보다는 컴포지션을 이용하라 에 대해 포스팅하려고 합니다. 상속은 코드를 재사용하는 강력한 수단이지만 항상 최선은 아니고 잘못사용하면 오류를 내기 쉽다. 여기서 말하는 상속은 구현상속을 말한다.(클래스가 다른 클래스를 상속하는 행위만을 말한다)메서드 호출과 달리 상속은 캡슐화를 깨트린다. 자식클래스는 부모클래스에 의존하기 때문에 부모클래스의 동작을 변경함에 따라 하위클래스가 오동작을 할 수 있다. 이렇게 상위클래스 설계자가 확장을 충분히 고려하고 문서화를 안하면 변경하지 않은 하위 클래스도 변경해야 한다. HashSet을 사용하는 프로그램이 있고 이 성능을 올리기위해 변경된 코드를 만들었다. public class InstrumentedHash..
[안드로이드] getContext와 requireContext 차이 안녕하세요 남갯입니다 오늘은 getContext와 requireContext의 차이에 대해 포스팅 해보려고 합니다. 참고링크 : https://medium.com/@shafran/fragment-getcontext-vs-requirecontext-ffc9157d6bbe getContext & requireContext 의 차이 @Nullable public Context getContext() { return mHost == null ? null : mHost.getContext(); } @NonNull public final Context requireContext() { Context context = getContext(); if (context == null) { throw new IllegalS..
[Effective Java] 아이템 43. 람다보다는 메소드 참조를 이용하라. 안녕하세요 남갯입니다 오늘은 item43. 람다보다는 메소드 참조를 이용하라. 에 대해 포스팅 해보려고 합니다. 메소드 참조를 이용하라. 람다가 익명클래스보다 나은점은 간결함이다. 람다보다도 더 간결하게 만드는 방법이 있는데, 그것이 바로 메소드 참조이다. //java 8 map안에 추가된 merge //before map.merge(key, 1, (count, incr) -> count + incr); //after map.merge(key, 1, Integer::sum); 키와 값 함수를 인수로 받으면서 {키,값} 쌍을 저장한다. 하지만 이런 코드도 거추장 스러운 부분이 남아있다. count와 incr이 하는일이 없이 공간을 많이 차지한다. Java 8부터는 Integer 클래스는 람다와 기능이 같은..
[Effective Java] 아이템 42. 익명클래스 보다는 람다를 사용하라. 안녕하세요 남갯입니다. 오늘은 아이템 42. 익명클래스 보다는 람다를 사용하라 를 작성해보려고 합니다. Collections.sort(words, new Comparator() { @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length()); } }); 위와 같이 익명클래스를 이용해서 생성하게 되면 코드가 너무길고, 함수형 프로그래밍에 적합하지 않았지만 람다를 이용해 불필요한 코드가 사라지고 동작을 명확하게 이해 가능하다. Collections.sort(words, (o1, o2) -> Integer.compare(o1.length(), o2.length()));타입을 명시해야 코드가..
[Effective Java] 아이템 7. 다 쓴 객체 참조를 해제하라. 안녕하세요 남갯입니다 오늘은 아이템 7. 다 쓴 객체 참조를 해제하라.에 대해 작성해보려고 합니다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Object[] getElements() { return elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptySta..
[Effective Java] 아이템 6. 불필요한 객체 생성을 피하라. 안녕하세요 남갯입니다 오늘은 이펙티브 자바 item 6에 대해 포스팅 해보려고 합니다. 아이템 6. 불필요한 객체 생성을 피하라. String 관련 글에서도 작성했었지만 아래와같이String s = new String("bikini"); 이렇게 생성할 경우 매번 힙영역에 올라가게 됩니다. 아래의 글을 참조해주세요 2019/12/08 - [IT/Java언어] - [Java] String, StringBuilder, StringBuffer 란? String s = "bikini" 를 통해 생성해서 상수풀에 올라가게 되므로 모든 코드가 똑같은 객체를 재사용함을 보장한다. Boolean(String) // deprecate in java9 생성자 대신 Boolean.valueOf(String) 팩터리 메서드를 ..
[코틀린] 코틀린 제너릭 안녕하세요 남갯입니다. 오늘은 저번에 정리한 변성에 대해 이해가 부족한것 같아 코틀린 인 액션의 제너릭에 대해서 정리해보고 블로깅을 해보려고합니다, 제너릭스 타입 소거로 인해 실행시점에서 제너릭의 클래스의 인스턴스의 타입인자 정보가 들어가 있지 않다.JAVA의 JVM 제너릭스는 타입소거를 이용해서 구현된다. 이는 실행시점에 제너릭 클래스의 인스턴스의 타입 인자 정보가 들어있지 않다.컴파일러는 List와 List을 서로 다른타입이라 인식하지만 실행시점에서의 둘은 완전히 같은 타입의 객체이다.따라서 문자열로 이루어진 List이 어떤 타입을 가진 리스트인지 실행시점에는 검사할 수 없음. 따라서 if(value is List)을 실행시점에는 알 수 없음. List인지의 여부는 확실하게 알수있지만 타입을 알 수없..