본문 바로가기

[클린코드] 3장 함수 안녕하세요 남갯입니다 오늘은 클린코드 3장 함수에 대해 포스팅 해보려고 합니다. 프로그래밍의 초창기에는 루틴과 서브루틴으로 나누었다고 한다. 루틴은 한 함수를 동작하는것이고 서브루틴은 그 루틴에서 또 다른 루틴을 실행시킨것을 말한다. 이런 함수를 작성하면서 의도를 분명하게 표현하지 않으면 내용의 정보를 파악하기 어렵다. 어떻게 처음읽는 사람이 직관적으로 파악하게 만들 수 있을까? 작게만들어라함수를 만드는 규칙은 작고 더 작게 만드는것이다. 저자는 20~ 3000천줄의 코드를 작성해본 결과 작은함수가 좋다고 말한다.그렇다면 얼마나 짧은것이 좋다는 것일까?함수의 길이는 최대한(4줄이하) 적게 만들어라. // 함수를 작게 만들어라 public static String renderPageWithSetupsAnd..
[Effective Java] 아이템 20. 추상클래스보다는 인터페이스를 우선하라. 안녕하세요 남갯입니다. 오늘은 이펙티브자바 item 20에 대해 포스팅 해보려고 합니다. 아이템 20. 추상 클래스보다는 인터페이스를 우선하라. 인터페이스와 추상클래스는 자바 8부터 default 키워드를 통해 default 메소드를 제공 할 수 있게 되어서 거의 비슷합니다. 둘의 가장 차이를 알아봅시다. - 추상클래스(Abstract)추상클래스가 정의한 타입을 구현하는 클래스는 추상클래스의 하위 타입이 되어야한다. 새로운 타입을 정의할때 제약을 안게 되는셈이고, - 인터페이스(implements)인터페이스가 선언한 메서드를 모두 정의하고 일반적 규약을 잘 치킨 클래스면 어떤 클래스를 상속해도 같은 타입으로 이용된다.인터페이스는 기존 클래스에도 손 쉽게 인터페이스를 구현할 수 있다. implements ..
[클린코드] 2장 의미 있는 이름 안녕하세요 남갯입니다 오늘은 클린코드 2장 의미있는이름 에 대해 포스팅 해보려고 합니다. 2장 의미있는이름 - 의도를 분명히 밝혀라의도가 분명하게 이름을 지으라고 말하기는 쉽다. 이 책에서는 의도가 분명한 이름이 중요하다고 강조하고 또 강조한다. 좋은 이름을 지으려면 시간이 걸리지만 그렇게 지어놓으면 후에 유지보수에서 시간을 절약할 수 있다. 그래서 우리는 이름을 주의깊게 살펴서 더 나은이름으로 개선해야한다. 그리고 그걸 읽는 나와 다른사람들도 행복해질 수 있다. 변수나 함수 클래스의 이름은 변수(함수 or 클래스) 의 존재이유? 수행기능? 사용방법? 에 따로 주석이 필요하다면 의도를 분명하게 드러내지 못했다는 말이다. 예들들어 val d = 0; // 경과시간 이름 d는 아무 의미도 드러나지 않는다. ..
[Effective Java] 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. 안녕하세요 남갯입니다. 오늘은 이펙티브 자바 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. 를 포스팅 해보려고 합니다. 이 책에서는 상속을 염두하지 않았다면 상속하지 말라고 한다. 그렇다면 상속을 고려한 설계와 문서화란 무슨말일까?상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야한다.final이 아닌 모든 메서드들이 어떤 순서로 호출하고 어떤 결과과 이어지는 처리에 어떤 영향을 주는지에 대한 정보를 담아야한다.예를들어 AbstractCollection 에서 remove 메소드를 재정의 하지 않았다면 UnsupportOperationExeption을 던진다. 상황에 따라 protected 메소드를 통해 필드나 메소드를 공개 해야할 ..
[클린코드] 1장 깨끗한코드 안녕하세요 남갯입니다. 오늘은 클린코드를 읽고 정리한 내용을 적어보려고 합니다. 우리는 코드를 더 좋은 품질의 코드를 짜기위해 항상 고민하고 있다. 이 책의 저자는 말한다. 이 책을 읽는 이유의 두가지는1. 프로그래머라서,2. 더 나은 코드를 짜기 위해 나도 매번 내 코드를 보면서 반성하고 더 나은 코드를 짜기위해 노력한다. 이번 클린코드 스터디를 통해 더 나은 프로그래머가 되었으면 한다. 1장을 시작해 보겠습니다. 1장. 깨끗한코드 - 코드는 존재하리라.코드는 사라지지 않을것이다. 왜냐하면 코드는 요구사항을 상세히 표현 하는 수단이기 때문이다. - 나쁜코드우리는 오랫동안 나쁜코드에 시달려왔기 때문에 좋은코드가 중요하다는 사실을 안다.출시에 바빠 코드를 마구 짠 회사의 제품은 출시주기가 증가하고 버그도 ..
[Effective Java] 아이템 18. 상속보다는 컴포지션을 이용하라 안녕하세요 남갯입니다. 오늘은 이펙티브 자바 아이템 18. 상속보다는 컴포지션을 이용하라 에 대해 포스팅하려고 합니다. 상속은 코드를 재사용하는 강력한 수단이지만 항상 최선은 아니고 잘못사용하면 오류를 내기 쉽다. 여기서 말하는 상속은 구현상속을 말한다.(클래스가 다른 클래스를 상속하는 행위만을 말한다)메서드 호출과 달리 상속은 캡슐화를 깨트린다. 자식클래스는 부모클래스에 의존하기 때문에 부모클래스의 동작을 변경함에 따라 하위클래스가 오동작을 할 수 있다. 이렇게 상위클래스 설계자가 확장을 충분히 고려하고 문서화를 안하면 변경하지 않은 하위 클래스도 변경해야 한다. HashSet을 사용하는 프로그램이 있고 이 성능을 올리기위해 변경된 코드를 만들었다. public class InstrumentedHash..
[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()));타입을 명시해야 코드가..