Java
-
불변 객체인 String 생성 반복에 대한 기록Java 2025. 3. 4. 00:16
상황 : 코딩 테스트 문제를 Java 언어를 통해 풀다가 문자열을 매번 새로 생성하는 방식이 왜 성능이 좋지 못한지에 대한 의문이 생겼습니다. 메모리 영역과 관련있는 내용임을 파악했고, 머리에서 휘발되기 전에 기록해둡니다!String answer = "0";// 아래 코드를 for문으로 반복answer = i + answer + i; String이 불변 객체? String은 불변(immutable)객체입니다. 여기서 불변 객체라고 함은 변경되지 않는다는 의미가 맞습니다. 그러나 변수의 관점에서 불변을 이해하면 안 되고, 생성된 객체의 관점에서 이해해야 합니다. 변수를 기준으로 보면 String 변수는 언제든 바뀔 수 있는 값입니다. 변수를 통해 String 값을 할당하면, Heap 메모리 영역 Strin..
-
HashSet 의 내부 동작 방식Java 2025. 1. 22. 11:01
HashSet의 내부 동작 방식과 포함된 중복 제거 메커니즘에 대해 서술한 문서입니다.HashSet의 실제 코드를 읽어 보며 분석합니다. 공부하는 과정을 메모해둔 것으로 메서드 등을 찾는 용도로 읽기에는 부적절합니다. HashSet 클래스 코드더보기더보기더보기/* * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU Gene..
-
Java : 각 자료형 간의 변환 정리Java 2025. 1. 20. 00:23
설명 위주보다는 바로 적용할 수 있도록 기록해두는 용도에 가까운 문서입니다. Ctrl + F키 또는 Command+F키를 통해 원하는 메서드를 찾아가시는 걸 추천합니다. 1.문자열(String) 관련 변환 숫자 -> 문자열 : String.valueOf( 숫자 ) int i, long l, float f, double d// 숫자 -> 문자열int num = 123;String strNum = String.valueOf(num); // "123" 문자열 -> 숫자 : Integer.parseInt( 문자열 )// 문자열 -> 숫자String str = "456";int intNum = Integer.parseInt(str); // 456// 그외 long, float, double 도 존재double ..
-
Stream API의 map과 flatMapJava 2025. 1. 13. 09:03
Stream API의 map과 flatMap을 각각 설명한 후, 활용 사례에 대한 예시 코드를 첨부합니다. 그 후 map과 flatMap의 차이점을 표로 정리한 문서입니다. map역할 : 입력 스트림의 각 요소를 다른 객체로 매핑한다.입출력 : 하나의 입력 요소당 하나의 출력 요소가 있다.사용하는 곳 : 단순 변환 작업에 사용된다.map의 시각화 : https://youtu.be/pYev_wpi0QM?si=xFDDWV_X_PXkHuLE 예시1 : names 리스트의 요소들의 문자열 길이 계산더보기List names = Arrays.asList("Winter", "Summer", "Spring");// 길이를 따로 받을 list 선언List nameLengths = names.stream() // 리스트..
-
객체 지향 설계 원칙 SOLID, SRP와 OCPJava 2025. 1. 13. 09:02
SOLID 5대 원칙에 대해 간단한 표로 정리하고, 그중 SRP와 OCP를 구체화하여 작성했습니다. 또한 SRP와 OCP를 위배한 코드와 부합한 코드 예시를 기록한 문서입니다. SOLID 5대 원칙SRP(Single Responsibility Principle) OCP(Open-Closed Principle )LSP(Liskov Substitution Principle )ISP(Interface Segregation Principle )DIP(Dependency Inversion Principle )단일 책임 원칙개방-폐쇄 원칙리스코프 치환 원칙인터페이스 분리 원칙의존 역전 원칙클래스는 하나의 책임만 가져야 한다. or 클래스를 변경해야 하는 이유가 하나 뿐이어야 합니다.클래스는 확장에는 열려있고 수정에..
-
BufferedReader, BufferedWriter 기록Java 2025. 1. 10. 22:13
작성 계기 : 시간복잡도, 메모리 효율성을 따지는 코드를 작성했다.입력이 커지면 기본적인 Scanner나 System.out 방식은 병목이 되므로, BufferedReader와 BufferedWriter를 활용해 입출력 속도를 최적화해야 합니다. BufferedReaderimport 모듈import java.io.IOException;import java.io.InputStreamReader;import java.io.BufferedReader; 사용법public static void main(String[] args) throws IOException { //예외 처리 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));다른..