• 프로그래밍
    • 지역적 변화의 영향이 최소화 되어야 한다.
    • 중복적인 코드가 최소화 되어야 한다.
    • Logic 과 Data 의 결합이 필요하다.
    • 변화 주기가 비슷한 Logic 과 Data를 모아야 한다.
  • OOP 란?
    • Object란? 프로그램의 독립적인 최도 단위.
    • Object간에 서로를 알 필요 없이, 상호 주고 받는 프로그래밍.
    • Object = Message + Data&Logic
    • 유연한 Software 개발이 용이해짐.
  • OOP 조건
    • 1) 추상화 : 공통의 속성이나 기능을 묶어서 정의 하는것.
    • 2) 캡슐화 : Code의 재수정 없이 재활용 할 수 있도록, 객체의 속성과 기능을 정의 하는것.
    • 3) 은닉화 : 외부에서 직접 접근을 하지 못하게 하는것.
    • 4) 상속성 : 상위Class의 속성 및 기능을 하위Class에 물려주는것.
    • 5) 다형성 : Overriding. 상속을 확장해 사용하는것.
  • OOP 5대 원칙
    • 1) 단일 책임 원칙 : 어떤 Class를 변경하려는 이유는 하나 뿐 이어야 한다.
    • 2) 개방-패쇄 원칙 : Object를 수정하였을때, 다른 Object의 수정이 필요 없어야 한다.
    • 3) 리스코프 치원 원칙 : 상속하위타입의 Object로 치환 하였때, 아무런 문제가 없어야 한다.
    • 4) 인터페이스 분리 원식 : Interface를 잘 나누어야 한다. 
    • 5) 의존관계 역전 원칙 : ...
  • Object역할 종류
    • information Expert : 특정 정보를 다루는 Object.
    • Controller : Object간 이벤트를 제어하는 Object.
    • Creator : 특정 Object를 생성하는 Object.
    • High Cohesion : ...
    • Low Coupling : ...
    • Indirection : ...
    • Pure Fabrication : ...
    • Polymorphism : ...
    • Protected Variation : ...
  • Design-Pattern 이란?
    • OOP 개발을 하는 반복적인 패턴을 정리하여, 만들어 짐. (객체지향 프로그래밍-디자인-모델링)
    • 1) strategy pattern  : 알고리즘을 바꾸기 유용하게 구현.
    • 2) template method pattern : 인터페이스등 통해, 실수행을 하위객체로 하는 life-cycle 구현.
    • 3) state pattern : 상태를 관리하는 상태객체를 통에 처리하도록 구현.
    • 4) observer pattern : 상태가 변화면 다른객체들에게 알려주어 처리하도록 구현.
    • 5) decorator pattern : 하위 클래스를 활용하여 기능을 확장으로 구현.
    • 6) factory pattern : 객체 생성을 하위 클래스에서 하도록 구현.
    • 7) command pattern : 사용자의 명령어에 따라, 그에 맞은 처리를 할도록 구현.
    • 8) adapter pattern : 신규객체가 기존객체외 연결(연동or호환) 가능 하도록 구현.
    • 9) facade pattern : 내부 복작한 로직을 간단한 인터페이스로 바꿔 구현.
    • 10) composite pattern : 객체들을 묶어서 통합 관리함.
    • 11) proxy pattern : 작업을 대신해주는 객체를 이용.
    • 12) visitor pattern : 객체 구조에서 기능을 분리, 확장은 후에 기능객체에서 할수 있다.
  • Spring Framework 란?
    • 철학(Mission Statement) : J2EE를 손쉽게 사용 할 수 있도록한, 인터페이스 설계 프로그래밍.
      • 예) Program 개발 = UI -> ILogic -> LogicImp -> IDAO -> DAOImp (Object 선택의 유연성 제공)
    • 오픈소스 경량급 Framework (개발에 필요한 Java Object 생성 및 조립)
    • IoC, DI, AOP, MVC 등의 개념으로 동작을 함.
    • Bean 설정 및 OOP 개발 및 테스트.
    • Framework 란?
      • Application을 구성하는 큰틀을 제공하여서, 비지니스 Core만 구현 하도록 해주는것.
    • IOC(Inversion Of Control) 란?
      • 날 호출 하지마, 내가 널 호출 할께!
      • 기존의 제어흐름 구조가 바뀐 동작방식. (개발자가 Object를 직접 생성 하지않고, Framework가 함)
      • 각 Object는 전체 흐름을 알 필요 없다. (호출을 당할때, 자신의 일만 잘 하면 됨)
      • 즉, Object는 자신이 어디서 사용되는지? 신경쓰지말고~ Framework에 모든것을 위임
      • Framework 와 Object 간의 Dependency가 동적인 구조라서, 강력함.
        • 예) [Framework] -> {Interface} -> (Class) -> {Interface} -> (Class) ???
        • // TODO : Object-Composition(합성) 을 동적으로 활용 ???
      • IoC 방식으로는, DL(dependency lookup) 와 DI(dependency injection) 가 있음.
      • 결론적으로, Spring == IoC Framework
    • DL(dependency lookup) 과 DI(dependency injection) 란?
      • Dependency 란?
        • run-time시, 바뀔수있는 Object간의 의존관계.
        • Object-Composition(합성) 으로, 상속을 하지않고도 최대한 수정없이 재사용을 하고싶다.
        • // Object-Composition(합성) 은 Object 내부를 Interface들로 필요한 Class들을 조합 ???
      • DL(dependency lookup)
        • 저장소에 있는 Bean에 접근하기 위해, 개발자들이 Container API의 callback에 의존하여 lookup을 하는 방식.
        • 토비 선생은 비추천 했다고 함...
      • DI(dependency injection)
        • 제 3의 존재(XML, 어노테이션 등) 를 기반으로, 컨테이너가 Object간 Dependancy를 맺어준다.
        • (물론, 이 제 3의 존재 때문에... 욕을 많이 먹는편!)
        • Object간 Decouple를 막아, 느슨한 결합의 Application이 되는것.
      • 결론적으로, Spring은 경량 컨테이너.
        • (Enterprise서비스, Thread관리, Object풀링, Clustering, Transaction, Logging, ... )
        • 인스턴스 Scope 제어. (매번 new 생성이냐? Singleton이냐?)
        • 인스턴스 LifeCycel Event 제어. (생성 및 소멸 등등)
    • AOP(Aspect Oriented Programming) 란?
      • 관점지향 프로그래밍.
      • Transaction, Logging, Auth 등등의 공통화 할 수 있는 Logic을 따로빼서(횡단분리) 관리하는 것.
      • 공통화 할 수 있는 Code의 재사용을 통해, 간소화를 하는 것.
      • Aspect
        • 공통화 하고 자하는 횡단관심사.
        • 한 개 이상의 PointCut 과 Advice 의 조합으로 정의.
      • JoinPoint
        • Aspect의 Advice가 적용이 되는 위치.
        • JoinPoint jp 으로 해당위치 API 제공. (예 : jp.getAgrs(), jp.getSignature(), jp.proceed())
      • Advice
        • Aspect의 실직적인 기능.
        • @Before, @After, @AfterReturning, @AfterThrowing, @Around
      • PointCut
        • Advice가 적용되는 Join Point를 정의하는 모듈.
        • return-type, package, class, method, argument 등의 표현식 제공.
        • (예 :  "execution(* com.test.member.MemberService.getMember(..))")
      • Target
        • Advice를 받을 대상. 즉 Object 의미.
      • Weaving
        • Advice에 PointCut를 입히는 행위.
    • MVC 란?
      • (비지니스로직을 처리하는) 'Model'과 (화면을 나타내는) 'View'를 분리 위해, 이 사이에 'Controller'를 둠.
      • Model : 백그라운드에서 동작하는 비지니스로직.
      • View : 결과를 보여주는 화면.
      • Controller : 사용자 입력의 처리 및 제어.
    • Bean 이란?
      • Spring(IoC Framework) Container의해 관리되는 Java Object.
      • POJO 란?
        • Plain Old Java Object
        • 태초의 아주 단순한 자바 객체.
        • (Java EE 등의 중량 Framework에 종속되어 사용되는 "무거운"객체에 반발로 나오게된 용어)
        • 순수하게 setter,getter 으로 이루어진 Value Object성의 Bean을 의미.
        • Class 상속을 강제하지 않고, Interface 구현을 강제하지 않고, 어노테이션 사용을 강제하지 않는다.
        • 무거운 종속성에서 벗어나, 본연의 비지니스로직에만 집중을 할 수 있다.
      • Singleton 이란?
        • 하나의 전역 new 인스턴스 으로 메모리 낭비를 방지.
        • 다수의 인스턴스에서 발생 할 수 있는 간섭 방지.
        • 나쁜 예)
          • public class Singleton {
            	private static Singleton SINGLETON;
            	public synchronized Singleton getInstance() {
            		// synchronized 특성상 성능저하가 발생하므로, 첫생성 이후에 synchonized 하지 않도록...
            		if(SINGLETON==null) {
            			synchronized(Singleton.class) {
            			if(instance == null) {
            				SINGLETON = new Singleton();
            			}
            			}
            		}
            		return SINGLETON;
            	}
            }
        • 좋은 예)
          • public class Singleton {
            	// 개발자가 직접하기 보다는, JVM 초기화 과정에서 보장되는 원자성을 활용하는게 가장 좋다.
                // (instance가 static이기 때문에 로딩시점에 한번만 호출될 것이며 final을 사용해 다시 값이 할당되지 않도록 만든 방법)
                private static class SingletonHolder {
                	public static final Singleton INSTANCE = new Singleton();
            	}
            
            	public static Singleton getInstance() {
            		return SingletonHolder.INSTANCE;
             	}
            }
  • ...
  • 서블릿(Servlet) 이란?
    • SUN사에서 제안한 웹서비스를 위한 인터페이스.
    • 원칙적으로는 javax.servlet.Servlet 인터페이스의 구현체.
    • (특별한 main문 없이) Servlet-Container에 의해서, 비지니스로직의 실행 및 관리.
    • Servlet-Container은 HTTP 요청시, Servlet을 ServletRequet, ServletResponse와 함께 호출합니다.
  • ...
  • JPA Vs MyBatis
    • MyBatis
      • XML 형식으로 Insert, Select, Update, Delete 쿼리 작성.
      • (Data용) POJO 클래스 생성.
      • DAO(Data Access Object) 클래스 생성
      • 테이블의 변경에 따라, 일일이 해당 쿼리를 변경해야하기 때문에~ 리팩토링 하기가 쉽지 않은 단점.
    • JPA
      • 각 테이블에 대응하는 Entity만 생성하면 됨. (Domain Object 중심의 개발)
      • Entity간의 관계를 어너테이션으로 설정. (예 : @OneToOne, @ManyToOne, @OneToMany, ... )
      • 테이블 변경에도, 대응이 가능하기 때문에~ 리팩토링 하기가 쉬운 장점.
      • (작성해야하는 량이 MyBatis 대비... 어림잡아 1/3로 준다고 함)
      • 대부분의 ORM이 그러하듯, SQL을 직접 작성하는 것보다는 성능이 비교적 떨어짐. (단점)
      • 복잡한 통계 데이터를 다루어야 할 때에는... 답답한 어려움이 있음. (단점)
      • (그래서 JPQL을 지원하긴 함)
    • (번외) PreparedStatement 와 Statement
      • PreparedStatement 쿼리 란?
      • 쿼리를 처리하는 "parse -> bind -> execute -> fetch" 과정을 효율적으로 하기 위함.
      • 반복적으로 SQL 실행시, 준비과정 없이~ 좀 더 낮은 CPU사용 과 좀 더 빠른 결과를 얻을 수 있음.
      • SQL injection 을 원천적으로 봉쇄하는 효과도 있음.
      • (왜냐하면, Query-Templete은 이미 고정이 되어서, 이전에 parsing 되어있기 때문에~
      • 이후에 binding 되는 ? 값은 문법적인 의미를 가질 수 없음)
  • ...
  • Spring Boot 란?
    • 최소한의 설정으로 더쉽게 Spring Framework 이용 할 수 있도록 하는 서브프로젝트.
  • 로깅
      • 0.벌목 1.통나무 2.(특히 항해운항비행 등의) 일지 3.일지에 기록하다
      • Lumberjack World Championships : Log Rolling
      • (surfing terms glossary) Log : Another name for a longboard...
      • Derived from the fact It's big and somewhat cumbersome. Derivatives are logging and logger.
    • Jakarta Common Logging
      • JCL 이란?
        • 추상화(interface) 라이브러리.
        • 구현체(instance) 라이브러리를 선택하여 사용.
        • 예) Log log = LogFactory.getLog(this.getClass());
      • JCL 메커니즘
        • 1) commons-logging.properties 에서 찾음.
        • 2) Class-Path 에서 (Log4J) 찾음.
        • 3) JDK 1.4 API사용. (Jdk14Logger)
        • 4) 못찾으면, Default사용. (SimpleLog)
      • JCL 꺼리는 이유
        • Class-Loader 의존적 방식으로 찾기 때문에... (RunTime때 찾음?)
        • 대안으로 SLF 가 있음. (CompileTime때 찾음?)
    • Simple Logging Facade
      • SLF 이란?
        • 추상화(interface) 라이브러리.
        • SLF4j API : ...
        • SLF4j Binding : ...
        • SLF4j Bridge : ...
        • https://www.slideshare.net/whiteship/ss-47273947 참고...
  • ...

-끝-

'랭귀지&프레임웤' 카테고리의 다른 글

Python 이란?  (0) 2019.11.06
STS 개발  (0) 2019.11.06
Spring Cloud 란?  (0) 2019.11.06
Spring Batch 란?  (0) 2019.11.06
자바 메모장  (0) 2019.10.23

+ Recent posts