💻 개발/Java70 동시성 프로그래밍 - 심화 Java의 동시성에 대해서 좀 더 알아보자. | 여러 스레드가 모두 한 CPU의 캐시 메모리를 읽으면? 여러 스레드가 모두 한 CPU의 캐시 메모리를 읽으면 *가시성 문제가 해결될까? 모든 스레드가 동일한 CPU 캐시를 참조한다면 데이터가 항상 동기화 상태를 유지할 것이므로 가시성 문제는 발생하지 않는다. 하지만, 실제 시스템에서는 멀티코어 CPU 환경에서 각 코어가 자신의 L1/L2 캐시를 독립적으로 관리한다.ex. 스레드 A는 CPU1의 캐시에서 작업하고, 스레드 B는 CPU2의 캐시에서 작업하는 경우, 두 캐시간의 데이터 동기화가 이루어지지 않으면 가시성 문제가 발생한다. 이에 대한 해결 방법은 Java에서 volatile 키워드와 같은 동기화 메커니즘을 통해 변수의 변경사항을 즉시 다른 스레드.. 2024. 12. 19. 동시성 프로그래밍 - 기초 Java에서 마주할 수 있는 동시성에 대해서 알아보자. | 동시성 vs 병렬성 동시성과 병렬성은 자주 비교된다. 동시성(Concurrency) : 하나의 CPU가 여러 작업을 빠르게 번갈아 수행함으로써, 사람이 보기에는 여러 작업이 동시에 진행되는 것처럼 보이는 상태이다. 1개의 CPU에서 작업을 나눠 실행하고, 스케줄러가 각 작업의 실행시간을 조율한다. 한 번에 한 작업만 실행되지만, 작업 간의 전환이 매우 빠르게 이루어진다. 병렬성(Parallelism) : 여러 CPU가 각각 독립적으로 여러 작업을 동시에 처리하는 상태이다. CPU N개가 N개의 작업을 동시에 처리한다.멀티 코어 프로세서에서 여러 스레드가 동시에 실행된다. 지난번에, ArrayList와 Vector를 비교할 때, Thread-S.. 2024. 12. 10. JCF와 스레드 - JCF 심화 및 스레드 지난번에 JCF에 대해 간단하게 알아보았다. 이번에는 JCF를 좀 더 자세히 알아보고, 스레드에 대해서도 알아보자. | Map과 Collection JCF의 계층 구조를 보면, JCF에서 Collection과 Map으로 나뉘어진 것을 볼 수 있다. 그리고 다른 자료 구조들은 Collection을 상속하고 있는데, Map만 Collection을 상속 받지 않는 것을 알 수 있다. 왜 그럴까? Java에서 Map이 Collection 인터페이스를 상속 받지 않은 이유는, 두 인터페이스가 서로 다른 데이터 구조와 사용 목적을 표현하기 때문이다. Collection은 요소들의 집합으로, 단일한 요소를 다룬다. (Collection 인터페이스는 요소라는 개념을 전제로 설계 했다.)개별 객체를 추가하거나 삭.. 2024. 12. 5. JCF와 스레드 - JCF 기초 Java를 통해 개발을 하다 보면 반드시 한 번쯤은 사용하게 될 라이브러리가 있다. ArratList, HashSet, ... 등이 있는데, 이들은 JCF라고 부르는 Java에서 제공하는 데이터 구조와 알고리즘의 표준 라이브러리이다. JCF에 대해 자세히 알아보자. | JCF(Java Collection Framework) 란? Java에서 제공하는 데이터 구조와 알고리즘의 표준 라이브러리 데이터 저장, 검색, 정렬, 조작 등의 작업을 효율적으로 수행할 수 있도록 설계된 컬렉션 클래스와 인터페이스의 집합 JCF는 크게 Collection 인터페이스와 Map 인터페이스로 나뉜다. Map 인터페이스 컬렉션들은 2개의 데이터를 묶어 한쌍으로 다루기 때문에 Collection 인터페이스와 따로 분리되어 있.. 2024. 12. 4. Java 모의 면접 후기 Java에 대한 공부와 동시에 모의면접을 하면 좋겠다라는 생각을 했었다. 그때, 우연히 JSCODE 모의면접이라는 것을 알게되었다. 올해 6월, 7월에 걸쳐서 기업 면접을 봤던 경험이 있었지만, 감이 조금 흐려진 것 같아 면접 경험을 되살리고 Java 공부도 함께 할 수 있을 것 같아 신청하게 되었다. 매주 모의면접 질문에 답변을 준비하며, 단순히 답변을 작성하는 데 그치지 않고 Java를 깊이있게 공부하는 것을 기본으로 삼고, 그 위에 면접 답변을 쌓아 올리는 것을 목표로 했다. 따라서, 매주 나오는 면접 질문들에 대해 질문들의 흐름을 파악하려고 했었다. 왜 이 질문이 나오게 되었고, 어떤 질문과 연관이 되어있을까? 를 항상 의식하면서 공부를 했었던 것 같다. 이런 방식으로 공부를 해보니, 매주 .. 2024. 12. 1. 11/25 - TIL : JPA와 N+1 JPA를 사용하다보면, N+1 문제는 한 번쯤 겪을 것이다. N+1 문제 : 연관관계로 매핑된 엔티티를 조회할 때, 추가적으로 N개의 쿼리가 실행되는 상황 (1번의 메인 쿼리와 N번의 추가 쿼리) 개발을 하면서 알고는 있었지만, 제대로 정리를 해본 적은 없는 것 같아 이번에 정리해보려고 한다. 예시와 함께 살펴보자.@Entitypublic class Member { @Id @GeneratedValue private Long Id; @OneToMany(mappedBy = "member", fetch = FetchType.EAGER) private List orders = new ArrayList(); ...}@Entity@Table(name = "ORDERS.. 2024. 11. 25. 자바 기본 - System.out.println() 자바로 알고리즘을 많이 풀다보면, 결과가 잘 출력되는지를 확인하고 싶을 때가 있다. 그때 많이 사용하게 되는 것이 System.out.println() 이다. 하지만, System.out.println() 은 사용하는 것을 지양해야 한다고 한다.. 왜 그럴까..? System.out.println() 문제점우선, System.out.println()은 Stream을 통해 콘솔에 출력해주는 역할을 한다. 따라서, I/O 작업이 동반된다. 여기서 파악할 수 있는 점은 I/O 작업이 동반되기 때문에 실행하고 있는 해당 스레드에서 blocking I/O 처리로 인해 프로그램이 느려지는 결과가 초래된다는 것이다. 또한, 추가적으로 System.out.println()은 단순한 출력 기능을 제공할 뿐, 로깅과 관련.. 2024. 11. 7. 자바 기본 - 어노테이션과 리플렉션 스프링을 이용해 개발을 하다보면 어노테이션을 자주 마주하게 된다. 따라서, 어노테이션이 무엇이고, 어노테이션이 어떻게 리플렉션으로 동작하는지, 그리고 리플렉션이 무엇인지 알아보고자 한다. 어노테이션 (Annotation)코드에 추가할 수 있는 메타데이터의 한 형태로, @(at) 문자를 통해 표현할 수 있다. 어노테이션은 코드에 부가적인 정보를 제공하는 데 사용되는 표현 방법이다. 어노테이션은 소스 코드에 주석 형태로 추가되어 컴파일러, 런타임 환경 또는 다른 프로세스에게 특별한 정보를 전달한다. 대표적인 어노테이션 @Override : 해당 어노테이션이 선언되어 있는 메서드는 오버라이드됨을 컴파일러에게 알려줌 @Deprecated : 해당 메서드는 더 이상 사용되지 않는다는 것을 컴파일러에게 알려.. 2024. 11. 7. 자바 기본 - 람다와 스트림 최근 참여하고 있는 챌린지에서, 강사님이 람다와 스트림을 사용해야 하는 이유에 대해 말씀해주셨다. 그래서 공부를 해보고자 한다. 람다 표현식람다(lambda)란 Java에서 간결하게 익명 함수(이름 없는 함수)를 표현하는 방식이다. 람다 표현식은 함수형 프로그래밍을 구성하기 위한 함수식이다. 람다식으로 표현하면 메서드 이름, 매개변수 타입과 반환 값을 생략할 수 있고, 이를 변수에 넣어 자바 코드를 간결하게 만들 수 있다.타입을 생략해도 컴파일러가 생략된 타입 위치를 추론하여 동작하게 해주기 때문에 에러가 나지 않는다. 람다식은 인터페이스를 익명 클래스로 구현한 익명 구현 객체를 짧게 표현한 것이다. 따라서, 오로지 인터페이스로 선언한 익명 구현 객체만 람다식으로 표현 가능하다. 람다 표현이 가능한 .. 2024. 11. 7. 자바 기본 - 제네릭 제네릭은 자바 기본과 객체 지향(4) 에서 잠깐 언급한 적이 있다. 간단하게 복습해보자면 다음과 같다. Primitive Type은 Generic Type에 사용 불가하다. Reference Type은 Generic Type에 사용 가능하다. Generic이 무엇이길래 그럴까? 이번에 알아보자. GenericsJava에서 Generics는 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 객체별로 다른 타입의 자료가 저장될 수 있도록 한다. 컬렉션 클래스나 메소드에서 사용할 내부 데이터 타입(type)을 파라미터(parameter) 주듯이 외부에서 지정하는 타입을 변수화 한 기능이다. ArrayList list = new ArrayList(); 위의 코드 처럼 괄호가 제네릭이다.. 2024. 11. 6. 자바 기본 - 예외 개발을 하다보면 .. 반드시 마주하는 것이 예외이다. 예외에 대해서 알아보자. Error vs Exception자바에서는 실행 시(runtime) 발생할 수 있는 오류를 에러와 예외 2가지로 구분한다. 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 메모리 부족(OutofMemoryError)이나 스택 오버 플로우(StackOverflowError)처럼 발생하면 복구할 수 없는 심각한 오류이고 예측 불가능하다. JVM 실행에 문제가 생긴 것 논리 에러, 컴파일 에러, 런타임 에러논리 에러 : 논리적 에러는 버그라고 생각하면 된다. 프로그램의 실행에는 문제가 없지만, 결과가 예상과 달라 사용자가 의도한 작업을 수행하지 못해 서비스 이용에 문제가 될 수 있다. (ex. 수량에 음수.. 2024. 11. 6. 자바 기본 - 문자열 Java에서 String은 reference type(참조형 변수)이다. 복습 : 지난주에 정리했던 자바 기본과 객체 지향(4)에서 reference type은 heap에 생성되고 다루어진다고 하였다. 불변(Immutable)Java에서 String 객체의 값은 변경할 수 없다.변경할 수 없다는 것은 heap 영역에서 해당 객체가 가리키고 있는 데이터 자체가 변화할 수 없다는 것을 의미 String a = "Hello";a = a + " World";출처블로그 여기서 a는 Hello World가 출력되겠지만, heap에는 Hello와 Hello World 2개가 있다. a는 단순히 새로운 String 객체를 참조한 것이다. (hashCode() 를 통해 살펴보면 다르다는 것을 알 수 있다.) 이는 문.. 2024. 11. 5. 이전 1 2 3 4 ··· 6 다음