하나 이상의 자원에 의존하는 클래스를 만들때는 주의할 점이 있는데요, 예시로 간단하게 아래와 같은 코드를 작성해봤습니다. public class Delivery { private String type; private String area; public Delivery(String type, String area) { this.type = type; this.area = area; } public String getType() { return type; } public String getArea() { return area; } } 배달과 관련된 class를 작성해봤습니다. 필드로는 어떤 type의 음식을 판매하는지 나타내고 싶었고, area는 어떤 지역에 있는지 나타내고 싶었습니다. public clas..
네트워크 계층의 핵심은 '송신 호스트에서 수신 호스트로 패킷을 전달'을 수행한다는 것입니다. 네트워크 계층의 역할이 끝나면, 데이터그램은 일련의 유무선 통신 링크와 스위치들을 거친 뒤에 목적지 호스트에 도달하게 됩니다. 그리고 이제부터 프로토콜 스택상 네트워크 계층에서 '링크 계층'으로 내려옵니다. 링크 계층이 어떻게 동작하는지 이해하기 앞서 몇가지 용어와 링크 계층이 수행하는 역할이 무엇인지 먼저 알아보겠습니다. 링크 계층 프로토콜을 실행하는 장치들을 '노드(node)'라고 부르고 여기에는 호스트, 라우터, 스위치 등이 포함됩니다. 또한 통신 경로상의 노드들을 연결하는 통신 채널을 '링크(link)'라고 부릅니다. 링크 계층의 기본 서비스는 통신 링크를 이용해 데이터그램을 한 노드에서 인접 노드로 이동..
'정적 메서드와 정적 필드만'을 담은 클래스를 만들라는 요구사항이 들어온다고 생각해봅시다. '객체 지향의 사실과 오해'를 당연히 읽은(?) 우리에게는 말도 안되는 요구사항입니다. 객체 지향의 세계에서는 모든 객체가 역할을 가지고 협력하는데, 역할을 수행할 객체가 없는 상황에서 역할을 기대하는 것은 더이상 객체지향을 지킨다고 볼 수 없습니다. 이런 생각을 가진 상태에서 아래의 코드를 봅시다. public static void main(String[] args) { Integer mini = Math.min(1, 2); System.out.println("mini = " + mini); } 자바가 제공하는 Math class의 min 메서드를 사용하는 간단한 코드입니다. 하지만, 우리는 Math 인스턴스를 ..
먼저 CPU가 명령어를 실행하기 위해 어떤 사이클을 수행하는지 생각해봅시다. CPU의 명령어 실행 사이클은 크게 '명령어 인출'과 '명령어 실행' 단계로 이루어지는데요, 명령어 인출은 말그대로 CPU가 수행할 명령어를 꺼내오는 사이클을 말하고, 명령어 실행은 인출한 명령어를 실행하는 사이클을 말합니다. 이 과정에서 CPU의 많은 레지스터가 사용되지만 이번 주제는 메모리와 관련되어 있으니, MAR, MBR 레지스터만 아주 간단하게 그림으로 나타내보겠습니다. MAR은 Memory Address Register의 약자이고, MBR은 Memory Buffer Register의 약자입니다. 이름에서 알 수 있듯이, 이 두개의 레지스터는 Memory와 매우 밀접한 관계를 가지며 각각의 역할은 아래와 같습니다. MA..
'싱글톤(Singleton)'이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 싱글톤을 만드는 방식은 일반적으로 두 가지를 사용하는데, 두 방식 모두 생성자를 private로 감춰두고, 생성된 유일한 인스턴스에 접근할 수 있는 수단을 만들어 놓습니다. 하나씩 살펴봅시다. public class Hello { public static final Hello INSTANCE = new Hello(); private Hello() {} public void print() { System.out.println("Hello World!"); } } 매우 일반적인 방법으로, private 생성자는 public static final 필드인 INSTANCE를 초기화할 때 딱 한번만 호출됩니다. 그리고 p..
이전에 살펴본 정적 팩토리 메서드 패턴은 분명 장점이 많습니다. 자바의 JDBC에서 사용하고 있는 패턴이기도 하고, OCP 원칙을 지키며 확장에도 열려있는 코드를 만들어줄 수 있습니다. 하지만, 정적 팩토리 메서드는 생성자를 사용할 경우 발생하는 제약 사항이 그대로 존재하는데요, 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 문제입니다. 예를들어 아래와 같은 회원 클래스가 있다고 가정해보겠습니다. public static class Users { private int age; // 필수 private String name; // 필수 private String nickname; // 선택 private String phone_number; // 선택 private String address; // ..
일반적으로 인스턴스의 생성은 public 생성자를 통해 이루어질 수 있습니다. public class ExampleStaticFactoryMethod { public static void main(String[] args) { Users user = new Users(26, "jo", "busan", "ds4ouj@naver.com"); } public static class Users { private int age; private String name; private String address; private String email; public Users(int age, String name, String address, String email) { this.age = age; this.name =..
풀이 1 : 트럭을 1번도 이동하지 않는 풀이 단순하게 simulation만 계속 호출하면 어느정도 사용자가 자전거를 가져다 놓는 상황을 예측할 수 있습니다. 놀랍게도 합격권 (CS 제외) 시나리오 1 : 1089 / 1440 시나리오 2 : 9133 / 10800 풀이 2 : 최대한 골고루 자전거를 배치하는 것이 최적을 기대할 수 있는 풀이 한번에 모든 트럭을 적절히 분배하는 것은 매우 구현이 힘듬을 이용합니다. 단 두개의 트럭만 움직인다고 가정하고, 가장 자전거가 없는 칸에 자전거를 놓고, 트럭이 자전거가 많은 칸을 들려 자전거를 가지고 가는 시뮬레이션 풀이를 생각해볼 수 있습니다. 1. 가장 자전거가 적은 칸에서 BFS 후 자전거를 가지고 있는 트럭을 찾음 -> 자전거 내리기 2. 가장 자전거가 많..
- Total
- Today
- Yesterday
- Operating System
- go
- spring
- OS
- mmu
- paging
- algorithm
- Effective Java
- soft delete
- ARP
- fiber
- 공지
- java
- cs
- effective
- GORM
- Database
- network
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |