본문 바로가기
레거시

2022.02.21의 기록

by GroovyArea 2022. 2. 21.

▶ 오늘 실현 가능한 세부 목표

=>  공부 관련

1) 람다와 스트림

2) 대답 못한 질문 답 정리

3) 자바 리팩토링

4) 금일 배운 내용 복습

 

=> 파이널 프로젝트 관련

1) 화면 설계서 회의

 


공부 내용

EL 함수

  • 함수 : 매개변수로 값을 제공 받아 처리하고 반환
  • 메서드 : 필드를 처리하기 위함
  • ⇒ EL 함수로 호출되는 메서드는 반드시 static 메서드로 선언

TLD파일

function

  • EL 함수를 등록하기 위한 상위 엘리먼트

name

  • EL 함수명을 설정하는 엘리먼트

function-class

  • EL 함수에 의해 호출되는 메서드가 선언된 클래스를 설정하는 엘리먼트

function-signature

  • EL 함수에 의해 호출되는 메서드를 설정하는 엘리먼트

short-name

  • TLD 파일의 이름을 설정하기 위한 엘리먼트

uri

  • JSP 문서에서 TLD 파일을 불러오기 위한 식별자를 설정하기 위한 엘리먼트
  • ⇒ WAS가 시작될 때 불러들임 절대 중복되면 안됨

tag

  • JSP 문서에서 사용할 커스텀 태그를 설정하기 위한 상위 엘리먼트

name

  • 커스텀 태그명을 설정하기 위한 엘리먼트

tag-class

  • 커스텀 태그를 사용할 경우 호출될 메서드악 선언된 클래스를 설정

body-content

  • 커스텀 태그의 태그내용을 설정하기 위한 엘리먼트

required

  • 커스텀 태그의 속성에 대한 필수 여부를 설정하는 엘리먼트
  • ⇒ false : 선택 속성(기본), true : 필수 속성

rtexprvalue

  • 태그 속성값으로 JSP Expression 또는 EL의 사용 여부를 설정하는 엘리먼트
  • ⇒ false : 사용 불가능(기본), true : 사용 가능

⇒ 포인트는 taglib 디렉티브로 tld 파일을 불러와서 함수를 사용 가능하다는 점

EL Operator

  • 산술, 논리, 관계, empty 연산자. JSTL과 썼을 때 의미가 있음.
  • 쓸 일이 많이 없음..

empty 연산자

  • EL 표현식으로 제공되는 값(객체)이 있는 경우 false를 제공하고 EL표현식으로 제공되는 값이 없거나 비어 있는 경우 true를 제공하는 연산자

Custom Tag

  • 스크립트 요소가 많아지면 JSP코드가 복잡해짐
  • 스크립틀릿 대신 사용하기 위해 프로그래머가 직접 만든 태그
  • 자바 명령어를 없애기 위해서 사용한다.
  • ⇒ 태그 클래스 작성 >> TLD 파일에 커스텀 태그 등록 >> JSP 문서에서 커스텀 태그 사용

태그 클래스

  • JSP 문서에서 커스텀 태그를 사용할 경우 호출될 메서드가 선언된 클래스
  • ⇒ TagSupport 클래스, BodyTagSupport 클래스, SimpleTagSupport 클래스 중 하나를 상속받아 작성
  • ⇒ 커스텀 태그 사용 시 호출되는 메서드는 부모클래스의 메서드를 오버라이드 선언하여 작성

PageContext.getOut()

  • 응답결과를 생성하기 위한 출력스트림을 반환한느 메서드
  • ⇒ 출력스트림의 메서드를 호출하여 클라이언트에게 결과(html)를 전달하여 응답

생성자

  • 인스턴스 생성시 필드 초기화 작업 → 필드값 저장

JSTL

  • 많이들 사용하는 커스텀 태그들을 모아놓은 라이브러리

Core

  • EL 지원, 프로그램의 흐름 제어, URL 주소 관리등의 태그 제공

1. set 태그

  • 스코프 객체에 속성값을 저장하거나 변경하기 위한 태그
  • 인스턴스 필드값 변경 가능
  • target 속성 : 스코프 객체에 저장된 속성값(인스턴스)을 속성값으로 설정
  • property 속성 : 필드값을 변경할 인스턴스의 필드명을 속성값으로 설정

var 속성

  • 스코프 객체의 속성명을 속성값으로 설정

value 속성

  • 스코프 객체의 저장될 속성값(인스턴스)를 속성값으로 설정
  • ⇒ 속성값으로 EL 설정 가능
  • ⇒ 속성값 같을 경우 속성값 변경
  • EL에 의해 제공된 속성값이 인스턴스인 경우 toString() 자동 호출 & 값을 반환하는 메소드 호출 가능
  • ⇒ 인스턴스에 toString 메서드가 오버라이드되지 않았다면 Object 클래스의 toString() 메서드 호출

scope 속성

  • 스코프 객체의 저장된 속성값 사용 범위를 속성값으로 설정
  • ⇒ page(기본), request, session, application

2. remove 태그

  • 스코프 객체에 저장된 속성값을 제거하는 태그

3. out 태그

  • 스코프 객체의 속성값을 클라이언트에게 전달하는 태그
  • EL을 사용하여 HTML 태그가 포함된 문자열을 클라이언트에게 전달할 경우 태그가 적용되지만, out 태그를 사용하여 태그가 포함된 문자열을 전달할 경우 태그도 문자열로 적용되어 출력. → XSS 공격을 방어하기 위해 나온 태그

Core - 흐름 제어 태그

if 태그

  • 조건에 따라 태그내용의 출력을 선택하는 태그 - else 기능 미존재
  • test 속성 : false 또는 true 중 하나를 속성 값으로 설정
  • ⇒ 속성값이 false인 경우 태그 내용을 출력하지 않고 true인 경우 내용 출력을 선택하는 속성

choose 태그

  • 조건에 따라 태그내용 출력을 선택하는 상위태그
  • ⇒ 하위 태그를 이용하여 태그 내용을 선택하여 출력
  • ⇒ 하위 태그 : when 태그(1개 이상), otherwise 태그(0개 또는 1개)
  • ⇒ choose 태그의 하위태그를 제외한 코드가 존재하 경우 에러 발생 - JSP 주석 제외
  • when 태그 : 조건에 따라 태그내용 출력을 선택하는 태근
  • test 속성 : false 또는 true 중 하나를 속성 값으로 설정
  • ⇒ 속성값이 false인 경우 태그 내용을 출력하지 않고 true인 경우 내용 출력을 선택하는 속성
  • otherwise 태그 : 모든 when 태그의 조건이 거짓인 경우 태그내용을 출력하는 태그

Formatter

  • 숫자, 날짜, 시간 형식 변경 및 국제화, 다국어 지원등의 태그 제공

Database

  • 테이블의 행에 대한 삽입, 변경, 삭제, 검색 기능의 태그 제공

Xml

  • XML 문서에 대한 처리 기능의 태그 제공

Functions

  • 문자열 처리 기능의 EL 함수 제공

 개인 공부

Thread

동기화

  • 멀티 스레드 환경에서 동일한 메모리에 접근하는 작업을 할 때 값의 불일치가 나타날 수 있다.
  • 이를 위해 메소드나 영역으로 동기화 키워드를 붙여주면 해당 스레드 작업이 끝나기 전에 다른 스레드가 접근할 수 없게 된다.

Volatile

  • 멀티 코어 프로세서에서는 별도의 캐시를 가지고 있다
  • 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다.
  • 그러다 보니 도중에 메모리의 변수 값이 변경되었는데도 캐시에 저장된 값이 갱신되지 않아서 메모리에 저장된 값이 다른 경우가 발생
  • 스레드가 멈추지 않고 계속 실행.
  • volatile 키워드를 붙이면 캐시가 아닌 메모리에서 읽어오기 때문에 캐시와 메모리간의 값의 불일치가 해결된다.

복잡도(Complexity)

  • 알고리즘의 성능을 나타내는 척도
  • 시간(Time)복잡도와 공간(Space)복잡도로 나눌 수 있다.
  • 시간 & 공간 복잡도는 거래 관계 (Trade-off) 성립. ⇒ 상호 반비례적 관계? → 메모제이션 기법

시간 복잡도

  • 문제를 해결하는데 걸리는 시간과 입력의 함수를 가리킨다.
  • 알고리즘을 위해 필요한 연산 횟수
  • 특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래 걸리는지를 의미
  • 빅오(Big-O) 표기법 : 가장 빠르게 증가하는 항만을 고려하는 표기, 즉 함수의 상한만 나타냄.

int []arr = {1,2,3,4};*//N개의 데이터*

int sum = 0;

for(int value : arr) sum += value;

⇒ 위 코드는 연산횟수가 N에 비례함. 이러한 연산의 횟수는 N이 증가할수록 대폭 감소함.

영향력이 큰 부분은 N에 비례하는 연산을 수행하는 For문이고, 시간 복잡도를 O(N)이라고 한다.

공간 복잡도

  • 알고리즘을 위해 필요한 메모리의 양
  • 특정한 크기의 입력에 대하여 얼마나 많은 메모리를 차지하는지를 의미
  • 역시 빅오 표기법 이용하며, 메모리 사용량 기준은 MB 단위로 제시됨.

⇒ 코딩 테스트 문제 풀이는 대부분 배열(또는 리스트)을 사용한다. 고전적인 프로그래밍 언어에서 정수형 자료형인 int를 기준으로 배열 크기에 따른 메모리 사용량은 다음과 같다. (컴파일러에 따라 조금씩 달라질 수 있음)

  • int a[1000]: 4KB
  • int a[1000000]: 4MB
  • int a[2000][2000]: 16MB

람다식

  • 람다식의 도입으로 자바는 객체지향언어인 동시에 함수형 언어가 되었음.
  • 메서드를 하나의 식으로 표현한 것. 익명함수라고도 표현
  • 람다식은 메서드의 매개변수로 전달 가능하고, 메서드의 결과로 반환될 수도 있음
  • 메서드를 변수처럼 다루는 것이 가능해졌다

메서드와 함수의 차이

  • 메서드 : 객체의 행위나 동작을 의미, 특정 클래스에 반드시 속해야 한다는 제약이 있음
  • 함수: 제약 없이 하나의 독립적인 기능을 함

함수형 인터페이스

  • 람다식은 익명 클래스의 객체와 동등함.
  • 하나의 메서드가 선언된 인터페이스를 정의해서 람다식을 다루는 것은 자바의 규칙을 어기지 않으면서도 자연스러움
  • 인터페이스를 통해 람다식을 다루기로 결정되었으며, 이러한 인터페이스를 함수형 인터페이스로 부름.
  • 오직 하나의 추상 메서드만 정의되어 있어야 함. 람다식과 1:1로 연결 가능해야함. 단 static, default메서드는 예외.

람다식의 타입과 형변환

  • 람다식은 오직 함수형 인터페이스로만 형변환이 가능하다.

외부 변수를 참조하는 람다식

  • 람다식 내에서 참조하는 지역변수는 JINAL이 붙지 않았어도 상수로 간주된다.
  • 외부 지역변수와 같은 이름의 람다식 매개변수는 허용되지 않는다.

java.util.function패키지

  • 대부분의 메섣느느 타입이 비슷하며 매개변수의 개수도 비슷하다, 제너릭 메서드로 정의하면 문제가 되지 않는다
  • 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 정의해 놓음.
  • 이 것을 활용하는 것이 유지보수나 재사용성 측면에서 좋다.

파이널 프로젝트

> 회의 예정

=> 화면 설계서 트레이너 부분 및 ui

=> 정기 배송 건 처리 방법?

=> 정기 PT 문의 부분 처리 방법?

=> 대략적인 계획 수립 완료

=> 내일도 8시 회의 

반응형

'레거시' 카테고리의 다른 글

2022.02.23의 기록  (0) 2022.02.23
2022.02.22의 기록  (0) 2022.02.22
2022.02.20의 기록  (0) 2022.02.20
2022.02.19의 기록  (0) 2022.02.19
2022.02.18의 기록  (0) 2022.02.18