전체 글 (200) 썸네일형 리스트형 [Sofrware Architecture] SA 개요 SW World Software가 Physical World에 존재하는 산업의 Value Chain을 먹고 있다 더보기 Amazon (1994.07.05) Netflix (1997.08.29) Google (1998.09.04) Tesla (2003.07.01) Facebook (2004.02.04) NAVER (1997.02월) Yanolja (2005년) Kakao (2006.12월) 배달의 민족 (2011.03.10) 토스 (2013.08월) 마켓컬리 (2015년) NVIDIA CEO Jensen Huang (2019.08) AI에 의한 코딩 자동화, AI가 웹사이트를 만든다 (MIT Technology Review) Software is eating the world, but AI is going.. [Software Architecture] SW 공학 SW 위기 SW 위기 = F.L.바우어 1968년 SW 공학 학회에서 사용 / 독일 가미시 규모의 대규모화, 복잡화 -> 개발비용 증대 HW 비용에 대한 SW 가격 상승폭 증가 유지보수 어려움 및 개발정체 현상 발생 신기술에 대한 교육 및 훈련 부족 -> 프로젝트의 성공 확률이 높지 않은 편임 - Success = be completed on-time & on-budget - Challenged = be completed and operational but over-budget, over the time estimate, and offers fewer features and function than originally specified -> 대형 프로젝트 일수록 성공보다 실패의 확률이 높게 나타남 SW .. [Design Pattern] Command / Strategy / State Pattern Command Pattern 개요 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴 커맨드를 수행할 수 있도록 하는 패턴 구현 방법 public class main { public static void show(Box box) { for (int i = 0; i < 10; i++) { if (box.getX() == i) System.out.print("#"); else System.out.print("_"); } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); Box box = new Bo.. [Design Pattern] Flyweight pattern Flyweight Pattern 개요 동일/유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화 하는 패턴 [참고] 메모리를 절약하는 방법 1. 생성 시 자주 사용하는 부분을 떼어내어 공용 객체로 생성 2. 한번 생성한 객체는 다시 사용하지 않도록 저장 후 활용하는 방법 -> Flyweight Pattern 구현 방법 import java.util.HashMap; public class Main { public static void main(String[] args) { Factory fac = new Factory(); Tree[] trees = new Tree[100]; for (int i = 0; i < trees.length; i++) { // [1] t.. [Design Pattern] Observer Pattern Observer Pattern 개요 옵저버 또는 리스너라 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록 -> 관찰 대상 객체가 발생시키는 이벤트를 받아 처리 이벤트가 발생하면 각 옵저버는 Callback을 받음 활용사례 > 이벤트 기반 프로그래밍 코드 구현 import java.util.ArrayList; public class main { public static void main(String[] args) { Subject center = new Subject(); Observer ob1 = new ObserverA(); // [1] Observer ob2 = new ObserverB(); center.registerObservers(ob1); // [2] center.registerObs.. [Design Pattern] Decorator Pattern Decorator Pattern 단계별 선택지 존재하는 경우 - Choice Step 1 = Big/Small - Choice Step 2 = Fast/Mid/Slow - Choice Step 3 = Robot/Tank 이를 구현하기 위한 방법 1. 모든 케이스에 대한 클래스를 다 만들어주기 ex) BigFastRobot(), BigFastTank() .... - 모든 것을 다 만들어야 함 -> 추가/삭제 등의 유지보수의 어려움 2. 단계별 Class 생성 ex) Step1 { //Big, Small // } Step2 { //Fast/Mid/Slow // } Step3 { //Robot/Tank // } 3. new Big(new Slow(new Robot())) 와 같이 사용할 수 있도록 하는 방법 .. [Design Pattern] Adapter Pattern Adapter Pattern 개요 기존 사용하던 Library 교체가 필요한 경우 기존 코드 수정을 최소화 하기 위해 사용 > 새로운 Library API에 맞도록 Wrapper 생성 > 변환기로 사용 Facade와 비교 (용도가 다름) Facade Adapter 둘다 Wrapper 쉬운 Class 사용을 위한 단순 Wrapper 모듈 교체용 Wrapper 코드 구현 - 1 (변경 전) public class main { // [1] Test가 완료된 모듈 -> 크게 안 건드리고 싶음 public static void run(Azure az) { az.ms_connect(); az.ms_login("ID", "1221"); az.ms_sendData(); az.ms_receiveData(); az.ms_.. [Design Pattern] Facade Pattern Facade Pattern 개요 단순 Wrapper Class Class 사용법이 복잡하여 쉽게 사용하는 Wrapper를 만들때 사용 Design pattern중 가장 간단 구현 방법 //import java.util.ArrayList; //import java.util.List; public class main { public static void main(String[] args) { FacadeWrapper fw = FacadeWrapper.startInstance(); // [1] Singleton 적용 fw.Write("Test.txt", "Write this!!"); // [3] FacadeWrapper만 호출 fw.Read("Test.txt"); } } class FacadeWrapper {.. 이전 1 2 3 4 5 6 7 8 ··· 25 다음