전체 글
  • 들어가기전 아이템 19를 공부하기 전, 아이템 18 포스팅을 먼저 읽어보자. https://devfunny.tistory.com/544 [교재 EffectiveJava] 아이템 18. 상속보다는 컴포지션을 사용하라 상속 상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아니다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게된다. 안전한 상속 상위 클래스와 하위 클래스를 모두 같은 프로 devfunny.tistory.com 상속을 고려한 설계와 문서화 우선, 메서드를 재정의하면 어떤 일이 일어나는지를 정확히 정리하여 문서로 남겨야한다. 즉, 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야한다. 1) 클래스의 API 로 공개된 메서드에서 클래스 자신이 또다..

    Read more
  • 문제 https://leetcode.com/problems/longest-substring-without-repeating-characters Longest Substring Without Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이코드 import java.util.*; /** * https://leetcode.com/problems/longest-substring-without-repeating-characte..

    Read more
  • 문제 https://leetcode.com/problems/add-two-numbers/ Add Two Numbers - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이코드 package Medium; /** * https://leetcode.com/problems/add-two-numbers/ */ public class M001_addTwoNumbers_SUCCESS { ListNode resultNode = new ListNode(); public st..

    Read more
  • Todo. 가장 긴 문자열 추출하기 1. Stream 사용 public class ReduceTest { public static void main(String[] args) { String values[] = {"Hello", "World", "!"}; /* 가장 긴 length 문자열 추출 */ String reduce = Arrays.stream(values).reduce("", (s1, s2) -> { if (s1.getBytes().length >= s2.getBytes().length) { return s1; } else { return s2; } }); } } 2. Lamda 사용 class CompareString implements BinaryOperator { @Override publ..

    Read more
  • 상속 상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아니다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게된다. 안전한 상속 상위 클래스와 하위 클래스를 모두 같은 프로그래머가 통제하는 패키지 안에서의 상속일 경우 확장할 목적으로 설계되었고, 문서화도 잘 된 클래스의 경우 위험한 상속 구체 클래스를 패키지 경계를 넘어, 다른 패키지의 구체 클래스를 상속하는 경우 해당 아이템은 '위험한 상속'에 속하는 경우를 말하며, 클래스-인터페이스 사이의 구현 및 확장하는 인터페이스 상속과는 무관하다. 상속의 캡슐화 저하 상속은 캡슐화를 깨뜨린다. 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있다. 확장이 충분히 고려되지않은 상속에서는 상위 클래스의 수정에 따라 하위 클..

    Read more
  • 불변 클래스 불변 클래스란, 그 인스턴스의 내부 값을 수정할 수 없는 클래스이다. 불변 인스턴스에 간직된 정보는 고정되어 절대 달라지지 않는다. 자바 플랫폼 라이브러리에서 불변 클래스로 예를 든다면, String, 기본 타입의 박싱된 클래스들, BigInteger, BigDecimal 등이 존재한다. 불변 클래스를 설계한 이유는 상태가 바뀌지 않는 특성 덕분에, 가변 클래스보다 설계 및 구현과 사용이 쉽고 오류가 생길 여지가 적고 훨씬 안전하기 때문이다. 불변 클래스로 만들기 1) 객체의 상태를 변경하는 메서드 (setter) 를 제공하지 않는다. 2) 클래스를 확장할 수 없도록 한다. 예를 들면 클래스를 final 로 선언하여 상속을 막아서 하위 클래스에서 변경할 수 없도록 한다. 3) 모든 필드를 f..

    Read more
  • public 클래스의 public 필드의 사용(하지마라) public class Point { public double x; public double y; public static void main(String[] args) { Point point = new Point(); // 외부 클래스에서 아래와같이 직접 접근 가능 point.x = 10; point.y = 20; System.out.println(point.x); System.out.println(point.y); } } 위 예제의 public 필드는 아주 위험하다. 이런 클래스는 데이터 필드에 직접 접근이 가능하게되면서, API를 수정하지 않고는 내부 표현을 바꿀 수 없고, 불변식을 보장할 수 없고, 외부에서 필드에 접근할때 부수 작업을 수행..

    Read more
  • 길이가 0 이상일 경우 변경 가능한 public static final array public class ArrayTest { public static final int[] VALUES = {1, 2, 3, 4}; } 값을 변경해보자 public class Main { public static void main(String[] args) { System.out.println(ArrayTest.VALUES[0]); // 1 ArrayTest.VALUES[0] = 5; /* 변경이 된다 */ System.out.println(ArrayTest.VALUES[0]); // 5 } } 해결방안 1 import java.util.Arrays; import java.util.Collections; import jav..

    Read more
  • 정보은닉 컴포넌트를 설계를 잘하기 위해서는 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 잘 숨겨야한다. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 오직 API 를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작에는 전혀 개의치 않는다. 이것을 정보은닉 또는 캡슐화라고 한다. 정보은닉의 장점 1. 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있다. 인터페이스를 개발하면 이에 맞춰서 개발하고, 구현하면된다. 인터페이스를 사용하는 쪽과 지원하는 쪽이 동시에 개발이 가능하다. 2. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있다. 다른 컴포넌트로 교체하는 부담도 적다. 인터페이스 기준으로 캡슐화가 잘 ..

    Read more
  • 이전 포스팅 (docker-compose 사용하지 않은 경우) https://devfunny.tistory.com/440 docker 에 rabbitMQ 설치하기 1) rqbbitmq 이미지 설치 docker pull rabbitmq:3-management 2) rabbitmq 컨테이너 실행 docker run -d -p 15672:15672 -p 5672:5672 --name msa-rabbitmq rabbitmq:3-management 3) 접속 확인 localhost:15672 I.. devfunny.tistory.com docker-compose 파일 생성 docker-compose.yml version: '3' services: rabbitmq: image: 'rabbitmq:3-manageme..

    Read more
  • Function keyExtractor 선언 public class Test { private final Function keyExtractor; public Test(Function keyExtractor) { this.keyExtractor = keyExtractor; } ... } 호출 Test test = new Test(TestDto::getName) 람다식 전달 (TestDto::getName) 사용코드 public void testMethod(TestDto testDto) { /* 해당 item 으로 추출하겠다 */ String key = keyExtractor.apply(testDto); } name 을 key 값으로 추출될 것이다.

    Read more
  • 문제 https://www.acmicpc.net/problem/16198 16198번: 에너지 모으기 N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다. i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있 www.acmicpc.net 풀이코드(실패) package seohae.algorithm.level2; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * https://www.acmicpc.net/problem/15658 */ public class Problem_01..

    Read more
  • lombok DTO, Entity, Form 등 사용시에 필수가 된 lombok의 어노테이션을 선언함으로써 생성되는 코드들을 자세하게 알아보자. build.gradle 의존성 추가 compileOnly 'org.projectlombok:lombok:1.18.22' annotationProcessor 'org.projectlombok:lombok:1.18.22' testCompileOnly 'org.projectlombok:lombok:1.18.22' testAnnotationProcessor 'org.projectlombok:lombok:1.18.22' TestDto.java 파일 public class TestDto { @NonNull private String name; private String e..

    Read more
  • SpringBatch DB 개인 공부 프로젝트용으로 springBoot의 내장되어있는 h2 DB를 사용하면 편하겠지만, 스프링 배치 프로젝트 특성상 데이터가 영구적으로 쌓일 수 있는 Oracle, Mysql 등을 사용해야한다. 아래 포스팅을 참고하여 Docker 의 Mysql 을 설치하자. https://devfunny.tistory.com/421

    Read more
  • 문제 https://programmers.co.kr/learn/courses/30/lessons/12936 코딩테스트 연습 - 줄 서는 방법 n명의 사람이 일렬로 줄을 서고 있습니다. n명의 사람들에게는 각각 1번부터 n번까지 번호가 매겨져 있습니다. n명이 사람을 줄을 서는 방법은 여러가지 방법이 있습니다. 예를 들어서 3명의 사람 programmers.co.kr 풀이코드 (메모리초과) package seohae.algorithm.level3; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * https://programmers.co.kr/learn/courses/30/lessons/12936 */ publ..

    Read more
  • Copyright 2024. GRAVITY all rights reserved