1. 컴퓨터공학 지식(Computer Science) - 자료구조 / 알고리즘 (The Algorithm Design Manual) - 운영체제 (Operating Systems: Three Easy Pieces) - 데이터베이스 (학교 슬라이드, Isolation Level) - 네트워크, HTTP (인프런) - 컴퓨터 구조 (CS:APP) - 이산수학 - 리눅스 - 암호화 기법 - 소프트웨어 공학 2. 백엔드 개발(Back-end) - 인프런 - Java - 객체 지향 프로그래밍 - Spring Framework - JPA - RESTful API 3. 블록체인(Blockchain) - 마스터링 비트코인 / 이더리움 - 밑바닥부터 시작하는 비트코인 (Python -> C++) - 이더리움 코어 (Go..
/** 자료구조는 따로 다시 정리할 예정**/ 연속(Contiguous) 대 연결 자료구조(Linked Data Structures) 자료구조는 배열에 따라 구현 vs 포인터에 따라 구현 - 연속적 자료구조는 메모리의 연속된 한 구역으로 구성 배열, 행렬, 힙, 해시 테이블 등 - 연결된 자료구조는 포인터에 의해 뚜렷이 구분되는 메모리의 구역들로 구성 리스트, 트리, 그래프 등 배열(Array) 연속적으로 자료가 할당되는 가장 핵심적인 자료구조 각 원소들을 인덱스 혹은 주소로 그 위치를 찾을 수 있는 고정 크기(fixed-size) 구조 연속적으로 할당된 배열의 장법 - 주어진 인덱스로 상수 시간 접근 : 배열의 인덱스만 알면 데이터 요소 즉시 접근 가능 - 공간 효율성 - 메모리 지역성 : 배열은 매우..
2. 알고리즘 분석 알고리즘 분석의 가장 중요한 도구는 1) RAM 계산 모델 2) 최악의 경우(worst-case)의 점근적 분석(asymptotic analysis)이다. RAM 계산 모델 기계-독립적인 알고리즘 설계는 임의 접근 기계(Random Access Machine: RAM) 가상의 컴퓨터에 달려있다. 가상의 컴퓨터의 특징 - 각각의 단순 연산은 하나의 단계 동안에 실행 - 루프와 서브루틴은 단순 연산이 아니다. - 메모리 접근은 하나의 단계 동안에 이루어진다. 메모리 크기는 무한하여, 원하는 만큼의 메모리를 사용할 수 있다. 알고리즘을 언어와 기계에 독립적인 방식으로 이해하고 연구할 수 있다. 최선, 최악, 평균의 경우 복잡도 RAM 계산 모델을 사용하면 알고리즘이 몇 개의 단계를 실행하는..
기획자의 요구 : 고정 할인 금액 정책(FixDiscountPolicy) -> 비율 할인 정책(RateDiscountPolicy)으로 변경해주세요. public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); } 위의 코드처럼 FixDiscountPolicy() -> RateDiscountPolicy()로 변경 다형성 : 역할과 구현 분리 (O) DIP : 클라이언트가 DiscountPolicy 추상 클래스뿐..
다음과 같은 요구 사항이 있다. - 회원 관련 1. 회원 가입 / 조회 가능 2. 회원은 BASIC회원과 VIP 회원이 있다. 3. 회원 데이터는 자체 DB또는 외부 시스템과 연동 (미확정) - 주문 관련 1. 회원은 상품을 주문할 수 있다. 2. 회원 등급에 따라 할인 정책 적용 가능 3. VIP 회원에게는 할인 정책에는 두 가지가 있다. (고정 할인 정책 : 1000원 DC, 비율 할인 정책 : 10%) - 고정 할인 정책을 적용, 변동 가능 회원 도메인 설계 회원 클래스 다이어그램 - 역할과 구현을 분리 (다형성) 회원 엔티티 코드와 회원 저장소(Repository)는 생략합니다. 회원 서비스 회원 서비스 인터페이스 (MemberService) public interface MemberService..
3.10 Combining Control and Data in Machine-Level Programs 어떻게 기계 수준의 코드가 프로그램의 제어 측면을 구현하는 지와 어떻게 자료 구조로 구현되는지 구별하여 보았다. 데이터와 제어가 서로 상호작용하는 방법을 알아보자 3.10.1 Understanding Pointers 포인터는 C언어에서 중심적인 특징이다. 자료 구조에 있는 요소에 대한 참조를 생성하는 통합된 방법을 제공한다. 다음은 포인터의 중요한 원칙과 기계 코드로 매핑하는 것이다. - 모든 포인터는 연관된 타입이 있다 : 포인터가 어떤 오브젝트를 가리키는지 가리킨다. - 모든 포인터는 값이 있다 : 값은 지정된 타입의 어떤 오브젝트의 주소이다. NULL 값은 어떠한 곳도 가리키지 않는 것을 뜻한다...
Spring 프레임워크 - 핵심 기술 : 스프링 DI 컨테이너, AOP, 기타 - 웹 기술 : 스프링 MVC - 데이터 접근 기술 : 트랜잭션, JDBC, ORM 등 Spring Boot (스프링 부트) - 스프링을 편리하게 사용할 수 있도록 지원, 그냥 이거 쓰면 된다 - 스프링 어플리케이션 쉽게 생성, Tomcat 같은 웹 서버 따로 설정할 필요 없음 - 손쉬운 빌드 구성을 위한 starter 종속성 제공 (라이브러리) 스프링의 진짜 핵심 - 스프링은 Java 언어 기반의 프레임워크 - Java는? 객체 지향 프로그래밍(Object-Oriented Programming) 언어 - 즉, 스프링은 좋은 객체 지향 프로그래밍을 도와주는 프레임워크 객체 지향 프로그래밍 - 객체 지향 프로그래밍은 프로그램을 ..
3.7 Procedures 프로시저는 소프트웨어에서 중요한 추상화이다. 프로시저는 인수와 반환 값의 지정된 집합을 가진 기능들을 구현한 코드를 패키징하는 방법을 제공한다. 잘 설계된 소프트웨어는 프로시저를 추상화 메카니즘으로 사용하며, 상세한 구현은 숨기며 어떤 값이 계산되고 프로시저가 프로그램 상태에 어떤 영향 있는 지에 대한 명확한 정의는 제공한다. 프로시저는 프로그래밍 언어에서 많은 모습으로 보여진다. - 함수, 메소드, 서브루틴, 핸들러 등 프로시저에 대한 기계 수준을 제공할 때 많은 속성들이 있다 프로시저 P가 프로시저 Q를 호출하고, Q가 실행되고 P로 다시 반환된다. - Passing Control : PC는 Q의 코드의 시작 주소로 설정되고 Q를 호출한 후에 P의 명령어로 설정한다. - P..
3.4 Accessing Information x86-64 중앙처리장치(CPU)는 64-비트 값을 저장하는 16개의 범용(general-purpose) 레지스터를 포함한다. 이 레지스터들은 정수 데이터와 포인터를 저장한다. 레지스터들의 이름은 %r로 시작하고 뒤에는 다른 이름들을 가지고 있다. 명령어는 16개 레지스터의 낮은 정렬에 있는 바이트에 저장되어 있는 다른 사이즈의 데이터에 대해 연산한다. 바이트 수준 연산은 최하위 비트에 접근한다. (16-비트 연산은 최하위 2바이트, 32비트는 4비트, 64-비트는 모든 레지스터에 접근한다.) 다른 레지스터들은 프로그램에서 다른 역할을 제공한다. 가장 유일한 것은 스택 포인터(stack pointer)로 %rsp이며, 런타임 스택에서 마지막 위치를 가리키는 ..
3.1 A Historical Perspective x86이라고 불리는 Intel 프로세서 라인은 긴 발전적인 개발이 있었다. 높은 성능과 더 발전된 운영체제를 지원하기 위한 요구에 맞게 기술적인 향상에 이점을 띄었다. Intel의 프로세서는 8086 -> Pentium -> Core i7 등으로 발전하였다. Intel은 그들의 프로세서 라인에 다양한 이름을 갖고 있다. Intel Architecture 32-bit의 IA32이고 최근에는 Intel64로 x86-64로 불리고 있다. 많은 회사들이 인텔 프로세서와 호환 가능한 프로세서들을 생산하였다. 이 중의 최고는 AMD(Advanced Micro Devices)이며 늘 Intel에 기술적으로 뒤쳐졌으며 시장 점유율에서도 밀렸다. (최근에는 AMD가 엄..