본문 바로가기

전체 글

(55)
[JAVA] 불변성 - Chapter 04 함수형 프로그래밍 4장에서는 불변성을 다뤘다.JDK에서 제공하는 불변 타입과, 자료 구조를 불변하게 만드는 방법에 대해 소개하였다. 객체 지향 프로그래밍의 가변성객체는 일반적으로 setter 메서드를 사용하여 객체의 상태를 변화시킬 수 있다.JDK의 컬렉션 프레임워크들도 대부분 가변상태와 변경 가능한 방식 기반으로 설계 되었다. (ex List.add, List.remove) 가변 상태는 복잡성과 불확실성을 유발한다.이러한 가변 상태의 공유는 동시성 프로그래밍에서 문제가 발생 할 수 있다. 함수형 프로그래밍의 불변성불변성은 생성 후 변경할 수 없는 상태이다.자료 구조를 변경하려면 새로운 복사본을 생성해야 한다. 아래에서 몇가지 불변성의 특징에 대해 알아보자. 1) 예측 가능성 (Predictability..
[JAVA] 함수형 인터페이스 변형 - Chapter 03 함수형 자바 프로그래밍 3장을 읽었다.주로 여기서는 함수형 인터페이스의 변형 혹은 합성을 통한 확장성을 다룬 것 같다. 먼저 대표적인 4가지 함수형 인터페이스를 살펴보자. 1) FunctionFunction 로 나타낼 수 있으며, T타입의 입력을 받아 R타입의 결과를 return하는 인터페이스이다. 2) ConsumerConsumer 로 나타낼 수 있으며, T타입의 입력을 받지만, return하는 것 없이, 말 그대로 소비하는 인터페이스이다.  3) SupplierSupplier 로 나타낼 수 있으며, 아무 입력을 받지 않고 T타입의 결과를 return하는 인터페이스이다.Consumer와 반대 개념이라 생각된다.지연 실행에 Supplier로 래핑한 후 get 메소드를 통해 호출 하는 식으로 사용된다 한다..
[JAVA] 자바 람다 (Lambda) 와 캡처 (Capture) - Chapter 02 함수형 자바 프로그래밍 챕터 2를 공부하였다.2장에서는 람다 표현식에 대해 다뤘다.그 중에서 람다에서 외부 변수를 사용 할 때의 특징을 좀 더 알아보았다. 람다 (Lambda)람다 표현식은 0개 이상의 매개변수를 갖고 값을 반환 할 수 있다. 먼저, 람다의 문법부터 살펴보면,() -> {} 형태로 이루어져 있다. 1) 여기서 매개 변수 (parameter) 들은 쉼표로 구분하며,메서드 인수와 다르게 타입을 추론 할 수 있는 경우에는 타입을 생략 할 수 있다.다만, 묵시적으로 타입 지정된 매개변수와 명시적으로 타입이 지정된 매개변수를 혼용하여 기재 할 수는 없다. 2) 매개변수와 람다의 바디는 화살표 (->) 로 이어져 있다. 3)한 줄로 표현된 경우에는 중괄호 생략이 가능하며, return없이 암시적으로..
[JAVA] 일급 함수, 고차 함수, 커링 함수 (Currying Function) 이해해 보기 - Chapter 01 함수형 자바 프로그래밍 1장을 읽으면서 커링 함수가 잘 이해가 안되어서 직접 이것저것 해보았다.커링 함수나 고차 함수의 예제들의 계시물은 JAVA로 구현한 것이 많이 없어 슬펐다... (대부분 Javascript였다...) 먼저 커링 함수 (Currying Function)에 들어가기 앞서서, 함수형 프로그래밍을 이해하기 위해 일급 함수와 고차 함수를 이해해 보자.일급 함수함수 자체를 다른 함수에 인수로 전달 하거나 반환값으로 사용될 수 있다.변수에 할당 할 수 있는 함수이다. 고차 함수함수를 인수로 받을 수 있다.함수를 반환 할 수 있다. 고차함수는 수학의 범함수와 느낌이 비슷하다고 한다. (함수를 입력받는 함수. 정의역이 함수집합, 공역이 실수나 복소수)예제에서 어떤게 일급함수이고 고차함수인지 구분해..
[SpringBoot] userRole에 따른 접근 제한 시 페이지 이동 + 메세지 출력 팀프로젝트 중 플래너 등급 유저만 포토폴리오 작성 기능이 가능하도록 하였다. 원래의 경우, 버튼 작성을 눌렀을 시, ajax를 통해 planner를 찾도록 해, exception이 날 경우, alert와 redirect 시켜 주었었다. function portfolio() { $.ajax({ type: 'GET', url: 'boards/portfolio', success: function (check) { if (check == false) { alert("플래너 등급 유저만 작성 가능합니다.") location.href="/" } else { location.href = "/boards/portfolio/write" } } }); } // 포토폴리오신청 //포토폴리오 작성 권한 확인 @Response..
[JavaScript] 이미지 미리보기 createObjectURL() vs FileReader() 프로필 사진 변경 기능을 구현하면서, 변경할 프로필 사진을 선택하면 그 이미지로 미리보기를 보여주고 싶었다. 처음에는 blob url을 생성하여 background-image를 설정해 주었지만, URL을 없애주는revokeObjectURL()을 계속 호출해야 한다. revokeObjectURL은 createObjectURL()을 통해 생성된 object URL을 삭제한다. Object URL은 revokeObjectURL을 호출하기 전이나 이 URL이 생성된 document의 라이프타임이 끝나기 전까지 유효하다. 이것이 계속해서 쌓일 경우에 메모리 누수가 생길 수 있어 사용 후 URL을 제거해 주는 것이 좋다. 따라서 fileReader를 이용하여 target.result의 value값을 이미지 태그의 ..
[ajax] ajax로 json과 file 동시에 전송하기 프로젝트에서 유저의 프로필을 바꾸는 기능을 구현 중, 프로필 사진과 비밀번호, 닉네임을 한 컨트롤러 내에서 바꾸고 싶어 방법을 찾아보았다. 원래 ajax를 두번 실행시켜 따로따로 하고 싶었지만, repository에서 user의 변경사항을 두번 save하는 것은 낭비인 듯 싶어 한번에 처리하였다. 1. JavaScript function editInfo() { let userId = [[${userId}]]; let requestData = { password : $("#password").val(), nickname : $("#nickname").val() } let formData = new FormData(); formData.append("img", image); formData.append("r..
[SpringBoot] SpringBoot로 AWS S3 Bucket에 이미지 업로드 본격적으로 프로젝트에서 이미지를 S3 bucket으로 업로드 하기 위해 업로드 테스트 스크립트를 작성해 보았다. 1. bulid.graddle //aws implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' implementation "com.amazonaws:aws-java-sdk-s3:1.12.395" aws 관련 implementation을 추가해 주었다. 2. application.yml # multipart 설정 spring.servlet.multipart.max-file-size: 10MB spring.servlet.multipart.max-request-size: 10MB # aws 설정 cloud:..