Java
-
[Java] String 덧셈 연산 대신 StringBuilder 또는 StringBuffer 객체를 활용해 성능 개선하기Today I Learned 2023. 10. 23. 23:04
StringBuilder Java 5에서 추가된 문자열 생성이나 연산, 수정을 효율적으로 처리하기 위해 도입된 클래스이다. 자세한 메서드 호출 방법은 StringBuilder.java 내 설명을 참조할 수 있다. String text = new StringBuilder() // StringBuilder 객체에 주어진 문자열을 추가한다. .append("hello") .append("World!") // StringBuilder 객체 내 문자열의 지정한 인덱스에 주어진 문자열을 추가한다. .insert(5, ", ") // StringBuilder 객체 내 문자열의 지정한 인덱스 범위만큼을 주어진 문자열로 대치한다. .replace(0, 1, "H") .replace(7, 12, "world") // St..
-
[Java][JPA] 추상 클래스 개념을 적용해 알림 객체 설계 개선하기Today I Learned 2023. 6. 17. 18:36
로버트 C. 마틴이 언급한 객체지향 설계를 위한 5대 원칙 중 하나로 개방-폐쇄 원칙(Open-closed Principle)이 있다. '소프트웨어의 구성 요소는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다'는 원칙으로, 간단히 이야기하자면 소프트웨어의 특정 모듈의 기능이 추가되어야 할 경우, 기존에 작성한 코드를 가급적 변경하지 않으면서 기능을 추가할 수 있어야 한다는 것이다. 기존 프로젝트의 알림 구조 프로젝트 애플리케이션에는 '알림'과 관련된 기능들과 Entity들이 존재했다. 특정 기능들을 수행했을 때 (이를테면 어떤 경기에 참가신청했다던가, 참가신청이 작성자에 의해 수락되었다던가와 같은 것들) 그와 관련된 정보를 담은 Notice 객체를 생성해 저장하는 부가적인 기능이었다. 본래 알림 기능을..
-
Java에서 interface와 구현체 class들을 이용해 소스코드의 중복 제거하기Today I Learned 2023. 5. 12. 03:46
... 구체적으로는 내가 구상한 방식을 따를 때 코드의 중복을 최소화할 수 있는 방안을 마련할 수 있어야 했는데 이를 고려할 시간이 부족했고, 결국 코드의 중복이 상당 부분 존재하는 상태로 코어 로직을 구현하게 되었다. (2023년 5월 1주차 주간회고 중) 이 소스코드의 중복이 도저히 눈 뜨고 넘어갈 수준이 아니었다. 마감까지 남은 시간이 굉장히 촉박한 상태에서 코어 로직을 구현한 관계로 구현 과정에서 무거운 기술 부채를 쌓게 되었다. 어떤 문제가 발생했는지 살펴보면서 이를 조금씩 개선해나가는 것을 시도해보자. 상황 살펴보기 특정 강의에 수강신청한 학생들의 수강신청 상태를 정해진 우선순위 기준들을 바탕으로 성공 상태로 변화시키거나, 실패 상태로 변화시키는 프로세스를 구현해야 하는 상황을 가정해보자. 우..
-
Java에서 단일 Key, Value 쌍 사용하기: Map.Entry<K, V>Today I Learned 2023. 1. 20. 01:24
프로그래머스 레벨 3 해시 문제 '베스트앨범'을 풀면서 사용한 Map.Entry Interface에 대해 정리했다. Map.Entry Map 타입의 인터페이스를 구현한 구현체에 대해 entrySet() 메서드를 호출하는 경우, 구현체에 포함되어 있는 [Key, Value] 쌍 전체를 포함하는 Set 컬렉션을 반환받을 수 있다. Map genresAndPlaySums = Map.of( "jazz", 1200, "classic", 5000, "k-pop", 2500, "j-pop", 300 ); Set entries = genresAndPlaySums.entrySet(); cf. docs.oracle.com에 따르면, 이렇게 얻은 Map.Entry들은 해당 Map의 항목에 대한 참조로써 사용될 수 있다고 한..