전체 글 245

🧾 여러 스레드가 공유된 메모리에 접근하여 값을 변경하면????

여러 스레드가 같은 메모리에 접근하여 값을 변경할 때 문제가 발생 →의도된 대로 동작하지 않음 여러 스레드가 동시에 실행할 때 문제가 발생할 수 있는 코드 블럭을 Critical Section 또는 Critical Region이라 칭함 여러 스레드가 같은 메모리를 동시에 접근해도, 메모리 조회만 하면 문제 없는데 이를 스레드 안전이라 부른다 해결책은? => synchronized 키워드를 사용, 한 번에 한 스레드만 해당 메서드 또는 블록에 진입할 수 있다 다른 스레드는 진입한 스레드가 해당 메서드나 블록의 실행을 마칠 때까지 기다려야 한다 public synchronized void criticalMethod() { // Critical Section // 동기화가 필요한 작업 수행 } =>코드 블록에..

📌 병렬과 동시성의 차이점은?!

병렬성(Parallelism): 병렬 처리는 여러 개의 작업을 동시에 실행하는 것을 의미 -여러 개의 독립적인 처리 장치 또는 CPU에서 각각의 작업을 처리하며, 작업들은 동시에 시작하고 종료할 수 있다. - 병렬 처리는 계산 속도를 높이고 처리량을 향상시키는 데 사용된다 동시성(Concurrency): 동시성은 여러 작업을 동시에 실행하고 관리하는 행위 - 동시성은 단일 처리 단위 또는 순차 처리를 사용하여 시스템의 응답 시간을 줄이는 데 사용 - 작업들은 동시에 시작되지만, 동시에 처리되는것은 아니다. - 동시성은 CPU에서 프로세스의 인터리빙 작업과 컨텍스트 스위칭을 통해 이루어진다 병렬성은 여러 개의 작업을 동시에 실행하며, 병렬 처리 장치 또는 CPU에서 각각의 작업을 처리한다, 작업들은 동시에..

📌 iterator와 listIterator의 차이는 무엇일까?

Iterator와 ListIterator는 자바에서 컬렉션 요소를 반복하는 데 사용되는 인터페이스 Iterator는 단방향으로만 이동할 수 있으며, ListIterator는 양방향으로 이동할 수 있다. Iterator는 hasNext()와 next() 메서드를 사용하여 다음 요소로 이동한다 ListIterator는 hasNext(), next(), hasPrevious(), previous() 메서드를 사용하여 다음 요소 또는 이전 요소로 이동할 수 있다. ListIterator는 List 인터페이스를 구현하는 컬렉션에서만 사용할 수 있다. ListIterator는 List 인터페이스에만 정의되어 있기 때문에, List를 구현한 ArrayList, LinkedList 등에서만 사용할 수 있다. Itera..

📌 iterator란 무엇일까?

Iterator란 자바에서 컬렉션 프레임워크에 저장된 요소들을 순회하여 읽어오는데 사용되는 인터페이스 Iterator를 사용하면 어떤 컬렉션 프레임워크라도 읽어볼 수 있는 표준화된 방법을 제공한다. Iterator 인터페이스는 다형성을 구현하고자 하기 때문에 for 루프나 while 루프와 같은 제어문과 함께 사용된다 EX) import java.util.ArrayList; import java.util.Iterator; public class IteratorTest { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("봄"); list.add("여름"); list.add("가을"); list.add("..

📌 thread-safe 컬렉션 클래스들은 무엇이 있을까?

Thread-safe 컬렉션 클래스는 멀티 스레드 환경에서 동기화를 보장하는 클래스 이러한 클래스들은 여러 스레드가 동시에 접근하여 수정하거나 조회할 수 있으며, 동시에 접근하는 스레드들이 안전하게 사용할 수 있도록 보호한다 왜 Thread-safe한 컬렉션 클래스를 사용하는가? 멀티 스레드 환경에서 데이터의 일관성을 유지하기 위해 동시에 접근하는 스레드들이 안전하게 데이터를 수정하거나 조회할 수 있도록 보호하기 위해 Thread-safe 컬렉션 클래스 Vector: 동기화된 메서드를 사용하여 스레드 안전성을 보장하는 List 구현체 Stack: 동기화된 메서드를 사용하여 스레드 안전성을 보장하는 LIFO(Last-In-First-Out) 구조의 컬렉션 클래스 Hashtable: 동기화된 메서드를 사용하..

🧾 프록시 쓰는 이유가 뭘까?

보안: 프록시는 액세스 제어를 통해 보안을 강화할 수 있습니다. 프록시를 사용하여 특정 객체에 대한 액세스를 제한하거나, 액세스 권한을 부여하거나, 액세스를 모니터링할 수 있다. 이를 통해 애플리케이션의 중요한 자원에 대한 보안을 강화할 수 있다. 로깅 및 감시: 프록시는 메소드 호출을 가로채고 기록할 수 있다. 이를 통해 애플리케이션의 동작을 로그로 남기거나, 성능 모니터링을 수행하거나, 오류를 디버깅하는 데 도움을 줄 수 있다. 프록시를 사용하여 애플리케이션의 동작을 감시하고 분석할 수 있다. 캐싱: 프록시는 메소드 호출 결과를 캐싱하여 성능을 향상시킬 수 있다. 메소드 호출 결과를 캐시에 저장하고, 동일한 인자로 호출될 때는 캐시된 결과를 반환함으로써 중복 계산을 피할 수 있다. 이를 통해 애플리케..

카테고리 없음 2023.07.07

🧾 디버깅과 컴파일의 차이와 로깅이란?

모듈과 패키지 공부에 이어서... 디버깅과 컴파일의 차이점: 컴파일: - 컴파일은 인간이 읽을 수 있는 코드를 컴퓨터가 실행할 수 있는 기계어로 변환하는 과정 - 이 과정에서 문법을 확인하고 타입 체크를 수행하며, 프로그램을 실행하기 위해 필요한 바이트코드 또는 기계어를 생성 - 컴파일러는 코드가 문법 오류가 없고 필요한 종속성을 컴파일하는 역할을 수행 - 인텔리제이에서는 컴파일 과정을 단일 파일, 모듈 또는 전체 프로젝트에 대해 수행할 수 있다 디버깅: - 디버깅은 코드에서 오류나 버그를 식별하고 수정하는 과정 - 프로그램의 동작을 분석하고 변수를 검사하며, 코드를 단계별로 실행하여 실행 흐름을 이해하는 것을 포함 - 디버깅은 논리 오류, 잘못된 데이터 값, 예상치 못한 프로그램 흐름과 같은 문제를 찾..

🧾GOF 패턴이란?

GOF = "Gang of Four" -디자인 패턴의 한 유형 -이 패턴은 소프트웨어 디자인에서 공통적인 문제들에 대한 해결책을 제시하고, 재사용 가능한 디자인 아이디어를 제공 GOF 패턴은 크게 세 가지 카테고리 - 객체 생성(creational) - 객체 구조(structural) - 동작 방식(behavioral) 객체 생성 패턴: 객체를 생성하는 방식과 관련된 패턴으로, 객체 생성의 유연성과 확장성을 높이기 위해 사용 ex) 추상 팩토리(Abstract Factory), 팩토리 메서드(Factory Method), 싱글톤(Singleton) 등 객체 구조 패턴: 클래스나 객체를 합성하여 더 큰 구조를 형성하는 패턴으로, 객체 간의 관계를 구성하는 방법 ex) 어댑터(Adapter), 컴포지트(Co..