예전에 미션 피드백을 받고 인지해 정리했던 내용을 포스팅 Collection.stream().forEach() vs Collection.forEach() 순서 Collection.forEach는 컬렉션의 iterator를 사용한다. 따라서 순서가 명확하다. 반면 Stream.forEach는 순서가 명확하지 않다. 순차스트림이라면 보통 순서대로 실행되지만 병렬스트림이라면 순서가 보장되지 않는다. Collection 수정과 Side Effect Collection.forEach는 iter동안 구조적으로 변경되어선 안된다. 순회하는 동안 요소가 추가/삭제되면 ConcurrentModification Execption이 발생한다. 동시에 컬렉션은 fail-fast하게 설계되었다. 즉 변경이 발생하면 바로 예외가..
웹으로부터 원하는 형식의 파일만 받고 싶을 때, 당연히 서버에선 필터링을 해야 한다. 사실 프론트에서도 (아무리 양심이 없어도) 최소한 다음과 같이 Accept 형식 제한은 걸어놓을것이다. 아래와 같이 accept를 설정하면 첨부파일 선택화면에서 사진과 영상 파일만 보인다. 사실 이건 우측하단을 "모든 파일"로 선택하면 다른 형식의 파일도 보여 선택 가능하게 된다. 따라서 선택된 다른 형식의 파일을 서버로 submit하기 전에 한번더 원하는 형식의 파일인지 확인하는 JS 방법이 분명히 있을 것이고, 또는 애초에 input 태그대신 좀더 기능이 추가된 라이브러리도 있지않을까싶다. 프론트에서 1차적으로 확인하는 것이 물론 좋고 다들 그렇게 하고 있겠지만, 이번엔 서버에서 FilenameUtils (Apach..
Singleton 패턴과 (모든 메서드가 static으로 이뤄진) Static Class의 차이 차이점SingletonStatic Class원리사용자 요청시 하나의 인스턴스를생성해 재사용인스턴스를 만들수없고,당연히 생성자도 갖지않는다인터페이스 구현 (가장 큰 차이점)가능불가능follow OOPOX, 절차적 디자인으로 '함수'에 가깝다override가능불가능load필요할때 Lazy load 가능static binding in compile-timeperformance상대적으로 slowfast, by static bindingtesteasierhard to mock and test저장 위치 (중요x)HeapStack => Singleton이 좀더 나은 분위기이고, 'OOP와 다형성의 이점'이 ..
DTO - Entity간의 변환에 대해 Entity To DTO Conversion for a Spring REST API | Baeldung A Better Way to Project Domain Entities into DTOs 먼저 첫번째 링크는 ModelMapper API를 이용한 Entity와 DTO간의 기본적인 변환 예제를 보여주고 있다. DTO의 기본적인 사용방식과 레이어간의 흐름을 볼수있다. 여기선 Controller에 ModelMapper를 호출해 Entity~DTO간의 변환을 수행하는 로직이 위치하는것을 확인할수있었다. 두번째 링크도 DTO로의 변환로직을 어디에 위치시켜야 하는가에 대해 논의하고 있다. 이 글의 결론은 Repository안에 위치해선 안되고, Application Ser..
아래의 자료를 번역 및 요약 10 Tips to override toString() method in Java 자바의 toString 메서드는 객체의 명확하고 간결한 정보를 사람이 읽을 수 있는 형식으로 제공하는데 이용된다. 올바르게 override된 toString 메서드는 가치있고 의미있는 정보를 제공하여, 프로그램의 로깅과 디버깅에 도움을 준다. toString은 java.lang.Object 클래스에 정의되어 있기 때문에, 충분한 정보를 제공하지 않는다. 따라서 서브클래스에서 override하는것이 좋다. 기본적으로 toString은 package.class@hashCode의 형태를 출력한다. ex) test.Country@18e2b22 예를 들어, 네트워크 관련 클래스의 경우 toString을 ..
Dependency Injection (DI, 의존성 주입) Dependency(의존성, 의존관계) A 객체가 B객체를 활용해 로직을 구현하는 경우 A 객체는 B 객체에 의존관계를 가진다고 한다. 예를 들어 Car가 Random 객체를 사용해 기능을 구현한다면 Car는 Random에 의존관계를 가진다. Injection(주입) 객체 간의 의존관계를 의존관계를 가지는 객체 내부에서 결정하지 않고 외부에서 결정한다. 예를 들어 Car가 Random 객체의 의존관계를 없애기 위해 MoveStrategy를 추가했다면 이에 대한 의존관계를 외부에서 결정한다. Sample Code DI전엔 도메인 객체의 랜덤성으로 테스트가 불가능하다. 동시에 이 테스트 불가성이 상위객체까지 전염되어, 모두 테스트 하기 힘들어진다...
좌표미션을 진행하다 헷갈려서 노가다로 직접 값 변화를 확인해보기로 했다. Shallow Copy vs Deep Copy 먼저 3가지의 복사 방법 비교 링크를 참조한, 얕은복사/깊은복사/더깊은복사 public static void main(String[] args) { test1(); test2(); test3(); } private static void test1() { List origin = new ArrayList(); origin.add(new Car("k5")); origin.add(new Car("k9")); List copy = origin; origin.add(new Car("sonata")); copy.add(new Car("avante")); origin.get(0).setName("s..
원본코드 값 변화 실험 : Java) Shallow Copy vs Deep Copy (얕은/깊은 복사), unmodifiableList의 값 변화 관찰 좌표계산기 코드를 작성하다가, Jason코치님의 피드백을 받고 원본값을 안전하게 보호하기 위해 3가지 방법을 적용하게 되었다. (세 기법이 모두 각자의 관점이 다르긴 하지만, 일단은) Collections.unmodifiableList Deep Copy VO(Value Object) 사전지식 : final은 재할당만 막지, 값 조작은 막지못한다. 아래와 같은 컨트롤러 코드가 있다. 원본값인 List를 받아들이고, 이를 조작해서 figure를 만들고 출력한다. List를 갖고있는 도메인 모델은 다음과 같다. 전형적인 생성자와 전형적인 getter. 단순히 ..
- Total
- Today
- Yesterday
- socket
- Android Studio
- Vo
- Algorithm
- 개발자
- mysql
- 프로그래머스
- Java
- sort
- bfs
- 회고
- C
- 우아한 테크코스
- Android
- JPA
- brute-force
- javascript
- Data Structure
- queue
- graph
- 웹해킹
- Stack
- webhacking.kr
- reversing
- OneToMany
- 해외여행
- git
- dfs
- 리버싱
- FRAGMENT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |