본문 바로가기

전체 글

(187)
자바 리플렉션 사용법과 3가지 단점 우테코 Lv1. 마지막인 체스 미션을 진행하면서 자바 리플렉션을 사용했었다. 초기 체스판 기물 배치를 하는데 있어 비숍, 룩, 나이트 등 각 기물의 클래스 객체를 통해 인스턴스를 생성하는 과정에서 리플렉션을 얄팍하게 접했다. private Piece createPieceInstance(Class
상속과 조합 : is-a / has-a 우테코 블랙잭 미션에서는 다음 요구사안이 있었다. - 플레이어와 딜러의 중복 코드를 없앤다. 이에 플레이어와 딜러를 참여자라는 추상클래스로 묶었다. 그러나, 페어였던 도도의 피드백에서 is-a 관계 대신 has-a관계로도 생각해보라는 피드백이 왔고, is-a/ has-a관계가 무엇인지, 또 왜 이리도 크루들 사이에서 상속에 대한 이야기가 많은 것인지 궁금해졌다. 상속(is-a) is-a 관계는 [a는 일종의 b이다.]가 성립하는 관계를 말한다. ex) 상위 클래스 : 자동차 하위 클래스 :경찰차, 소방차, 버스 경찰차는 일종의 자동차다. 소방차는 일종의 자동차다. 버스는 일종의 자동차다. => 모두 is-a관계가 성립한다. 상속의 장점 - 코드를 재사용함으로써 중복을 줄인다 - 개발시간 단축 - 확장성이..
[스크랩] 풀링 / 캐싱 https://whiny.tistory.com/17 오브젝트 풀링(Object Pooling)이란? 이번 포스팅에서는 다양한 최적화 기법들 중에서 오브젝트 풀링(Object Pooling)에 관해서 알아보겠습니다. 간단하게 오브젝트 풀링을 설명하자면, 오브젝트의 Pool 즉 웅덩이를 만들어두고, 그 웅덩 whiny.tistory.com https://javacan.tistory.com/entry/48 캐시를 이용한 성능 향상! 객체를 캐싱함으로써 객체 생성과 관련된 성능을 향상시킬 수 있다. 캐싱(Caching) 성능을 향상시키기 위해서 많이 사용되는 방법을 말해보라고 하면 대부분 객체 풀링을 말한다. 특히 데이터베이 javacan.tistory.com
[Python] 2538. 전구와 스위치 / 그리디 목차 1. 문제 2. 핵심 아이디어 3. 코드 4. 배운 점 1. 문제 https://www.acmicpc.net/problem/2138 2138번: 전구와 스위치 N개의 스위치와 N개의 전구가 있다. 각각의 전구는 켜져 있는 상태와 꺼져 있는 상태 중 하나의 상태를 가진다. i(1 < i < N)번 스위치를 누르면 i-1, i, i+1의 세 개의 전구의 상태가 바뀐다. 즉, 꺼져 www.acmicpc.net 2. 핵심 아이디어 https://staticvoidlife.tistory.com/143 [그리디 알고리즘] 전구와 스위치 예제 입력 1 3 000 010 예제 출력 1 3 https://www.acmicpc.net/problem/2138 2138번: 전구와 스위치 N개의 스위치와 N개의 전구가 있..
[스터디] 이펙티브 자바 - item4. 인스턴스화를 막으려거든 private 생성자를 사용하라 보호되어 있는 글입니다.
자바에서 Stack보다 Deque이 권장되는 이유 우테코 Lv1 3번째 미션인 블랙잭을 구현하다가 카드의 자료구조를 정하는데 의견이 갈렸다. 나는 Deque을 주장했고 페어는 Stack을 제안했다 Stack을 사용하자는 페어 의견에 설득이 되었는데 그 이유는 다음과 같다 - 카드 덱의 멘탈모델이 Stack과 유사하다 - 양쪽에 넣고 뺄 수 있는 확장 기능을 가진 Deque은 오용의 위험성이 있다 - 카드 덱 객체는 Stack 이 제공하는 기능만으로 충분하며 그 이상의 확장을 상상하기 힘들다 그러나 Stack을 사용하자 SonarLint에서 경고를 띄웠다. 그것도 Deque을 사용하라고. 왜 그럴까? 이유1. Stack 은 Vector 컬렉션을 상속받아 정의에서 벗어난 오용가능성이 있다. Vector는 자바 버전 1부터 있었던 굉장히 오래된 클래스이기 때..
[좋은 코드, 나쁜 코드] ch1-ch2 ch1 - 코드 품질 코드 작성의 4가지 상위 목표 1. 작동해야 한다. 2. 작동이 멈추면 안된다 3. 변화하는 요구사항에 적응해야 한다 4. 이미 존재하는 기능을 또다시 구현해서는 안된다 코드 품질의 6가지 핵심요소 1. 코드는 읽기 쉬워야 한다. 2. 코드는 예측가능해야 한다. 3. 코드를 오용하기 어렵게 만들라. 4. 코드를 모듈화하라. 5. 코드를 재사용 가능하고 일반화할 수 있게 작성하라 6. 테스트가 용이한 코드를 작성하고 제대로 테스트하라' 서두르지 않으면 더 빠르다 - 고품질 코드는 단기적으로 일정을 지연시키나 중장기적으로는 개발 시간이 단축된다 ch2 - 추상화 계층 - 문제가 매우 복잡해도 하위 문제를 식별하고 올바른 추상화 계층을 만든다면 그 복잡한 문제를 쉽게 다룰 수 있다 - 가..
[객체지향의 사실과 오해] ch5. 책임과 메시지 우리가 학교에서 CPR 교육을 받을 때, 신고를 부탁하는 사람을 정확히 "지정"하라고 교육한다. 그 이유는 단순히 신고를 해달라는 부탁을 한다면, "누군가 신고하겠지"라는 마음으로 책임감이 분산되어 초기 대응이 불가하기 때문이다. 그렇기에 정확한 한 사람을 지정하여 그 사람에게 신고에 대한 책임을 부여하는 것을 장려한다. 객체의 세계도 마찬가지다. 훌륭한 객체지향의 세계는 명확하게 정의된 역할과 책임을 지닌 객체들이 상호 협력하는 세계이다. 자율적인 책임 >설계의 품질을 좌우하는 책임 책임 : 요청을 처리하기 위해 객체가 수행하는 행동 자율적인 객체 : 자신이 맡은 책임을 스스로의 판단에 따라 수행 ex) 앨리스의 일화 : 증언에 대한 what과 how의 요구 두가지 같은 요청이 있다. 1) 증언하라 2..