[JAVA] JavaIo OutPutStream에 대해서
2024. 1. 11. 22:09
몰아 넣기
OutPutStream OutputStream은 외부로 데이터를 출력하는 역할을 수행한다. 바이트 기반 출력 스트림의 최상위 추상클래스이기 때문에 모든 바이트 기반 출력 스트림 클래스는 이 클래스를 상속 받아 기능을 재정의 한다. write시 바로 전송하지 않고 버퍼에 저장한다음 일정량의 데이터가 모이면 한번에 전달한다. Closable을 구현하고 있어 명시적으로 close 하거나 try-with-resource 사용 가능하다 - write : stream으로 데이터를 쓴다. - flush : 버퍼의 모든 데이터를 출력하고 비운다. - close : stream을 닫고 더 이상 쓰지 않는다. ByteArrayOutputStream byte array에 값을 쓸 수 있다. 메모리가 destination이 ..
[JAVA] JavaIO InputStream 에 대해서
2024. 1. 10. 21:59
몰아 넣기
Java IO 란? Java 1.0에서 처음 도입 파일과 네트워크에 데이터를 읽고 쓸 수 있는 API 제공 byte단위로 일고 쓸 수 있는 stream(InputStream과 OutputStream) blocking으로 동작 Java IO - InputStream Stream이란 Java 8에서 등장한 함수형 프로그래밍 방식의 반복자에 대한 내용이 아니며, 프로그램은 외부에서 데이터를 읽거나 외부로 데이터를 출력하는 작업이 빈번하게 일어난다. 이때 데이터는 어떠한 통로를 통해서 데이터가 이동되는데, 이 통로를 Stream 이라고 한다. 자바에서 기본적으로 제공하는 I/O 기능은 java.io 패키지에서 제공하며, java.io 패키지에서는 다양한 입출력 스트림 클래스를 제공한다 바이트 기반 스트림은 문자..
[Kotlin] 함수 (feat.디폴트 파라미터, 네임드 아규먼트)
2023. 9. 3. 21:30
몰아 넣기
함수 (function) 반환타입이 있는 함수 반환타입이 있는 함수 - fun 메소드명(아규먼트명: 데이터타입) 반환타입 {} fun sum(a: Int, b: Int): Int { return a + b } 반환타입이 없는 함수 Unit은 자바에서 void를 뜻한다 하지만 코틀린에서는 생략도 가능하다. fun printSum(a: Int, b: Int): Unit { println(a + b) } 표현식 스타일 함수 body가 없는 형태로 작성이 가능하다. //표현식 스타일 fun sum2(a: Int, b: Int): Int = a + b //표현식 & 변환타입 생략 fun sum3(a: Int, b: Int) = a + b 만약 sum3에서 바디를 만들었다면 아래 코드처럼 형태가 된다 하지만 에러가..
[Kotlin] 변수와 상수
2023. 9. 3. 21:19
몰아 넣기
변수 변수선언1 코틀린은 var 변수명 : 데이터타입 = 값 으로 변수를 선언할 수 있다. fun main() { var a : Int = 4 var b = 1 } 변수선언2 f는 이미 int로 데이터입이 정해져서 String으로 변경 할 수 없다. var f = 123 // f = "hi" 변수선언3 지역 할당 - 변수명과 데이터타입만 정해주고 이 후에 값을 지정한다. val c : Int c = 3 탑레벨 변수 코틀린은 함수나 클래스에 외에 변수를 선언해서 사용할 수 있는데 이것을 탑레벨 변수라고 한다. var topLevel = 5; fun main() { topLevel++ println(topLevel) // 6 } 상수 상수 선언 val 로 상수를 만들 수 있다. val e : String =..
[Thymeleaf] th:each 사용해서 동적 html 생성하기 (feat.select 태그)
2023. 9. 3. 17:17
몰아 넣기
th:each 란? "th:each"는 반복문 속성(attribute) 중 하나이다 이 속성은 HTML 요소에 추가되어 반복적으로 동일한 요소를 생성하고 데이터의 목록 또는 배열을 순회하면서 각 항목을 처리할 수 있도록 지시하며, "th:each" 속성을 사용하면 템플릿에서 동적으로 목록을 렌더링하거나 반복 작업을 수행할 수 있다. 사용법 1. home.html를 만들어 렌더링해줄 수 있게 로직을 작성한다. 0~9의 리스트를 addAttribute에 같이 담아준다. @GetMapping("/") public String home(Model model) { List integers = IntStream.range(0, 10).boxed().toList(); model.addAttribute("items",..
[Thymeleaf] replace, fragment 사용해서 레이아웃 나누기
2023. 9. 3. 17:03
몰아 넣기
프론트를 구성할 때 Thymeleaf를 주로 사용하는데 레이아웃을 나눌 땐 replace, fragment 를 사용해서 나눈다. 항상 쓸 때마다 검색을 해서 다시 사용법을 확인하는데 찾아보기 힘들어 이제 정리좀 하려고한다. 정의 Fragment "th:fragment" 속성은 템플릿 내에서 명명된 fragment를 정의할 때 사용하며, fragment를 정의한 후, 다른 템플릿에서 "th:replace"나 "th:include"와 함께 해당 fragment를 사용할 수 있다. Replace 해당 속성을 포함한 HTML 요소를 다른 템플릿으로 대체하도록 지시하며, 헤더 또는 푸터와 같은 공통 요소를 별도의 템플릿으로 분리하고, 각 페이지에서 "th:replace"를 사용하여 이러한 공통 요소를 삽입하는 데..
[자바] 람다캡쳐링에 대해서
2023. 8. 19. 18:00
몰아 넣기
"Variable used in lambda expression should be final or effectively final" 개발중 마주하게된 메세지 서치로 찾아본 결과 람다 캡쳐링이라는 키워드를 알게 되었다. 알게된 내용을 정리한다. 람다 캡쳐링이란? 람다 캡처링이란 간단히 말해 외부 범위에서 선언된 변수를 람다 식 내부에서 사용하는 것을 의미한다. 이러한 변수는 자동으로 람다 표현식의 내부에 복사되거나(캡쳐링) 최종적으로 상수로 취급된다 예제로 이해하기 아래 코드일 경우 메모리 상황은 stack에 value =3 와 list 가 쌓이고 heep에 list의 값인 1,2,3,4가 쌓였다. public static void main(String[] args) { int value = 3; List..
[SptringSecurity] 스프링 시큐리티 WebSecurityConfigurerAdapter Deprecated 대처하기
2023. 5. 1. 13:44
몰아 넣기
스프링공식블로그 에 WebSecurityConfigurerAdapter를 사용하는 것을 권장하지 않고, 컴포넌트 기반 설정으로 변경할것을 권장한다고 한다. 그래서 스프링 시큐리티 5.7.0-M2 부터 WebSecurityConfigurerAdapter는 deprecated 되었고 스프링 시큐리티 강의를 보면서 WebSecurityConfigurerAdapter를 쓰지 않고 적용하다보니 시간이 오래걸렸고 이 후 바로 쓰기위해 정리를 했다. HttpSecurity 구성 기존 @Configuration public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecu..