728x90
반응형

람다식

- 익명 함수(anonymout function)를 생성하기 위한 식

- 객체 지향 언어보다는 함수 지향 언어에 가깝다.

- 자바 코드가 간결해진다.

- 컬렉션의 요솔르 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다.

- (매개변수) -> { 실행코드 } 형태로 작성

 

람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체

// Runnable 인터페이스 익명 구현 객체 생성하는 전형적인 코드
Runnable runnable = new Runnable() {
    public void run() { ... }
}

// 익명 구현 객체를 람다식으로 표현
Runnable runnable = () -> { ... };

 

 

타겟 타입과 함수적 인터페이스(@FunctionalInterface)

- 람다식의 타겟 타입은 하나의 추상 메소드가 선언된 인터페이스(두 개 이상 선언된 것은 타겟 타입 사용 불가)

- @FunctionalInterface 어노테이션을 인터페이스 선언 시 붙여주면

  두 개 이상의 추상 메소드가 선언되면 컴파일러가 체킹해 오류를 발생해준다. (선택사항)

@FunctionalInterface
public interface MyFunctionalInterface {
    public void method();
    public void otherMethod();	// 컴파일 오류
}

 

 

정적 메소드와 인스턴스 메소드 참조

- 정적(static) 메소드를 참조할 경우 클래스 이름 뒤에 :: 기호를 붙이고 정적 메소드 이름을 기술

public class Main {
    public static int staticMethod(int x, int y) {	// 정적 메소드
        return x + y;
    }

    public int insatanceMethod(int x, int y) {	// 인스턴스 메소드
        return x + y;
    }

    public static void main(String[] args) {
        IntBinaryOperator oper;

	    // 정적 메소드 참조
        oper = (x, y) -> Main.staticMethod(x, y);
        System.out.println("결과1 : " + oper.applyAsInt(1, 2));

        oper = Main::staticMethod;
        System.out.println("결과2 : " + oper.applyAsInt(3, 4));

	    /// 인스턴스 메소드 참조
        Main obj = new Main();
        oper = (x, y) -> obj.insatanceMethod(x, y);
        System.out.println("결과3 : " + oper.applyAsInt(5, 6));

        oper = obj :: insatanceMethod;
        System.out.println("결과4 : " + oper.applyAsInt(7, 8));
    }
}

 

728x90
반응형
728x90
반응형

CTO란?

Chief Technology Officer

CTO는 최고 기술 경영자를 뜻하며,

기업 내 기술 관련 활동을 총괄하고 최종 의사 결정을 내리는 역할을 담당한다.


나는 아직 주니어 개발자의 입장이지만

취업 후 꾸준한 자기개발을 통해 실력을 성장시키고,

IT 최신 트렌드 동향을 파악하고 습득해 나가면서

앞으로 10년 이내에 CTO가 되는 것을 하나의 목표로 정했다.

 

728x90
반응형
728x90
반응형

지난 파이널 프로젝트때 회원관리 부분을 담당했었는데

살짝 애먹었던 로그아웃 세션 관련하여

또 한번 마주하게 되어 해결방법을 기록해본다.

 

트러블슈팅을 마주하게 됐던 상황은

컨트롤러 상단에 SessionAttributes를 설정하고

회원가입이나 로그인 시 회원정보 세션을 유지하게 해두었는데

기존에 배웠던 session.invalidate()로는 세션 해제가 되지 않고 세션값이 계속 유지되었다.

쿠키도 삭제해보고 여러가지 방법을 시도해봤는데 새로운 사실을 알게 되었다.

SessionAttributes의 경우 sessionStatus를 사용해 세션을 정리한다고 해서 

invalidate 대신 사용해보니 정상적으로 로그아웃 시 세션 해제가 되었다. 

 

SessionStatus는 @sessionAttributes를 활용해

session에 남긴 데이터를 제거하는데 활용하는 인터페이스라고 한다.

 

 

session : 일반적인 HttpSession 객체

sessionStatus : Spring MVC 컨트롤러에서 세션 관리를 위한 특수한 용도로 사용되는 객체

 

 

컨트롤러에 SessionAttributes로 세션 설정

sessionStatus를 사용한 로그아웃 세션 해제

  @RequestMapping("/logout")
    public String logout(SessionStatus sessionStatus) {
        sessionStatus.setComplete();;
        return "redirect:/";
    }

 

 

 

스프링 문서

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/support/SessionStatus.html

 

SessionStatus (Spring Framework 6.0.12 API)

Mark the current handler's session processing as complete, allowing for cleanup of session attributes.

docs.spring.io

 

728x90
반응형
728x90
반응형

이번 추석 연휴기간동안 나동빈 개발자님의 인프런 강의로 JSP 웹사이트 구축을 복습해보는 시간을 가졌다.

 

처음에는 게시판 웹 사이트를 만들어보았고 (클릭 시 GitHub이동)

두 번째로는 회원 전용 강의 평가를 할 수 있는 웹 사이트를 만들었다.

 

스프링, 스프링부트만 최근에 사용하다가 단순 JSP로 웹 사이트를 구축해보니

확실히 직접적으로 코딩해야하는 양이 많고, 사소한 오류를 찾는데 시간이 꽤나 소요되었다.

 

디자인의 경우 부트스트랩을 활용했는데 나같은 경우는 최신화된 요소로 작업하기 위해

CDN으로 포함하여 적절하게 구성했다.

기능을 중점적으로 작업하면서도 디자인 부분 일부는 적절하게 수정해서

단순 JSP 웹 사이트 프로젝트를 완성해보았다.

 

 

JSP 강의평가 웹 사이트 개발하기
- 소요 기간 : 2일
- 사용 IDE : STS

 

기능

- 부트스트랩을 활용한 디자인 적용

- 로그인, 로그아웃, 회원가입

- 강의 평가 데이터베이스 구축 및 데이터 모델링

- 이메일 인증

- 미니 검색 엔진 (필터링 포함)

- 강의평가 조회

- 강의평가 등록 (모달), 삭제, 추천

- 강의평가 신고 (모달 - 관리자 이메일로 내용 발송)

- XSS 방어

 

추가로 구현해볼 기능

- 회원정보 수정, 회원 탈퇴

- 글 수정

 

 

 

- JSP 강의 평가 웹사이트 소스 코드

https://github.com/jangmimi/LectureEvaluation

 

GitHub - jangmimi/LectureEvaluation: LectureEvaluation web site

LectureEvaluation web site. Contribute to jangmimi/LectureEvaluation development by creating an account on GitHub.

github.com

728x90
반응형

'Coding > Study' 카테고리의 다른 글

[IT 용어] API (Application Programming Interface)  (0) 2023.10.14
[JAVA] 람다식 Lambda  (0) 2023.10.05
[GitHub] 깃, 깃허브  (0) 2023.09.28
[Kotlin] 코틀린 맛보기  (0) 2023.09.22
[JAVA] StringBuilder와 StringJoiner  (0) 2023.09.19
728x90
반응형

Git(깃) :

- 분산형 버전 관리 시스템

- 모든 소스코드가 공개된 오픈 소스

- 리눅스, 맥OS, 윈도우 운영체제 지원

- 장점) 이력 기록 및 추적, 원격 저장소 및 공유, 변경 이력 병합

 

GitHub(깃허브) :

- 깃을 이용하여 관리하는 프로젝트의 원격 저장소 역할을 수행하는 웹 호스팅 서비스

- 장점) 호스팅 서비스, 공개 및 비공개 저장소, 고급 기능

 

 

터미널에서 새 브랜치 생성 후 원격 저장소에도 반영하는 방법

- 터미널에서 새 브랜치 생성

  >> git branch 새브랜치명

 

- 현재 브랜치 상태 확인

  >> git branch -a

  (a는 all의 약자로, 현재 저장소에서 로컬 브랜치와 원격 브랜치 모두 보여주도록 하는 옵션)

새 브랜치를 로컬 브랜치에 생성 후 확인 모습 (원격 브랜치에는 새 브랜치가 반영 안된 상태)

- 원격 브랜치에 반영하기

  >> git push origin 새브랜치명

새 브랜치를 원격 브랜치에 반영 후 확인 모습

 

 

 

참고 서적

박미정의 깃&깃허브 입문

728x90
반응형

+ Recent posts