728x90
반응형

전체 글 168

[Effective Java] 아이템 76. 가능한 한 실패 원자적으로 만들라.

🎯 아이템 76. 가능한 한 실패 원자적으로 만들라. 일반화해 이야기하면, 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다. 메서드를 실패 원자적으로 만드는 방법 1️⃣ 불변 객체 불변 객체의 상태는 생성 시점에 고정되어 절대 변하지 않기 때문이다. 클래스를 불변으로 만들기 위한 5가지 규칙 1.객체의 상태를 변경하는 메서드(setter)를 제공하지 않는다. 2.클래스를 확장할 수 없도록 한다. 3.모든 필드를 final로 선언한다. 4.모든 필드를 private으로 선언한다. 5.자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 2️⃣ 매개변수의 유효성 검사 객체의 내부 상태를 변경하기 전에 잠재적 예외의 가능성 대부분을 걸러낼 수 있는 방법이다. public ..

Java 2023.04.06

프로세스 주소 공간

1️⃣ Code Segment 프로그램의 코드가 저장되어있다. 2️⃣ Data Segment 전역 변수(global variables)같은 데이터가 저장되어 있다. 3️⃣ Stack Segment 함수(function)나 지역 변수(local variables)가 저장되어 있다. 여기서 질문 📌 Q. 왜 Code 부분을 따로 두었나? A. Program의 Code는 Program이 만들어지고(컴파일되고) 나서는 바뀔 일이 전혀 없습니다. 따라서 읽기만 가능한 Read Only 부분입니다. 그렇기 때문에 같은 프로그램을 실행시켜 몇 개의 Prcess가 실행되더라도 같은 프로그램이라면 Code 부분은 다 똑같은 내용을 가지고 있습니다. Q. 왜 Stack 부분과 Data 부분을 나누었나? A. 전역 변수(g..

CS 2023.04.06

프로세스(process)와 스레드(thread)

프로세스(process)란? "운영체제로부터 시스템 자원을 할당받는 작업의 단위" 프로세스 간 통신(IPC, Inter-Process Communication)이 필요한 경우 운영체제가 제공하는 메커니즘을 사용하여 통신합니다. 각 프로세스는 다른 프로세스의 데이터나 상태에 직접적으로 접근할 수 없으며, 운영체제를 통해서만 접근할 수 있습니다. 스레드(thread)란? "프로세스 안에서 실행되는 여러 흐름 단위" 프로세스의 자원을 공유하면서 실행되므로, 각 스레드는 독립적인 실행 흐름을 가지지만, 해당 프로세스 내에서는 공유되는 메모리 영역을 통해 서로 통신할 수 있습니다. 이러한 특징 때문에, 스레드는 프로세스보다 가볍고 빠르게 생성되며, 자원의 효율적인 사용이 가능합니다. 그러나, 각 스레드는 서로의 ..

CS 2023.04.06

마이크로서비스 아키텍처(MSA)

MSA란 무엇인가? "하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐" MSA (Microservices Architecture)는 분산 컴퓨팅 아키텍처 패턴 중 하나로, 서비스 기반의 아키텍처 패턴입니다.이를 통해 모놀리틱 아키텍처의 문제점을 해결하고, 애플리케이션의 확장성과 유연성을 개선하며, 서비스 장애가 전체 시스템에 영향을 미치지 않도록 하는 등의 이점을 제공합니다. MSA의 탄생 배경 MSA(Microservices Architecture)의 탄생 배경은 기존의 모놀리식(monolithic) 아키텍처에서의 한계점을 극복하기 위한 것입니다. 모놀리식 아키텍처는 모든 서비스를 하나의 대규모 응용 프로그램으로 구현하므로, 시스템의 규모가 커질수록..

CS 2023.04.05

[Effective Java] 아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라.

🎯 아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라. @Override public Object invoke(Object target, Object... parameters) { try { return ( (Method) getMember() ).invoke( target, parameters ); } catch (NullPointerException e) { throw new IllegalArgumentException( "Invoking " + getName() + " on a null object", e ); } catch (IllegalArgumentException e) { throw new IllegalArgumentException( "Invoking " + getName() +..

Java 2023.04.05

[Effective Java] 아이템 74. 메서드가 던지는 모든 예외를 문서화하라.

🎯 아이템 74. 메서드가 던지는 모든 예외를 문서화하라. 메서드가 던지는 예외는 그 메서드를 올바로 사용하는 데 아주 중요한 정보다. 따라서 각 메서드가 던지는 예외 하나하나를 문서화하는 데 충분한 시간을 쏟아야 한다. 검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하자. /** * ... 생략 * * @throws SecurityException if a security manager exists and its * checkPermission method denies enabling * subclassing. * @throws IOException if an I/O error occurs while creating this stre..

Java 2023.04.04
728x90
반응형