앞서 IoC 에서 작성한 OrderServiceImpl, AppConfig 코드를 다시 한번 살펴보자. 위 코드를 보면 클래스 간 의존관계를 알 수 있다. 여기서 의존관계란, 1) 두 클래스 사이에서 어떤 클래스가 호출부(client)이고 어떤 클래스가 응답부(server)인지 혹은 2) 상속관계나 인터페이스-구현 관계를 나타낸다. 의존관계는 정적인 클래스 의존관계, 동적인 객체 의존관계로 분류된다. 정적인 클래스 의존 관계 import 코드 만으로 파악 가능. e.g. OrderServiceImpl은 MemberRepository, DiscountPolicy에 의존한다. 동적인 객체 의존 관계 어플리케이션 실행 시점(런타임)에 파악 가능. e.g. OrderService에 할인 정책으로 정액할인제를 주..
어떤 객체를 구현하면, 이 객체가 프로그램의 제어 흐름을 스스로 조종하는 것이 일반적이다. 다시 말해 필요한 다른 객체를 스스로 생성하고, 객체끼리 연결, 실행하는 것을 객체 내에서 관리한다. 위 코드를 예로 들면, OrderServiceImpl 이라는 객체는 자신이 필요한 memberRepository 객체, discountPolicy 객체를 스스로 생성한다. 이 때 MemberRepository 구현 클래스를 메모리(MemoryMemberRepository)로 하고, 할인율은 정액할인제(FixDiscountPolicy)로 한다. 이렇듯 OrderServiceImpl은 자신의 임무를 수행하면서 필요한 객체, 함수 등을 직접 생성, 호출한다. 한편 위 코드를 보면 OrderServiceImpl에 구현되어..
SRP 단일 책임 원칙(Single Responsibility Principle) 하나의 클래스는 하나의 책임만 가져야 한다. 판단 기준 : 변경. 변경이 있을 때 파급효과가 적다면 SRP가 잘 지켜진 것으로 볼 수 있다. OCP 개방-폐쇄 원칙(Open Close Principle) SW 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 모순된 것 같지만, 기존 코드를 바꾸지 않고 새로운 기능을 확장할 수 있다는 의미. 새로운 기능을 구현할 때, 인터페이스를 구현한 새로운 클래스를 만들어서 이 클래스에 새로운 기능을 구현한다. 클라이언트를 변경하지 않고 새로운 기능을 구현할 수 있다! 하지만... 순수 자바 코드로 구현 객체를 변경하려면 클라이언트 코드도 변경해야 한다... Memory로 구현한..
정의 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다 장점 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됨. 객체지향의 특징으로 추상화, 캡슐화, 상속, 다형성이 있다. 이 중 다형성이 가장 중요하다. 다형성 역할 - 구현 을 구분하는 것. 운전자-자동차로 비유 K3, 아반떼, 테슬라는 자동차라는 역할을 구현한 것이다. 자동차가 K3에서 테슬라로 바뀌더라도 운전자는 문제 없이 운전할 수 있다. 공연 무대로 비유 각각의 배우는 얼마든지 대체될 수 있다. 즉, 유연하고 변경이 용이하다. 다형성 정리 클라..
스프링이란? 좁은 의미 : 스프링 DI 컨테이너 기술 혹은 스프링 프레임워크 넓은 의미 : 스프링 부트, 스프링 프레임워크 등을 포함한 스프링 생태계 스프링 프레임 워크 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹 기술 : 스프링 MVC, 스프링 WebFlux 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원 테스트 : 스프링 기반 테스트 지원 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원. (최근에는 기본으로 사용!) 1.단독으로 실행할 수 있는 스프링 애플리케이션 쉽게 생성 가능 2.Tomcat 웹 서버를 내장해 별도의 웹서버를 설치하지 않다도 됨 3.손쉬운 빌드 구성을 위한 starter 종속성 제공 4.스프링과 외부 라이브러리 자동 구성. -> 외부 라이브러리와 버전..
https://programmers.co.kr/learn/courses/30/lessons/60063 코딩테스트 연습 - 블록 이동하기 [[0, 0, 0, 1, 1],[0, 0, 0, 1, 0],[0, 1, 0, 1, 1],[1, 1, 0, 0, 1],[0, 0, 0, 0, 0]] 7 programmers.co.kr 0. 문제 개요 가로 혹은 세로로 두 칸을 차지하는 로봇이 있다. 로봇은 상하좌우로 이동하거나 한 칸을 축으로 회전할 수 있다. 로봇이 (n,n)에 위치하기까지 최소 시간을 구하라. 1. 문제 해결 아이디어 1-1. 도착 점까지 최소 시간이므로 BFS를 이용한다. 1-2. 두 칸을 차지한다는 것을 고려해야 한다. -> 로봇이 가로 모양일 때는 왼쪽 칸을, 로봇이 세로 모양일 때는 위쪽 칸을 ..
https://programmers.co.kr/learn/courses/30/lessons/60061 코딩테스트 연습 - 기둥과 보 설치 5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[ programmers.co.kr 0. 문제 개요 두 종류의 구조물이 있고, (기둥, 보) 두 종류의 동작이 있다. ..
https://programmers.co.kr/learn/courses/30/lessons/17680 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 0. 문제 개요 구현 문제. 캐시 사이즈와 도시 목록이 주어진다. 도시 목록을 차례대로 읽으며 캐시 내 도시 이름이 있는지 확인한다. (LRU) Least Recently Used 알고리즘에 따라 캐시 목록을 업데이트한다. 현재 탐색하는 도시 이름이 캐시 내 존재하면 비용을 +1, 존재하지 않으면 +5만큼 증가시킨다. 도시 목록 탐색이 완료되었을 때 비용을 리턴한다. 1. 문제 해결 아이디어 1-1. 초기 아..
MIPS의 Instruction type(==instruction format)은 세 개로 나뉜다. 1. R-type(for Register) op : operation code. 명령어를 구분하는 고유 번호. rs : 1st source register number. rt : 2nd source register number. rd : destination register number. 이 때 register number는 물리적인 register를 가리키는 고유번호이다. 아래 표를 참고하자. shamt : shift amount. sll과 같은 shift 명령어에서 얼만큼 이동할 지를 의미. funct : function code. 간혹 operation code가 동일한 명령어가 있을 때 그들을 구분..
서로 다른 아키텍처끼리의 성능을 비교하려면 적절한 비교 기준(metrics)가 있어야 한다. 대표적으로 쓰이는 기준이 바로 CPU Time이다. performance = 1 / execution time performance(성능)은 어떤 작업을 처리하는데 걸리는 시간(execution time)의 역수로 정의한다. 한편, 두 개의 cpu 간 성능을 상대적으로 비교할 때 다음과 같이 표현한다. "A가 B보다 n배 빠르다" 이를 수식으로 표현하면, performance(A) / performance(B) = n 이는, execution time(B) / execution time(B) = n 과 동치이다. 보통 상대적으로 비교할 때 execution time(=CPU time)으로 표현할 때가 많으니 분자..
- Total
- Today
- Yesterday
- 프록시패턴
- c++
- java
- 서비스추상화
- 자바
- 템플릿콜백
- 백기선
- provider
- 스프링
- gracefulshutdown
- AOP
- 코딩테스트
- 프록시
- 카카오
- 토비의스프링
- SOLID
- 김영한
- 객체지향
- OOP
- 자바스터디
- 토비의봄TV
- 예외처리
- BOJ
- 코테
- ec2
- 메서드레퍼런스
- 디자인패턴
- 데코레이터패턴
- 프로그래머스
- 토비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |