본문 바로가기

ComputerScience

(72)
[SOLID] LSP: The Liskov Substitution Principle * 이 글은 Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. LSP: The Liskov Substitution Principle OCP(개방-폐쇄 원칙)의 주요 메커니즘은 추상화(abstraction)와 다형성(polymorphism)입니다. C++ 및 Java와 같은 정적으로 형식화된 언어에서는 이러한 추상화와 다형성을 지원하는 주요 메커니즘 중 하나가 상속(inheritance)입니다. 상속을 사용함으로써 우리는 기본 클래스의 추상 메서드를 구현하는 파생 클래스를 생성할 수 있습니다. 이러한 상속 사용의 특정한 디자인 규칙과 최상의 상속 계층 구조의 특성을 다루..
[SOLID] OCP: The Open–Closed Principle * 이 글은 Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. OCP: The Open–Closed Principle Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification. 프로그램의 단일 변경으로 인해 종속 모듈에 대한 연쇄적인 변경이 발생하는 경우, 해당 디자인은 경직(Rigidity)의 흔적, 즉 코드의 수정이 어려워지는 경향이 있습니다. OCP(개방-폐쇄 원칙)는 프로그램이 추가 변경 사항이 발생하더라도, 연쇄적인 변..
[SOLID] SRP: The Single-Responsibility Principle * 이 글은 Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. SRP: The Single-Responsibility Principle 왜 책임을 별도의 클래스로 분리하는 것이 중요한가요? 각 책임은 변경의 축이기 때문입니다. 요구 사항이 변경되면 그 변경은 클래스 간의 책임 변경을 통해 나타날 것입니다. 하나의 클래스가 두 개 이상의 책임을 가정하면 해당 클래스가 변경해야 하는 이유가 두 개 이상 발생할 것입니다. 하나의 클래스가 두 개 이상의 책임을 갖는 경우, 이러한 책임들은 서로 결합됩니다. 이때 한 책임에 대한 변경 사항은 클래스가 다른 책임을 충족하는 능력을..
[DesignPattern] Agile Development * 이 글은 Agile Software Development, Principles, Patterns, and Practices - Robert Martin 책 내용을 번역 및 요약하여 작성하였습니다. The Agile Alliance 소프트웨어 개발 프로젝트에서 명확한 지침이나 효과적인 접근 방식의 부재로 인해 예측 불가능성, 반복된 오류 및 낭비가 발생합니다. 일정 지연, 예산 증가 및 저품질로 인해 클라이언트는 실망하고, 개발자는 더 많은 노력을 기울일수록 점점 나쁜 소프트웨어를 생산하게 됩니다. 소프트웨어 개발 프로젝트는 몇 가지 제한사항과 결과물만으로는 완벽하다고 볼 수 없습니다. 오류가 계속 발생하면 그 오류를 진단하고 앞으로의 오류를 방지하기 위해 더 많은 제한사항과 결과물을 도입합니다. 많은..
[Java] Garbage Collection Garbage Collection 모든 객체는 메모리와 같은 시스템 리소스를 사용합니다. 더 이상 필요하지 않은 경우 리소스를 시스템에 반환할 수 있는 체계적인 방법이 필요하며, 그렇지 않으면 "리소스 누수(resource leaks)"가 발생할 수 있습니다. JVM(Java Virtual Machine)은 더 이상 사용되지 않는 객체가 차지한 메모리를 회수하기 위해 자동 가비지 컬렉션을 수행합니다. Java 객체는 프로그램에 할당된 메모리 섹션인 '힙(Heap)'에 생성됩니다. 객체가 더 이상 필요하지 않을 때, 가비지 컬렉터는 이러한 사용되지 않는 객체를 찾아 추적하고 메모리를 확보하기 위해 삭제합니다. 가비지 컬렉션 없이는 힙이 결국 메모리 부족으로 인해 'OutOfMemoryError' 런타임 오..
한글코드 관련 자료조사, KS 완성형, 유니코드, UTF 인코딩 등 한글코드란? 컴퓨터에 한 번 입력된 자료는 우리가 아는 문자나 숫자의 형태에서 컴퓨터가 처리하기 쉬운 부호로 바뀌어서 기억 장치에 저장되는데 이 컴퓨터용 부호를 한글코드라고 말한다. 예를 들어 미국에서 표준으로 쓰이는 ASCⅡ코드를 지원하는 컴퓨터들에서는 영문의 ‘A’는 컴퓨터 내부에서 숫자 65로 ‘B’는 66으로 바뀌어 저장된다. 마찬가지로 한글코드는 한글로 작성한 문자를 컴퓨터용 부호로 변환하기 위한 규칙이다. 한글코드의 유형으로는 조합 원리에 따른 유형, 완성형에 따른 유형이 있다. 조합 원리에 따른 유형 조합 원리에 따른 유형으로는 N 바이트 코드, 3 바이트 코드, 상용 조합형이 있다. N 바이트 코드 한글을 풀어쓴 것과 같이 자음과 모음을 각각 1바이트씩 처리하는 형식의 코드이며 2~5바이트..
[GraphQL] GraphQL? A query language for your API GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools. "CRUD API를 GraphQL로 새로 ..
[API]HTTP methods에서 Idempotency(멱등법칙)이란? "In the context of REST APIs, when making multiple identical requests has the same effect as making a single request – then that REST API is called idempotent." Idempotency 수학에서 Idempotency(멱등법칙)이란, 아무리 연산을 여러 번 해도 결과 값이 달라지지 않는 법칙입니다. 예를 들어, 1 * 1 * 1 * 1 * 1 같은 연산입니다. REST API에서 Idempotency란 성공적으로 수행된 요청이 서버 리소스에 미치는 효과가 해당 요청이 몇 번 실행되었는지에 독립적인 것을 의미합니다. REST API를 설계할 때 API 소비자가 실수를 할 수 있다는 점을..