AOP란
- Aspect-Oriented Programming / 애스펙트 지향 프로그래밍
- 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용할 수 있는 컴포넌트에 담을 수 있게 해줌
- 기존 비즈니스 로직에 영향을 주지 않고 필요한 추가처리를 곳곳에 넣을 수 있는 개발 기법
- 소프트웨어 시스템 내부의 관심사들을 서로 분리하는 기술
- 시스템은 보통 특정한 기능을 책임지는 여러개의 컴포넌트로 구성된다
- 각 컴포넌트는 특정 기능 외에 로깅이나 트랜잭션 관리, 보안등의 시스템 서비스도 수행해야 하는 경우가 있다
- 이러한 시스템 서비스는 여러 컴포넌트에 관련되는 경향이 있다 (횡단관심사)
- 이러한 관심사가 여러 컴포넌트에 퍼지게 되면, 중복되는 코드가 나타난다
- 애플리케이션 코드에 산재해서 나타나는 부가적인 기능을 독립적으로 모듈화
- 시스템 서비스를 모듈화해 컴포넌트에 선언적으로 적용 가능
- 예
- 게시판 기능을 만들 때
- 게시글 쓰기나 목록읽기와 같은 핵심 로직을 구현할 때
- 트랜잭션 적용이나 보안검사같은 공통 기능 코드를 핵심로직에 삽입할 필요가 없다
- AOP라이브러리가 공통기능을 알맞게 삽입해주기 때문
Continue reading
DI란
- Dependency Injection
- 실제 어플리케이션에서는 두 개 이상의 클래스가 서로 협력하여 비즈니스 로직 수행
- 이 때 각 객체는 협력하는 객체에 대한 레퍼런스(종속객체)를 얻어야 한다
- 그 결과 결합도가 높아지고, 테스트하기 힘든 코드가 만들어지기 쉽다
private dao;
dao = new ProductDAO();
ProductDAO가 강하게 결합된다
- DI 이용
- 각 객체를 조율하는 제 3자에 의해 생성시점에 종속객체가 부여된다
- 객체는 종속객체를 생성하거나 얻지 않는다
- 종속객체는 종속객체가 필요한 객체에 주입된다
private dao;
이후 dao는 조립기가 di 주입
- 객체가 스스로 종속객체를 획득하는 것과는 반대로, 객체에 종속객체가 부여된다
Continue reading
- Plain Old Java Object
- 오래된 방식의 간단한 자바 오브젝트
- Java EE 등의 중량 프레임워크를 사용하면서, 해당 프레임워크에 종속된 무거운 객체를 만들게 된 것에 반발해서 사용하게 된 용어
- 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않는 자바 오브젝트를 지칭하는 말
- 언어 사양 외에 어떠한 제한에도 묶이지 않은 자바 오브젝트
- 다음과 같은 행동을 해서는 안된다
- 미리 정의된 클래스의 확장
public class Exam extends java.servlet.http.HttpServlet{}
- 미리 정의된 인터페이스의 구현
public class Exam implements javax.ejb.EntityBean{}
- 미리 정의된 어노테이션 포함
@javax.persistence.Entity public class Exam{}
Continue reading
- JavaEE가 제공하는 기능들을 대신 제공
- 가벼운 DI 및 AOP 기반 컨테이너이자 프레임워크
- 특징
- 자바 객체를 담고있는 컨테이너
- 컨테이너는 자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리
- 컨테이너로부터 필요한 객체를 가져와 사용
- DI 지원
- Dependency Injection
- 설정파일이나 어노테이션을 통해 객체 간의 의존관계 설정
- 객체는 의존하고있는 객체를 직접 생성하거나 검색할 필요가 없다
- AOP 지원
- Aspect Oriented Programing
- 스프링 자체적으로 AOP를 지원하고 있다
- 트랜잭션이나 로깅, 보안등의 기능을 분리하여 각 모듈에 적용 가능
- POJO 지원
- Plain Old Java Object
- 스프링 컨테이너에 저장되는 자바 객체는 특정 인터페이스를 구현하거나 클래스를 상속받지 않아도 된다
- 기존에 작성한 코드를 수정할 필요없이 스프링에 사용 가능
- 트랜잭션 처리를 위환 일관된 방법 제공
- JDBC를 사용하든 JPA를 사용하든 설정파일을 통해 트랜잭션 관련 정보 입력
- 트랙잭션 구현에 상관없이 동이란 코드를 여러 환경에서 사용 가능
- 영속성과 관련된 다양한 API 지원
- JDBC, myBatis, 하이버네이트 등 널리 사용되는 라이브러리 연동 지원
- 다양한 API 연동 지원
- JMS, 메일, 스케쥴등 다양한 API를 설정파일과 어노테이션을 통해 지원
- 자체적으로 MVC 프레임워크 제공
- 스트럿츠2, JSF와 같은 프레임워크 연동
Continue reading
- 폼 유효성 검사, 슬라이더 등의 추가 기능을 별도의 js파일로 제공하는 jquery 라이브러리
- 코어 플러그인
- 코어 프로젝트의 일부로 간주되는 jquery의 확장 부분
- ex) jquery UI
- 커뮤니티 플러그인
- jquery ui플러그인
- jquery에서 공식적으로 지정한 플러그인
- 많이 사용된 유명한 jquery플러그인을 모아 정리
- jquery UI 플러그인의 메서드 형태
- $(selector).플러그인이름(“메서드이름”)
- $(selector).darepicker(“getDate”)
- 플러그인 소스는 항상 jquery 라이브러리 소드보다 뒤에서 삽입해야 한다
Continue reading
1. 기본 시각 효과
Continue reading
- 객체초기화 방법
- var regExp = /정규표현식/[Flag];
- flag의 종류
- 자주 사용하는 flag
- g-Global-문자열 내의 모든 패턴을 찾는다
- i-ignore case - 문자열의 대소문자를 구별하지 않는다
- m-multi line - 문자열이 행이 바뀌어도 찾는다
Continue reading
- 이벤트 처리기 매핑 (event handler mapping)
- 이벤트가 발생하는 경우 특정 로직을 수행하기 위해 이벤트와 메서드를 연결
- window.onload = pageLoad;
- 이벤트 :load
- 이벤트 처리기 : pageLoad
- 이 둘을 연결하기 위한 코드 : 매핑코드
- 이벤트 객체
- 자바스크립트
- 브라우저마다 이벤트 객체 사용방법이 다르다
- 브라우저마다 이벤트 객체 속성이 다르다
- JQuery
- 모든 브라우저가 같은 방법으로 사용, 같은 속성을 가진다
- 속성
- event.pageX : 브라우저 화면 기준 마우스 x좌표
- event.pageY : 브라우저 화면 기준 마우스 y좌표
- event.preventDefalut() : 기본이벤트 제거
- event.stopPropagation() : 이벤트 전달 제거
Continue reading
- 개체에 접근할 때, 선택자 혹은 필터로 이루어지지만 추가적인 필터링이나 추가적인 탐색이 필요할 경우 사용
Continue reading
Continue reading
- 조작 관련 메서드
- 요소의 내용을 조작하는 메서드
- 요소를 추가하는 메서드
- 요소를 래핑하거나 바꿔치기하는 메서드
- 요소를 제거하거나 복사하는 메서드
Continue reading
- val()
- click()
- on()
- next()
- text()
- html()
- each()
Continue reading
$(selector) 또는 jQuery(selector)
Continue reading
- 가장 많이 사용되며 잘 만들어진 오픈 소스 자바스크립트 라이브러리
- Rich웹 UI를 개발하는데 도움이 되는 다양한 기능들 지원
- CSS에서 사용되는 선택자 개념으로 DOM 멤버에 접근 가능
- 플러그인 개념 도입, 기능 확장이 쉬움
- 특징
- 편리한 CSS 선택자
- 크로스 브라우저 지원
- 코드가 사용될 브라우저를 신경 쓸 필요가 없다
- 메서드 체이닝
- 메서드를 연속으로 사용
- jquery가 제공하는 모든 메서드는 반환값이 효과가 반영된 jquery개체
- 때문에 메서드를 이어서 사용 가능
- $(선택자).메서드().메서드().메서드();
- $(‘tr:odd’).css(“font-weight”,”bold).css(“color”,”blue”);
- Ajax 지원
- 풍부한 플러그인 지원
- jQuery 사이트
Continue reading
- Integer나 Double 클래스처럼 객체를 포장해주는 Wrapper 클래스
- 모든 타입의 참조변수를 저장할 수 있다
- Optional 객체 사용시 NullPointerException 메서드로 간단한 회피 가능
- 복잡한 조건문 없이 null값으로 발생하는 예외 처리 가능
Continue reading
1. 스트림API
- 배열이나 컬렉션에 접근하기 위해서는
- 매번 새로운 코드 작성, 반복문 사용
- 코드가 길어지고 가독성 하락
- 위 문제점 해결을 위해 스트림 API 도입
Continue reading
1. 람다식이란
- 메서드를 하나의 식으로 표현한 것
- 메서드
- int min(int x, int y){
- return x<y?x:y;
- }
- 람다식
- (x,y)->x<y?x:y
- (매개변수 목록) -> {함수몸체}
- 클래스 작성 및 객체생성 없이 메서드 이용 가능
- 람다식은 일종의 익명클래스와 같다고 할 수 있다
- 람다식은 매개변수로 전달될 수 있으며, 결과로 반환될 수도 있다
- 유의사항
- 매개변수의 타입을 추론할 수 있는 경우 타입 생략 가능
- 매개변수가 하나인경우 괄호 생략 가능
- 함수의 몸체가 하나의 명령문일 경우 중괄호와 세미콜론 생략 가능
- 함수의 몸체가 하나의 return문으로만 이루어진 경우 중괄호 생략 불가능
- return문 대신 표현문 사용 가능
Continue reading
1. 내부클래스란
- 클래스 내에 선언된 클래스
- 주로 AWT나 Swing과 같은 GUI어플리케이션 이벤트처리에 사용
- 클래스 내에 내부클래스를 선언하면 두 클래스의 멤버 간 접근이 용이
- 외부에는 불필요한 클래스를 감춘다
- 내부클래스 선언 위치에 따른 종류
- 인스턴스 클래스
- 외부클래스의 멤버변수 선언위치에 선언
- 외부클래스의 인스턴스멤버처럼 다루어진다
- 스태틱 클래스
- 외부클래스의 멤버변수 선언위치에 선언
- 외부캘르새의 static 멤버처럼 다루어진다
- 지역 클래스
- 외부클래스의 메서드나 초기화블럭 안에 선언
- 선언된 영역 내부에서만 사용가능
- 익명 클래스
- 클래스의 선언과 객체의 생성을 동시에하는 일회용 클래스
- 내부클래스도 클래스이기에 abstract나 final 등의 제어자 사용 가능
- 추가적으로 private, protected 제어자 사용 가능
Continue reading
- 모든 클래스의 최고 상위 클래스
- object클래스의 멤버들은 모든 클래스에서 바로 사용 가능
- 8개의 메서드 보유
- 객체를 처리하기 위한 메서드
- clone() : 객체의 복사본을 만들어 리턴
- equals() : 객체의 주소값 비요
- finalize() : 객체가 쓸모없어졌을 때 가비지컬렉터에 의해 호출
- getClass() : 현재 객체의 클래스의 객체를 리턴
- hashCode() : 객체에 대한 해시코드 메모리주소 리턴
- toString() : 객체를 문자열로 표현하는 값 리턴
- 쓰레드를 위한 메서드
- notify() : 객체의 모니터에 대기하고있는 단일 쓰레드를 깨운다
- notifyAll() : 객체의 모니터에 대기하고있는 모든 클래스를 깨운다
- wait() : 다른 쓰레드가 현재 객테에 대한 메서드를 호출할 때까지 현재 쓰레드가 대기하고있도록 한다
Continue reading