변수의 타입 변수의 자료형은 '기본형' '참조형' 두 가지로 나뉜다. 기본형 변수는 data를 저장하고, 참조형 변수는 값이 저장되어 있는 주소를 값으로 갖는다. 상수와 리터럴 (constant & literal) final int Max_speed = 10; 다음과 같이 작성했을 때 final 키워드에 의해 변수 Max_speed는 상수화된다. 상수는 반드시 선언과 동시에 초기화하여야 한다. 이와 반대로 1, 2, 'A'와 같이 그 자체로 값을 의미하는 것을 '리터럴'이라고 한다. 값을 출력할 때 printf()를 사용하면 지시자 (specifier)를 통해 변수의 값을 여러가지 형식으로 바꿔서 출력할 수 있다. Scanner Scanner 클래스로 프롬프트 창에서 입력을 받아 사용할 수 있다. imp..
자바란 썬 마이크로시스템즈에서 개발한 객체지향 프로그래밍 언어이다. 운영체제에서 프로그램을 변경하지 않고도 실행이 가능하다. 자바의 특징을 몇 가지 정리해보면, 1) 자동 메모리 관리 (Garbage Collection) 가비지 컬렉터가 자동적으로 메모리를 관리해주기 때문에, 프로그래머가 따로 메모리를 관리하지 않아도 된다. 2) 네트워크와 분산처리를 지원 풍부하고 다양한 네트워크 프로그래밍 라이브러리를 통해, 비교적 짧은 시간에 네트워크 관련 프로그램을 개발할 수 있다. 3) 멀티 쓰레드 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당한다. 4) 동적 로딩 실행 시 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다. JVM Virtaul Machine은 소프트웨어로 구현..
그리디 알고리즘(Greedy Algorithm)이란? 매 단계에서 '가장 좋아보이는' 해답을 선택하는 알고리즘이다. 지역적인 최적의 해결 방법을 통해 전역적인 최적의 해결 방법을 찾는 것이다. 아래는 그리디 알고리즘으로 해결할 수 있는 대표적인 두 문제이다. 1) 최단 작업 우선 스케일링 예제를 통해 알아보자. 1. 은행 창구에 줄을 서서 사람들이 차례를 기다리고 있다. 각자의 업무를 보는 데 걸리는 시간은 각자 다르다. 2. 대기열에 기다리고 있는 사람들은 평균 대기 시간이 최소화 되도록 순서를 재배치하는 것에 동의했다. 3. 평균 대기 시간이 최소가 되는 순서 배치를 구하시오. #include #include #include #include using namespace std; template aut..
첨부파일이 이미지인 경우, 클릭했을 때 화면에 크게 원본 파일을 넘겨줘야 하고, 일반 첨부파일인 경우에는 다운로드를 기본으로 실행해야 한다. MIME 타입이란? https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types MIME 타입 - HTTP | MDN MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘입니다: 웹에서 파일의 확장자는 별 의미가 없습니다. 그러므로, 각 문서와 함께 올바른 MIME 타입을 전송하도 developer.mozilla.org 다운로드 시 MIME 타입은 고정되기 때문에 메서드는 아래와 같이 시작하게 된다. @GetMapping(value = "/download", produce..
쓰던거 날려서 다시 쓰기 😊 Spring Gradle 환경에서 첨부파일 구현하는 작업을 해보겠다. 프론트 단에서는 Axios를 사용하고 있으므로 JSON 데이터로 반환하는 Response 방식을 따라갈 것이고, Controller에서 Upload를 처리할 수 있도록 테스트까지 진행하려 한다. 1. Configuration 설정 (1) WebConfig AbstaractDispatcherServletInitializer를 상속받아 WebConfig를 구현한다. customizeReegistration을 Override하여 내부에서 MultiPargConfigElement 객체를 만들어주고 파일이 저장될 location, maxFileSize, maxRequestSize, fileSIezThresHold를 ..
https://www.baeldung.com/spring-handler-mappings 이 문서를 참고해보면 다음과 같이 나와있다. In Spring MVC, the DispatcherServlet acts as front controller – receiving all incoming HTTP requests and processing them. Simply put, the processing occurs by passing the requests to the relevant component with the help of handler mappings. HandlerMapping is an interface that defines a mapping between requests and handler ..
지난 포스팅에서 menuId에 대한 Controller 통합을 위해 BoardService Interface를 설계하고, 하나의 BoardController에서 menuId에 맞는 Service 객체를 반환하는 Mapper 클래스를 만들고 별 난리를 떨었다 결론은 실패였다. @RequestBody로 받을 수 있는 객체가 제너릭이 불가능한 점, java - Interfaces and @RequestBody - Stack Overflow Interfaces and @RequestBody I'm currently working on a project which allows users to book (via the web) the use of a chosen resource for a given period o..
이번 Spring 웹 개발을 진행하면서, NormalBoard를 상속받는 다양한 Type의 Board의 CRUD를 전부 설계하는 과정에서 코드 중복, URL mapping등에서 수정해야할 필요성을 느꼈다. 비슷한 맥락의 Board CRUD이지만, 엄연히 따로 존재하는 Entity이기에 Service로직을 따로 가져가야 한다는 점에서 괴리를 느꼈다. Controller에서 menuId를 기준으로 등록, 수정, 삭제를 해야했으나 다르게 Service 파일을 생성하였고 이에 따라 ContestBoard의 Controller를 따로 설계하는 바람에 menuId Parameter가 따로 존재하는 바람에 menuId의 필요성이 없어지는 상황이 생겼다. 그래서, BoardController로 통합을 하고 제네릭을 사..
https://blog.sonim1.com/224 PR 날릴 때 항상 이전 커밋까지 다 딸려와서 히스토리에 남는 것이 항상 고민이었는데, 문제의 원인을 "브랜치 생성"에서 찾았다. feature/contest라는 upstream branch에서 추가적으로 작업해 다시 Pull Request를 올리는 상황이라고 가정했을 때 그동안 로컬에 있는 브랜치에서 새로 브랜치를 따서 작업했었다. 그러다 보니 upstream/feature/contest 와 로컬에 있는 Feature/contest는 엄연히 다른 브랜치인데 PR을 올리니까 새로운 커밋들이 쫘르륵 딸려나온 것. 깔끔하게 커밋하기 위해서는 > git checkout upstream/feature/contest > git branch Feature/#56 (..