📌 병렬과 동시성의 차이점은 무엇인가? [ 병렬 ] 여러 작업이 실제로 동시에 실행되는 것이다. 컴퓨터 시스템에서는 여러 개의 프로세서나 코어를 사용하여, 여러 작업을 동시에 처리함으로써 성능을 향상하는 것이 일반적이다. 주로 하나의 큰 작업을 여러 부분으로 나누고, 각 부분을 병렬로 처리하여 전체 작업을 가속화하는 데 사용된다. [ 동시성 ] 동시성은 논리적으로 여러 작업이 동시에 진행되는 것처럼 보이도록 하는 것을 의미한다. 시스템이 여러 작업을 번갈아가면서 처리하거나, 각 작업이 병렬로 실행되지 않더라도 동시에 진행되는 것처럼 보이게 하는 기술이다. 병렬은 물리적인 동시성을 강조하며, 동시성은 논리적인 동시성을 강조한다. 병렬은 한번에 많은 `일`을 처리, 동시성은 한 번에 많은 `것`을 처리한다...
분류 전체보기
📌 HashSet의 구현 원칙은 무엇인가? HashSet은 자바의 Set 인터페이스를 구현한 자료 구조로, 중복을 허용하지 않는 요소들의 집합을 저장하는 데 사용한다. [ 해시 함수 사용 ] HashSet은 해시 함수를 사용하여 요소를 저장한다. 해시 함수는 요소의 해시 코드를 계산하는 역할을 한다. HashSet은 각 요소의 해시 코드를 기반으로 내부 배열에서 요소를 저장하고 검색한다. [ 동등성 비교 ] HashSet은 동일한 해시 코드를 가진 요소를 처리하기 위해 동등성 비교(equality comparison)를 수행한다. 동등성 비교는 equals() 메서드를 사용하여 요소 간의 동등성을 확인한다. 동등한 요소는 HashSet 내에서 중복을 허용하지 않기 때문에 저장되지 않는다. [ 해시 충돌 ..
📌 자바 컨테이너란 무엇인가? 자바 컨테이너는 객체를 저장하고 관리하는 클래스이다. 컨테이너는 객체를 추가, 제거, 검색 및 조작하는 기능을 제공하여 데이터 구조를 구성하고 관리하는데 사용된다. 자바에서는 다양한 종류의 컨테이너 클래스를 제공한다. ArrayList 크기가 가변적인 배열로 구현된 리스트 컨테이너이다 요소들을 순차적으로 저장하고 인덱스를 통해 접근할 수 있다 LinkedList 이중 연결 리스트로 구현된 리스트 컨테이너이다 각 요소는 이전 요소와 다음 요소를 가리키는 링크로 연결되어 있다 HashSet 중복을 허용하지 않는 요소들의 모임인 집합 컨테이너이다 해시 함수를 사용하여 요소를 저장하고 검색한다 HashMap 키(Key) - 값(Value) 쌍으로 이루어진 요소들을 저장하는 맵 컨테..
📌 문자열을 반전시키는 가장 좋은 방법은 무엇인가? 문자열을 반전시키는 좋은 방법 두 가지 StringBuilder 또는 StringBuffer 사용 이들 클래스는 가변(mutable)한 문자열을 다루는데 최적화되어 있으므로 문자열을 효율적으로 조작할 수 있다. reverse() 메서드를 사용하여 문자열을 반전시킬 수 있다. String str = "Hello, World!"; StringBuilder reversedStr = new StringBuilder(str).reverse(); System.out.println(reversedStr.toString()) // 출력 : !dlroW, olleH 문자열을 문자 배열로 변환 후 반전 String str = "Hello, World!"; char[] c..
📌 JDK와 JRE의 차이점은 무엇인가? JRE(Java Runtime Environment)는 자바 실행 환경이다. JVM(Java Virtual Machine)뿐만 아니라 Java binaries, Java 클래스 라이브러리 등을 포함하고 있어 자바 프로그램의 실행을 지원한다. 하지만 컴파일러나 디버거등의 도구는 포함하지 않는다. 자바 프로그램을 개발하는 것이 아니라 실행하기만 원한다면 JRE를 설치하면 된다. JDK(Java Development Kit)는 자바 개발 키트이다. JDK는 자바 애플리케이션을 개발하기 위한 환경을 지원한다. JDK는 JRE를 포함할 뿐 아니라 컴파일러(javac), javadoc, jar 등 개발에 유용한 도구를 포함하고 있다. 따라서 자바 프로그램을 개발하기 위해서는..
Spring AOP AOP(Aspect Oriented Programming) AOP는 관점 지향 프로그래밍이라고 불린다. 관점 지향은 객체 지향, 절차 지향 과는 또 다른 패러다임으로 특정 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누고 그 관점을 기준으로 모듈화(어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것) 를 하겠다는 것이다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 흩어진 관심사(Crosscutting Concerns)라 부른다. 위 그림에서 A,B,C의 클래스가 있다. 클래스 A에서는 주황, 파랑, 빨간색 블록으로 구성되어 있고 클래스 B에서는 빨강, ..
[리팩터링 계기] 맡은 프로젝트에서 요청 데이터들은 암호화해서 들어오고, Header에 특정 값을 통해 복호화를 해서 비즈니스 로직을 실행한 다음 다시 암호화를 해서 응답한다. 따라서 암호화된 데이터이기 때문에 컨트롤러에서 @RequestBody를 사용하지 않고 HttpServeltRequest를 파라미터로 전달받아서 진행하는데, 파라미터에 대한 가독성이 떨어지고, 암/복호화에 쓰이는 코드들이 보일러 플레이트화 되어가고 있었다. 따라서 아래의 목표를 달성하기 위한 리팩토링을 진행하였다. 운영 중인 서비스이기 때문에 기존의 코드를 최대한 고치지 않는다. 컨트롤러 메서드에서 HttpServletRequest를 받고 Javadoc으로 파라미터를 작성하는 방법이 아닌 @RequestBody로 받는다. Heade..
[Spring] Spring이란? 개발자들의 봄이 왔다! Spring이란 ? - Spring은 Java 기반의 어플리케이션 프레임워크로, Java EE의 스펙을 구현한 EJB가 복잡하고 성능이 느린것을 탈피하고자 만들어진 오픈 소스 프레임워크이다. - EJ dev-density.tistory.com Spring IoC IoC(Inversion of Control) IoC란 Inversion of Control의 약자로 "제어의 역전"이라는 의미다. 역전이라는 단어는 이해하기 쉬워도 제어라는 단어는 이해하기 어렵다. 따라서 코드와 함께 이해해보자. public class Person{ Calculator calculator = new Calculator(); calculator.add(3,4); calcu..