Study
-
실용주의 프로그래머 43 - 46Study/실용주의 프로그래머 2022. 1. 5. 19:16
43. 가차 없는 테스트 일찍 테스트하고, 자주 테스트하라. 자동으로 테스트하라. 코드를 작성하자마자 테스트를 해야하고, 버그는 빨리 발견될수록 고치는 비용이 적어진다. 모든 테스트가 통과하기 전엔 코딩이 다 된 게 아니다. 테스트를 통과했다는 것은 코드가 완료되었다고 말할 수 있는 확신을 갖게 된다. 프로젝트 범위에서 무엇을, 어떻게, 언제 테스트해야 할지 살펴보아야 한다. 소프트웨어 테스트에는 주로 단위 테스트, 통합 테스트, 유효성 평가와 검증, 자원 고갈과 에러 그리고 복구, 성능 테스트, 사용 편의성 테스트로 유형을 나눈다. 44. 결국은 모두 글쓰기 문서가 애초부터 전체의 일부가 되게 하고, 나중에 집어넣으려고 하지 말라. 문서화의 중요성을 다루고 있다. 내부 문서에는 소스 코드, 주석, 설계..
-
실용주의 프로그래머 22-28Study/실용주의 프로그래머 2021. 12. 8. 15:44
22. 죽은 프로그램은 거짓말을 하지 않는다 일찍 작동을 멈추게 하라 이번 장에서는 문제되는 코드가 계속 동작을 하는 것보다 일찍 종료되는 것이 낫다는 내용을 담고 있다. 대다수의 프로그래머가 성공 케이스와 몇가지 정상 실패 케이스만을 생각하기 때문에 예상치못한 에러를 만날 수 있다. 에러가 발생했을 때는 프로그램은 더이상 유효하지 않다고 보며, 잘못된 코드가 다른 문제를 일으키 전에 빠르게 멈추는 것이 최선이다. (자바 언어와 라이브러리에서는 이 철학을 포용하여 RuntimeException을 던져 시스템을 멈춘다. ) +) 책에서는 이 내용을 "죽은 프로그램이 입히는 피해는 절름발이 프로그램이 끼치는 것보다 훨씬 덜한법이다" 라고 한줄로 정리한다. 23. 단정적 프로그래밍 단정문을 사용해서 불가능한 ..
-
실용주의 프로그래머 15 - 21Study/실용주의 프로그래머 2021. 12. 1. 14:05
15. 조개 놀이 명령어 셸(Shell)의 힘을 사용하라 15장인 조개 놀이는 명령어 셸 에 대한 내용을 다루고 있다. GUI 인터페이스는 사용하기 훨씬 편리하지만, 책에서 나오는 것처럼 설계자의 의도에 다른 제약이 있다. 명령어 프롬프트에서 작업한다면 자신이 원하는 기능을 결합하여 만들어 사용할 수 있으니, 셸을 잘 다루도록 하자. +) 아무리 셸(Shell)이라지만, 장 이름이 조개 놀이라니 번역이 문제인지, 저자의 유머감각인지, 원래 그렇게 부르는데 나만 모르는 건지 잠깐 고민했다. 16. 파워 에디팅 하나의 에디터를 잘 사용하라 에디터 하나를 골라서 완전히 마스터하여 사용해야 한다고 조언한다. 난 안드로이드 개발로 IDE는 안드로이드 스튜디오를 사용하기 때문에 다른 IDE를 사용하더라도 확실히 J..
-
실용주의 프로그래머 1 - 7Study/실용주의 프로그래머 2021. 11. 18. 19:38
고양이가 내 소스코드를 삼켰어요 가장 큰 약점은 약점을 보일 것에 대한 두려움이다. 우리는 자신의 능력에 대해 자부심을 가질 수 있지만, 실수나 무지 같은 단점에 대해서도 정직해져야한다. 첫 장을 읽자마자 눈에 띄었던 두 문장. 신입으로서 일을 하면서 실수를 하는 것이 가장 무섭다. (예를 들면 내가 짠 코드에서 이슈가 생긴다거나....) 그래서 단순히 원인과 상황 설명을 원하시는 것에 나도 모르게 변명을 하고 있는 때가 있다. 변명 대신에 대안을 제시하라 변명을 하는 것은 시간 낭비일 뿐 아무런 해결책이 될 수 없다. 빠른 상황 파악 후 대안을 마련해서 빠르게 해결하려고 해보자! 소프트웨어 엔트로피 깨진 창문 이론. 깨진 창문이 결국 그 건물을 손상시키고 버려지게 만든다는 이론으로, 작은 결함이 손쓸수..
-
[Java] Effective Java 3/E 정리 - 12장 직렬화Study/이펙티브 자바 2021. 8. 16. 20:54
객체 직렬화란 자바가 객체를 바이트 스트림으로 인코딩하고 (직렬화) 그 바이트 스트림으로부터 다시 객체를 재구성하는 (역직렬화) 메커니즘이다. 직렬화된 객체는 다른 VM에 전송하거나 디스크에 저장 후 나중에 역직렬화할 수 있다. 이번 장은 직렬화의 위험과 그 위험을 최소화하는 방법에 대해 알아보자. Item 85. 자바 직렬화의 대안을 찾으라 직렬화는 생각보다 장점보다 위험성이 크다. 특히 역직렬화 과정에서 호출되는 readObject(Serializable 인터페이스 구현시)는 클래스 패스안의 거의 모든 타입 객체를 만들어내고 모든 코드를 수행할 수 있기 때문에 모든 코드가 공격 대상이 될 수 있다. 가젯(gadget) 역직렬화 과정에서 호출되어 잠재적으로 위험한 동작을 하는 메서드를 가젯(gadget..
-
[Java] Effective Java 3/E 정리 - 11장 동시성Study/이펙티브 자바 2021. 8. 11. 19:35
스레드는 여러 활동을 동시에 수행할 수 있게 해준다. 그러나 동시성 프로그래밍은 여러 문제를 고려해야하기 때문에 다루기 힘들다. 이번 장에서는 이러한 동시성 프로그램을 잘 만들 수 있는 조언을 정리해보자. Item78. 공유 중인 가변 데이터는 동기화해 사용하라 동기화는 배타적 실행과 스레드 사이의 안정적인 통신에 사용된다. 언어 명세상 long, double 외의 변수를 읽고 쓰는 동작은 원자적(atomic)이다. 여러 스레드가 같은 변수를 동기화없이 수정하는 중이라도, 항상 어떤 스레드가 정상적으로 저장한 값을 읽어옴을 보장한다. 이를 보고 원자적 데이터를 읽고 쓸 때 동기화를 사용하지 않는다면 위험하다. '수정이 완전히 반영된'값을 얻는 다는 것은 보장하지만, 한 스레드가 저장한 값이 다른 스레드에..
-
[Java] Effective Java 3/E 정리 - 10장 예외Study/이펙티브 자바 2021. 7. 31. 20:29
예외를 제대로 활용하면 가독성, 신뢰성, 유지보수성을 높일 수 있다. 이번 장에서 예외를 효과적으로 활용하는 방법을 알아보자. Item69. 예외는 진짜 예외 상황에만 사용하라 이번 장은 제목 그대로 예외는 오직 예외 상황에서만 사용하라는 것이다. 일상적인 제어 흐름용으로 쓰인다면 가독성과 성능을 떨어뜨리는 뿐만 아니라 제대로 동작하지 않거나, 버그를 숨겨 디버깅을 어렵게 할 수 있다. 이 원칙은 API 설계에도 사용된다. 특정 상태에서만 호출할 수 있는 '상태 의존적' 메서드를 제공하는 클래스는 '상태 검사'메서드도 제공해야 한다. 예를 들면 Iterator 인터페이스의 next가 상태 의존적 메서드, hasNext가 상태 검사 메서드에 속한다. 상태 검사 메서드 대신 빈 옵셔널 혹은 null과 같은 ..
-
[Java] Effective Java 3/E 정리 - 9장 일반적인 프로그래밍 원칙Study/이펙티브 자바 2021. 7. 28. 19:09
이번 장에서는 지역변수, 제어구조, 라이브러리, 데이터 타입, 리플렉션과 네이티브 메서드에 대해서 다룬다. 그리고 추가로 최적화와 명명 규칙에 대해서도 알아보자. 참고로 이번 장은 아이템 제목만 봐도 알 수 있을 정도이기 때문에 핵심 방법과 그 이유에 대해서만 간단하게 설명한다. (절대 과제 기한이 촉박해서 그런게 아니다 😉....) Item57. 지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역범수의 범위를 줄이면서 효과적으로 사용하는 방법은 아래와 같다. 가장 처음 쓰일 때 선언하기 모든 지역변수는 선언과 동시에 초기화한다. while문보다는 반복문을 사용하면 반복 변수의 범위를 제한하기 좋다. 메서드를 작게 유지하고 ..