본문 바로가기

Programming/JAVA27

[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.
[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.
[java] Java 에서 Stream 사용하기 오늘은 Stream 을 사용하는 방법에 대해 쭉 정리를 해보고자 한다. Stream 생성하기 stream 은 두가지 방법으로 생성이 가능하다. Collection 으로 생성하기 // Collection(List) 로부터 스트림 생성 List collection = Arrays.asList("a", "b", "c", "e", "f"); Stream collectionStream = collection.stream(); Array로 생성하기 // 배열로부터 스트림을 생성 Stream arrayStream1 = Stream.of("a", "b", "c"); //가변인자 Stream arrayStream2 = Stream.of(new String[]{"a", "b", "c"}); Stream arrayStrea.. 2021. 11. 10.
[java] 함수형 인터페이스 예쩐에 포스팅에서 람다식에 대한 포스팅을 했었다. https://devkingdom.tistory.com/272?category=941391 [Java] 람다식 (Lambda Expression) 오늘은 람다식에 대해 간단하게 정리해두려고 한다. 람다식은 Java 8 부터 지원하는 객체지향 프로그래밍과는 다른 함수형 프로그래밍 방식이다. 람다식은 익명객체를 더 간단하게 줄여서 사용 devkingdom.tistory.com 위의 방식을 통해 람다식 표현이 가능하나, 기본적으로 java 같은 경우는 객체지향이라 순수함수와 일반함수를 다르게 보고 있다. 그러므로 이를 구분하기 위한 방법이 바로 함수형 인터페이스 이다. Java 에서는 기본적으로 4가지의 함수형 인터페이스를 제공한다. 1. Supplier Su.. 2021. 11. 4.
[Java] Generic 이해 하기 - Generic이란 하이.. 언어공부를 하다보면 한번쯤은 이 Generic에 의문을 가지는데, 오늘 한번 큰 마음 먹고 정리를 해보려고한다. 우리는 다양한 방식으로 Generic을 활용해 오고 있었다. 아래 예제 코드를 보자. List lists = new ArrayList(); HashMap map = new HashMap(); 우리는 개발할 때 괄호안에 들어가는 타입을 따로 정해준다. 만약에 저 리스트나 맵이 별도의 타입을 지원해주는 용도로 각각 만들어져 있다고 생각해보자. 그건 정말 비효율적인 내용이 되지 않을까 생각한다. ArrayList를 까보면 아래의 그림처럼 되어있는데, 괄호 안에 E 가 있다. E는 보통 Element를 의미한다. 이처럼 제네릭에서는 다양한 타입들을 약속해놓고 사용하는데 그 내용은 아래와 같다.. 2021. 10. 25.