전체 글
Happy Hacking!
-
계획 오늘 한 일 peek()을 사용하면 스트림 체이닝을 디버그할 수 있다 peek()는 forEach와 달리 스트림 요소를 소모하지 않기 때문에 filter()나 map() 결과를 디버그하기 좋다 fileStream.map(File::getName) .filter(s -> s.indexOf('.') != -1) .peek(s -> System.out.printf("filename=%s%n", s)) .map(s -> s.substring(s.indexOf('.') + 1)) .peek(s -> System.out.println("filename=%s%n", s)) .forEach(System.out::println); IO 스트림, 문자스트림, 보조 스트림 스트림은 단방향으로 흐르기 때문에 입력 스트림..
peek() / Java 스트림 종류 / 성격 기질 검사계획 오늘 한 일 peek()을 사용하면 스트림 체이닝을 디버그할 수 있다 peek()는 forEach와 달리 스트림 요소를 소모하지 않기 때문에 filter()나 map() 결과를 디버그하기 좋다 fileStream.map(File::getName) .filter(s -> s.indexOf('.') != -1) .peek(s -> System.out.printf("filename=%s%n", s)) .map(s -> s.substring(s.indexOf('.') + 1)) .peek(s -> System.out.println("filename=%s%n", s)) .forEach(System.out::println); IO 스트림, 문자스트림, 보조 스트림 스트림은 단방향으로 흐르기 때문에 입력 스트림..
2023.07.27 -
한 일 뭔가 요즘 하루는 꽉꽉 채워서 사는 것 같은데 자바 공부는 따로 못하고 있다. 시간을 누수하는 포인트가 있나? 요즘 운동을 자주 가긴 하는데 운동에 다녀오면 공부에 집중하기 힘들다. 매일 가지는 말고 날짜를 좀 조정해 봐야겠다. 배운 것 테스트하기 쉽도록 객체 쪼개기 이건 어디서 권장하는 스타일은 아니고, 내가 개발한 야매 비법이다. 메서드를 단위 테스트할 때 가끔 주입받는 객체에 따라서 테스트하기 어려워질 때가 있다. 예를 들어, 다음과 같은 코드가 있다고 하자 class A { public Something doSomething(Location location) { int x = location.getX(); int y = location.getY(); return makeSomething(x..
테스트하기 쉽도록 객체 쪼개기 / ProxySQL의 캐치프라이즈(문제 해결 전에 문제 인식부터. 문제 인식 전에 도메인부터) / 설계를 뒤엎는 것은 도메인을 조금 더 이해한 것이다한 일 뭔가 요즘 하루는 꽉꽉 채워서 사는 것 같은데 자바 공부는 따로 못하고 있다. 시간을 누수하는 포인트가 있나? 요즘 운동을 자주 가긴 하는데 운동에 다녀오면 공부에 집중하기 힘들다. 매일 가지는 말고 날짜를 좀 조정해 봐야겠다. 배운 것 테스트하기 쉽도록 객체 쪼개기 이건 어디서 권장하는 스타일은 아니고, 내가 개발한 야매 비법이다. 메서드를 단위 테스트할 때 가끔 주입받는 객체에 따라서 테스트하기 어려워질 때가 있다. 예를 들어, 다음과 같은 코드가 있다고 하자 class A { public Something doSomething(Location location) { int x = location.getX(); int y = location.getY(); return makeSomething(x..
2023.07.26 -
한 일 배운 것 표준 스트림 자바의 Stream은 다음과 같은 특징들이 있다 데이터 소스로부터 읽기만 할뿐 소스를 변경하지 않는다 Iterator처럼 일회용이다. 한 번 사용하면 닫혀서 다시 사용할 수 없다 작업을 내부 반복으로 처리한다 지연 연산 : 최종 연산이 수행되기 전까지 중간 연산이 수행되지 않는다이것 때문에 한참 헤맨 일이 있었는데 그때 헤맨 이유는 한 번 사용하면 다시 사용할 수 없다는 Stream의 특징을 몰라 복사하려고 애썼던 기억이 있다. 생각해 보면, linux에서도 표준 스트림이라는 게 존재하는데, 똑같이 한 번만 사용할 수 있는 특징을 가진다. 아 이게 여러 곳에서 통용되는 개념이구나 싶어 여러가지 공부해 보았다. 이 중에서 Iterator의 일회용인 특징이 흥미로웠다. Node에..
Java 스트림과 표준 스트림한 일 배운 것 표준 스트림 자바의 Stream은 다음과 같은 특징들이 있다 데이터 소스로부터 읽기만 할뿐 소스를 변경하지 않는다 Iterator처럼 일회용이다. 한 번 사용하면 닫혀서 다시 사용할 수 없다 작업을 내부 반복으로 처리한다 지연 연산 : 최종 연산이 수행되기 전까지 중간 연산이 수행되지 않는다이것 때문에 한참 헤맨 일이 있었는데 그때 헤맨 이유는 한 번 사용하면 다시 사용할 수 없다는 Stream의 특징을 몰라 복사하려고 애썼던 기억이 있다. 생각해 보면, linux에서도 표준 스트림이라는 게 존재하는데, 똑같이 한 번만 사용할 수 있는 특징을 가진다. 아 이게 여러 곳에서 통용되는 개념이구나 싶어 여러가지 공부해 보았다. 이 중에서 Iterator의 일회용인 특징이 흥미로웠다. Node에..
2023.07.25 -
오늘 한 일 배운 내용 모바일에선 왜 세션보다 토큰을 선호할까? 세션은 보편적으로 쿠키와 묶어 사용하는 경우가 많다. 그러나, 네이티브 앱의 경우, 브라우저를 사용하지 않기 때문에 쿠키 동작이 수행되지 않는다. 세션과 토큰을 비교할 때는 클라이언트로 무엇을 쓰는지 비교할 수도 있지만, 인증 정보를 세션(저장소)에서 관리할지, 암호화해서 토큰에 넣어 관리할지를 비교하는 것이 더 올바르다. JESESSIONID 서블릿 컨테이너에서 생성하는 쿠키. 웹서버가 세션 관리로 쿠키를 사용하면 JSESSION라는 쿠키를 만들어 클라이언트에 보낸다 톰캣 컨테이너를 2개 이상 사용하면 세션을 유지할 수 없기 때문에 세션 클러스터링 환경을 구축해야 한다 쿠키 데이터를 브라우저측에 저장한 후 다시 데이터를 받아오는 기술을 말..
모바일에선 왜 세션보다 토큰을 선호할까? / 쿠키 / 토큰오늘 한 일 배운 내용 모바일에선 왜 세션보다 토큰을 선호할까? 세션은 보편적으로 쿠키와 묶어 사용하는 경우가 많다. 그러나, 네이티브 앱의 경우, 브라우저를 사용하지 않기 때문에 쿠키 동작이 수행되지 않는다. 세션과 토큰을 비교할 때는 클라이언트로 무엇을 쓰는지 비교할 수도 있지만, 인증 정보를 세션(저장소)에서 관리할지, 암호화해서 토큰에 넣어 관리할지를 비교하는 것이 더 올바르다. JESESSIONID 서블릿 컨테이너에서 생성하는 쿠키. 웹서버가 세션 관리로 쿠키를 사용하면 JSESSION라는 쿠키를 만들어 클라이언트에 보낸다 톰캣 컨테이너를 2개 이상 사용하면 세션을 유지할 수 없기 때문에 세션 클러스터링 환경을 구축해야 한다 쿠키 데이터를 브라우저측에 저장한 후 다시 데이터를 받아오는 기술을 말..
2023.07.22 -
오늘 한 일 공부한 내용 ATDD 수업 의존성 변경에 의한 영향을 의미한다. B가 변경될 때 A도 함께 변경된다면, A는 B에 의존한다고 볼 수 있다. 예를 들어 다음과 같은 코드가 있다. 빨간 밑줄친 부분을 보면, line은 getSections를 불러와 Section을 더하는 작업을 하고 있다. LineService는 Sections에 대해 의존하고 있다. 비록 import하지 않았더라도, sections의 add 동작이 변경되면 saveLine 코드가 변경되어야 하기 때문이다. 여기서 이를 다음과 같이 수정한다면 LineService에서 Sections에 대한 의존성을 제거한다고 볼 수 있다. line.addSection(new Section(line, upStation, downStation, r..
의존성 격리 / Fake와 Stub / HTTP 인증 프레임워크 / Enum오늘 한 일 공부한 내용 ATDD 수업 의존성 변경에 의한 영향을 의미한다. B가 변경될 때 A도 함께 변경된다면, A는 B에 의존한다고 볼 수 있다. 예를 들어 다음과 같은 코드가 있다. 빨간 밑줄친 부분을 보면, line은 getSections를 불러와 Section을 더하는 작업을 하고 있다. LineService는 Sections에 대해 의존하고 있다. 비록 import하지 않았더라도, sections의 add 동작이 변경되면 saveLine 코드가 변경되어야 하기 때문이다. 여기서 이를 다음과 같이 수정한다면 LineService에서 Sections에 대한 의존성을 제거한다고 볼 수 있다. line.addSection(new Section(line, upStation, downStation, r..
2023.07.21 -
SOLID SRP : Single Responsibility Principle. 한 클래스에 대해 한 가지 기능만을 수행하도록 해라. OCP : Open/Closed Principle. 새로운 기능의 추가가 일어났을 때에는 기존 코드의 수정 없이 추가가 되어야 하고, 내부 매커니즘이 변경되어야 할 때에는 외부의 코드 변화가 없어야 한다. 버그 수정이 아닌 새로운 기능을 개발할 때 기존에 개발된 함수를 수정하면서 코드를 개발하고 있다면 OCP 원칙을 위배한 코드를 작성하고 있을 확률이 높다. LSP : Liskov Substitution Principle. 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다. ISP : Interface Segregation Principle..
03/09 TL. SOLID 5원칙(ts)SOLID SRP : Single Responsibility Principle. 한 클래스에 대해 한 가지 기능만을 수행하도록 해라. OCP : Open/Closed Principle. 새로운 기능의 추가가 일어났을 때에는 기존 코드의 수정 없이 추가가 되어야 하고, 내부 매커니즘이 변경되어야 할 때에는 외부의 코드 변화가 없어야 한다. 버그 수정이 아닌 새로운 기능을 개발할 때 기존에 개발된 함수를 수정하면서 코드를 개발하고 있다면 OCP 원칙을 위배한 코드를 작성하고 있을 확률이 높다. LSP : Liskov Substitution Principle. 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다. ISP : Interface Segregation Principle..
2022.03.10