분류 전체보기 176

[Next Step 사전과제] 도메인 설계(3) - 클래스 다이어그램

이전 글(https://nkdev.tistory.com/193)에서 설계한 도메인 구조를 클래스 다이어그램으로 만들어보자! 그리고 뼈대만 코드로 구현해보았다.예전에는 하염없이 인텔리제이를 보다가... 목적도 없이 3 tier architecture부터 만들어나갔는데 😓OOP 설계를 하니까 사용자 요구사항에 대한 로직을 바로 구현할 수 있어서 좋다.package movie.domain;import java.time.Duration;public class Movie { private String title; private Duration runningTime; private long basePrice; public Movie(String title, Duration runningTim..

프로젝트 2025.09.18

[Next Step 사전과제] 도메인 설계(2) - 도메인 규칙 정의

다음 요구사항을 보고 도메인 구조를 설계해보자! [Use Case]상영되다에매하다좌석을 선택하다 [State]영화 : 영화 제목상영 : 상영 시간, 상영 길이, 운영 시간, 운영 시간이 겹치는지 확인예매 : 예매 금액, 여러 영화 한 번에 예매, 결제 수단에 따른 추가 할인(신용카드 5%, 현금 2%), 추가 혜택(무비데이 10%, 시간조건 2,000원)사용자 : 보유 포인트, 영화와 상영 시간을 고른 뒤 좌석 선택,좌석 : 행(알파벳), 열(숫자), 등급(s석, a석, b석), 예약여부 요구사항을 보고 핵심 유스케이스를 3개 선정하고, 각 객체가 가져야 할 상태와 수행할 도메인 규칙을 정의해봤다.그러나 이런 방식을 사용하면 데이터 중심 설계로 갈 위험이 있다. 영화는 영화 제목이라는 정보만 가진 '데이..

프로젝트 2025.09.18

[Next Step 사전과제] 도메인 설계(1) - 행동과 책임

책임 주도 설계(RDD, Responsibility-Driven Design)의 핵심은 ‘행동’을 먼저 정하고, 그 행동을 수행할 책임을 누가 질 것인가? 이다.그렇다면 해당 요구사항에서 행동이 뭔지 정의하고 나서 그 행동을 하는 객체를 선정해보자. '상영한다' -> 영화'예매한다' -> 손님'좌석을 선택한다' -> 손님 처음에 책임과 그 책임을 수행할 객체를 선정했던 방식이다.'~~한다'라는 행동을 모두 책임으로 선정하고, 그 책임을 수행할 객체를 할당했다. 이렇게 자연어로 된 '~~한다'라는 '행동'을 발견했다고 얘네를 곧바로 객체가 수행할 책임'으로 정의하면 안 된다.행동은 단지 '시스템이 사용자에게 제공해야할 기능(use case)'를 드러내는 것이고, 책임은 '어떤 객체가 그 행동을 통해 보장해..

프로젝트 2025.09.18

[객체지향의 사실과 오해] 7장 정리

객체지향 설계 안에 존재하는 3가지 상호 연관된 관점동일한 클래스를 세 가지 다른 방향에서 바라보는 것을 의미함1은 클래스, 2는 인터페이스, 3은 속성과 메서드를 반영한다.클래스는 세 관점을 모두 수용할 수 있도록 개념, 명세, 구현을 함께 드러내야 함동시에 코드 안에서 세 관점을 쉽게 식별할 수 있도록 깔끔하게 분리해야 함-> 세 관점을 나눠 설계하면 유지보수와 확장에 강한 코드를 만들 수 있음. 개념을 분명히 하는 건 당연하고, 인터페이스 중심으로 설계하면 구현이 바뀌어도 협력 관계가 유지되고 외부 코드가 바뀌지 않으므로 1. 개념 관점(Conceptual Perspective) :설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현실제 도메인 규칙과 제약을 최대한 유사하게 반영하는 것이 ..

스터디 2025.08.31

[객체지향의 사실과 오해] 5장, 6장 정리

5장. 책임과 메시지5장을 한 문장으로 정리하면 ‘객체의 자율성이 협력의 품질을 결정한다’객체가 자율적으로 책임을 수행해야 협력이 단순해지고, 응집도가 올라가고, 캡슐화가 잘 된다. 결론적으로 설계의 확장성과 유연성, 재사용성이 향상된다. ‘객체가 자율적이다’ 어떤 요청을 받았을 때, 그 책임을 어떻게 수행할 건지에 대해서는 객체 본인이 판단한다는 의미.객체의 책임이 너무 구체적이면 객체의 자율성이 침해되고, 객체의 책임이 너무 추상적이면 객체가 해야 할 행동이 명확하지 않아진다.1. 객체가 너무 구체적인 책임을 지게 되어 자율성이 침해되는 경우Notification 객체에게 부여된 책임type을 판단하라판단된 type에 따라서 알림을 전송하라문제점?호출부의 문자열 타입에 오타가 있는 경우 런타임 에러 ..

스터디 2025.08.23

[객체지향의 사실과 오해] 3장, 4장 정리

3장. 타입과 추상화intro지하철 노선도를 실제 지리와 다르게 거리와 역 이름만 표현-> '정확성'을 버리고 '목적'에 집중. 꼭 알아야 하는 사실만 정확히 표현하고 몰라도 되는 정보는 무시한 것추상화를 통한 복잡성 극복추상화란?- 공통점은 취하고 차이점은 버려 단순하게 만듦- 불필요한 세부사항을 제거하여 중요한 부분을 강조 추상화의 목적?- 복잡성을 이해하기 쉬운 수준으로 단순화하는 것객체지향과 추상화1) 그룹으로 나누어 단순화하기앨리스는 외형+행동방식이 동일한 사람들을 '트럼프'라고 불렀다.그룹에 속한 객체가 단 하나뿐이라고 해도, 이렇게 그룹으로 나누어 단순화하면 내재된 복잡성을 효과적으로 감소시킬 수 있다.2) 개념(concept)개념이란 공통점을 기반으로 객체들을 여러 그룹으로 분류할 수 있는..

스터디 2025.08.16

[객체지향의 사실과 오해] 1장, 2장 정리

1장객체지향의 핵심은 '클래스'나 '상속'이 아닌 '자율적인 객체들 간의 협력'이다. 객체지향의 목표는 실세계를 소프트웨어로 끌고와서 모방하는 게 아니라, 고객이 원하는 요구사항을 새로운 세계로 만드는 것이다. 따라서 실세계의 모방이라는 개념은 설계/구현할 때는 부적합하다. 그래도 객체지향이라는 세계를 이해하고 사상을 학습하는 데는 효과적이므로, 이 관점으로 1장을 설명해보겠다. 손님, 캐시어, 바리스타 = 역할주문, 주문 접수, 제조 = 책임 특정 역할은 특정한 책임을 암시한다.역할 > 책임 (포함관계) 각 역할을 가진 객체들은 서로 협력해서 문제를 해결한다.협력 : 연쇄적인 요청과 연쇄적인 응답이 발생하고, 각 역할을 맡은 객체들이 요청을 성실히 이행하는 것 요청한 역할만 정확히 수행해준다면, 어떤..

스터디 2025.08.09

[pintos] 3주차 - Anonymous Page 구현 과정과 Pintos가 끝난 후 회고!

vm 공부가 끝나지 않아서 목요일에 구현 시작한 사람이 나예요.. (회고는 맨 아래쪽에) 젤 첫 번째 과제인 Anonymous Page를 해결해보자 !이번 과제에서 통과되어야 하는 테스트 중 하나인 lazy-anon.c를 통해 구현 요구사항을 파악해볼 것이다.선행되어야 하는 개념 https://nkdev.tistory.com/181 [pintos] 3주차 - Virtual Memory Unallocated/Cached/Uncached 상태, Anonymous page, Lazy LoadingUnallocated page에 대한 고찰... 이틀째 ㅎ 나는 왜 vm 구현도 안 하고 이런거에만 집착하는 걸까 ㅠㅠ으아악...그래도 이 개념을 정리하고 넘어가고 싶어서 내가 이해한 만큼만 정리해본다. VM page..

정글/Pintos 2025.06.05

[pintos] 3주차 - 유저풀, 커널풀 / pml4 / KVA, UVA, KERN_BASE

VM 프로젝트 문서를 정리하다가 3일이 지났는데 아직 다 못 봤습니당....내용이 굉장히 많으네요.. https://casys-kaist.github.io/pintos-kaist/project3/introduction.html Introduction · GitBookLocate the page that faulted in the supplemental page table. If the memory reference is valid, use the supplemental page table entry to locate the data that goes in the page, which might be in the file system, or in a swap slot, or it might simply b..

정글/Pintos 2025.06.05

[pintos] 3주차 - VM의 Unallocated, Cached, Uncached 상태 / Anonymous page / Lazy Loading

Unallocated page에 대한 고찰... 이틀째!vm 구현에 들어가기 전, 기본 개념에 집착하고 있다. 궁금한 게 너무 많다그래도 이 개념을 정리하고 넘어가고 싶어서 내가 이해한 만큼만 정리해본다. VM page의 세 가지 상태 - Unallocated / Cached / UncachedCSAPP 9.3장에 나온 그림을 보면 가상 메모리 페이지의 3가지 상태에 대해서 쉽게 이해할 수 있다. unallocated는 아직 아무것도 할당되지 않은 상태. 프로세스가 이 가상메모리 페이지 공간에 암것도 할당한 적이 없다. 암것도 할당된 적이 없어요 그냥. 프로세스가 아직 쓰기로한 적이 없는 주소예요..당연히 디스크에도 없고 그러면 메모리에도 없을 거예요..그래서 cpu가 unallocated page의 가..

정글/Pintos 2025.06.03