본문 바로가기

분류 전체보기411

[이펙티브 자바] 아이템 10 : equals는 일반 규약을 지켜 재정의하라 🎯 학습 목표 Equals의 재정의 고려할 규약들 📌 Equals의 재정의 equals를 오버라이딩하는 것은 NPE를 던지거나 원하는 대로 작동하지 않을 가능성이 높다. 재정의를하지 않고 그대로 equals를 사용하게 된다면 인스턴스는 자기 자신만 같다고 표현한다. ✍️ 동일성 vs 동등성 : 동일성은 같은 참조인지 동등성은 같은 값을 가지는지 판단 🤔 언제 하지 말아야 할까? 1️⃣ 각 인스턴스가 본질적으로 고유 값이 아닌 동작을 나타내는 인스턴스는 같은 인스턴스가 애초에 없다. (Ex. Thread) Object의 equals로 충분하다. 2️⃣ 인스턴스의 논리적 동치성을 검사할 일이 없다. 논리적 동치성을 검사할 일이 없다는 것은 단순 동일성을 검사한다는 의미이다. Object의 equals로 충분.. 2023. 1. 31.
[이펙티브 자바] 아이템 7 : 다 쓴 객체 참조를 해제하라 🎯 학습 목표 GC(Garbage Collector)의 동작 메모리를 관리하는 객체 📌 객체 참조를 해제하라! C 계열 개발자가 부러워하는 GC는 개발자가 직접적으로 메모리를 관리하지 않아도 되게 해준다. 하지만 GC가 있다고 절대적으로 메모리 누수가 발생하지 않는 것은 아니다. 책에는 다음과 같은 예시를 제공한다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e).. 2023. 1. 31.
[Python] 백준 1446번 : 지름길 https://www.acmicpc.net/problem/1446 1446번: 지름길 첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이 www.acmicpc.net 💡 문제 풀이 다익스트라 문제이다. 그리디로도 풀 수 있을 것 같다. 다익스트라 알고리즘을 구현할 줄 알고, 알고리즘을 적용할 노드를 어떻게 설정할지 고민해야 한다. 일반적인 문제와 다르게 특정 노드가 주어지지 않아 고속도로의 길이만큼 노드가 주어졌다고 생각해야 한다. ✔️ 느낀 점 오랜만에 다익스트라 문제를 풀어보기 위해서 쉬운 문제로 갔는데 생각보다 쉽게 접근이 되지 않았다. 파이썬.. 2023. 1. 31.
[Python] 프로그래머스 : 게임 맵 최단거리 https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 문제 풀이 가벼운 BFS 문제이다. 최단거리를 따져야 하므로 생각할 것이 많다. 나는 이동할 수 있는 위치에 이동했을 때 최솟값을 넣어주는 방식으로 구현했다. 그리고 상대의 위치는 항상 끝에 있으므로 따로 계산안하고 넘겨주었다. ✔️ 느낀 점 오랜만에 시작한 알고리즘이라서 파이썬 문법에 익숙하지 못하다는게 느껴졌다. 문법에 대한 기억을 되살리는 것이 좋아보이고 새로운 것을 공부하기보단 공부한 것.. 2023. 1. 29.
[토비의 스프링] 테스트 (2장) 2.1 UserDaoTest 다시 보기 2.1.1 테스트의 유용성 UserDao에서 관심을 분리하고 기능을 확장할 때 테스트가 없었다면 불안했을 것이다. 머릿속으로 시뮬레이션을 돌려보는 방법은 100% 확신할 수 없기 때문에 테스트란 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지 확신할 수 있게 해주는 작업이 필요하다. 2.1.2 UserDaoTest의 특징 웹을 통한 DAO 테스트 방법의 문제점 웹 화면을 통한 테스트는 가장 흔히 쓰이는 방법이지만 단점이 너무 많다. 테스트를 위해 사용되는 자원이 많기 때문에 DAO만 테스트하고 싶은데 다른 곳에서 문제가 발생할 수 있다. 작은 단위의 테스트 테스트 수행 과정을 간단히 하고 오류를 쉽게 찾을 수 있게 하기 위해서 작은 단위로 쪼개는 것이 중요하다.. 2023. 1. 16.
[이펙티브 자바] 아이템 6 : 불필요한 객체 생성을 피하라 🎯 학습 목표 Why?? String Constant Pool Wrapper 클래스 📌 불필요한 객체 생성 피하기 불필요한 객체 생성에 대한 이야기는 아이템 1에서 잠깐이나마 엿볼 수 있었다. 인스턴스를 캐싱해 두면 불필요한 객체 생성을 피할 수 있다고 했다. 🤔 왜 피해야 할까? Java를 조금이라도 공부했다면 GC(Gabage Collection)의 존재를 알 것이다. 메모리를 하나하나 관리해야하는 C언어와 다르게 이 GC가 알아서 메모리의 누수를 방지해 주기 때문이다. 하지만 GC이 아무리 좋아져도 무분별한 객체 생성은 성능을 저하시킨다. 즉, 성능 때문에 피해야한다. 👀 언제 그럴까? 책에서 제시하는 예시와 함께 언제 불필요한 객체가 생성되는지 알아보자. 1️⃣ String String s = n.. 2023. 1. 15.