전체 글383 [Effective Java] 공통 메서드 정리 - equals() & hashCode() 객체라면 가지고 있는 공통의 메서드에 대한 이해와 활용법을 정리해두려고 한다. 오늘은 equals() 와 hashCode() 메서드에 대해 정리해두도록 하겠다. 1. equals equals는 말그대로 객체가 같은지를 비교하는 메서드이다. 일반적으로 객체가 생성될 때 고유한 해쉬코드가 생성되게 된다. 우리는 이 해쉬코드를 hashCode 라는 공통 메서드를 호출해 가져올 수 있다. 일반적으로 정의된 equals 메서드는 내부에서 이 해쉬코드를 비교한다. 하지만 실무에서는 객체의 해시코드만 비교해서는 안될 경우가 종종 있어 equals를 오버라이딩 해서 사용한다. equals를 오버라이딩 해서 사용하기 위해서는 아래 5가지 조건을 만족해야만한다. 1. 반사성 (reflexivity) e.equals(x) .. 2023. 2. 1. [Effective Java] Try-finally 대신 Try-with-Resources로 자원 해제하기 오늘은 실무에서 굉장히 많이 사용하는 Try-with-resources 문법에 대해 정리해두려고 한다. Try-with-resources 는 Java 7 부터 도입된 문법인데 기존의 try-finally 에 비해 장점이 있어 실무에서 많이 사용된다. 먼저 기존에 사용하던 try-finally 방법에 대해 말씀드리겠다. 아래 예시를 보자. public static void main(String args[]) throws IOException { FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream("test.txt"); bis = new BufferedInputStream(fis); int dat.. 2023. 1. 31. [Effective Java] Primitive Type 과 Wrapper Class 자바에는 여러 기본 자료형(Primitive Type) 과 해당 자료형에 대한 Wrapper Class를 제공한다. 우리는 이 Wrapper Class를 이용해 기본형을 객체로 생성해 이용할 수가 있다. 각 기본형에 해당하는 Wrapper Class 와 사용 방법은 아래와 같다. 기본형 Wrapper Class 예시 boolean Boolean Boolean a = new Boolean(true); boolean b = new Boolean("false"); char Character Character a = new Character('a'); byte Byte Byte a = new Byte(3); Byte b = new Byte("100"); short Short Short a = new Short(.. 2023. 1. 30. [Effective Java] Config 파일에 DI (Dependency Injection) 사용하기 요즘 Spring을 활용한 프로젝트를 많은 사람들이 하고, 실무에서도 많은 프로젝트가 Spring을 이용해서 개발되고 있다. 토이프로젝트를 만들거나 할때는 상관없지만, 실제로 유저에게 제공할 서비스를 만드는 경우라면 여러 환경을 고려해야한다. 개발자의 pc 에서 접근하는 local 영역, 개발 서버인 dev , 테스트 서버인 test, 실제 유저에게 오픈할 live 서버 등 이렇게 많은 환경에서 다른 정보를 제공해야하는 경우가 많다. 아래 특정 프로젝트의 Config 파일을 보자. @Configuration public class ToyPJTConfig { private static final String apiUrl = "https://~~~~~"; ... } api 서버 url 을 이런식으로 상수화 .. 2023. 1. 28. [Effective Java] 인스턴스 생성을 막기 위해 private 생성자를 이용하자 코드를 작성하다 보면 특정한 기능을 손쉽게 사용하기 위해 특정한 헬퍼 클래스나 유틸리티 클래스를 만드는 경우가 있다. (객체지향적인 관점에서 봤을때 권장하는 방법은 아니나 굉장히 많은 회사에서 이렇게 사용한다.) 예시로 특정한 정보를 체크하기 위한 기능을 모아놓은 CheckManager 클래스가 있다고 가정하자. public class CheckManager { public static boolean isAdult(int age) { // 나이 체크 } public static boolean isPossibleAmount(int amount) { // 사용 가능 금액 체크 } public static boolean isAvailableUser(User user) { // 유저 정책 체크 } } 위의 코드.. 2023. 1. 28. [Design Pattern] Singleton Pattern 우리는 객체를 하나만 사용하기 위해 Singleton 패턴을 많이 활용한다. Singleton 을 구현하기 위해 몇가지 방법이 있는데 간단하게 말씀드려보겠다. public static member 해당 방법은 인스턴스를 초기화 시킨 뒤 고정시켜 사용하는 방법이다. 사용자는 변수에 직접 접근하여 사용하여야 한다. 이렇게 사용하면 의도하지 않은 객체 생성을 막을 수 있다. public class Member { public static final Member INSTANCE = new Member(); private Member() { } } private static final field 해당 방법은 getInstance라는 메서드를 통해 instance에 접근하는 방법이다. 인스턴스 변수에 직접 접근하는.. 2023. 1. 28. [Effective Java] 생성자 대신 Static Factory Method를 사용하자 아래 내용은 Effective Java를 읽고 내용을 정리한 것입니다 :) 보통 개발자가 클래스의 인스턴스를 얻기 위해서 생성자를 사용한다. 허나 객체지향 개발자라면 Static Factory Mehtod를 이용하여 인스턴스를 얻는 방법도 알아두어야 한다. 아래 Laptop 클래스를 보자. public class Laptop { private String model; private String company; public Laptop(String model, String company) { this.model = model; this.company = company; } } public 생성자의 아주 간단한 예를 살펴볼 수 있다. 보통 of 나 from 같은 정적 팩토리 메서드를 만들어 아래처럼 대체할 .. 2023. 1. 27. 2022년 개발자 회고 23년이 된지 벌써 20일이나 지나버렸다. 더 늦기전에 작년한해 동안의 경험을 기록해두려한다. 1. 성장의 한해 6년차인 내가 말하기엔 조금 부끄러운 얘기지만 22년은 개발자로서 제대로 성장한 한해였다. 21년말 좋은 기회가 주어져 개발하기 참좋은 회사로 이직을 했었는데 많은 것을 배웠고 보람과 성취를 이룰수 있었다. 1년동안 총 5 개의 프로젝트를 수행했고 개인적으로 만족하는 결과를 만들어 냈다. 진짜 개발자가 되는데 한걸음 더 다가간 것 같아 좋았다. 도움을 주신 많은 분께 감사의 말씀을 전한다. 2. 능동적인 사람 지금 회사에 오기전에 은행 IT 부서에서 근무했었는데 지금 생각해보면 나는 굉장히 수동적인 사람이었다.상사가 시키는 대로 기계처럼 일을 했었다. 하지만 현재 회사에 와서 조금 능동적인 사.. 2023. 1. 21. 추상적인 책임 vs 상세한 책임 앞선 글들에서 객체지향 설계의 품질은 책임을 어떻게 설정하는가에 달려있다고 했다. 객체지향 설계를 하다보면 책임의 레벨을 어떻게 설정해야할지 고민할 때가 올 것이다. 오늘은 어떤 수준의 책임을 만들어내는 것이 적합한지에 대해 이야기 해보고자 한다. 1번 상황 위의 상황을 보자. 이와 같은 경우는 책임에 대한 자율성이 높지만 너무 추상적인 책임이다. 이러한 경우에는 자율성이 높은 만큼 잘못된 의도대로 책임이 수행되지 않을 수 있다. 2번 상황 위와 같은 경우는 1번과는 다르게 아주 상세한 수준으로 구현이 되었다. 이렇게 하면 정확하게 의도한대로 책임을 수행하긴 하지만 책임에 대한 자율성이 제한된다. 마치 신입직원(?)처럼 팀장에게 의존할 수 밖에 없는 형태이다. 3번 상황 1번 상황에서의 일하라라는 책임은.. 2022. 10. 25. 이전 1 2 3 4 5 6 7 ··· 43 다음