목록분류 전체보기 (28)
JaeniWorld
디폴트메소드(Default methods) Java 8 이전 인터페이스는 메소드만 정의할 수 있고 내용은 구현할 수 없었다. 하지만 Java 8부터는 디폴트메소드(Default methods) 기능이 추가되면서 default를 추가하면 구현 내용을 추가할 수 있도록 변화하였다. 또한 다중상속 동작이라는 유연성을 제공해 하나의 클래스에 여러 디폴트 메소드를 상속받을 수 있게 되었다. 디폴트메소드가 쓰이는 시점 디폴트메소드는 주로 기존 공개된 API의 변경이 필요할 때이다. 이전에는 디폴트메소드가 없었기 때문에 인터페이스에 새기능을 추가하면 이를 implement받은 클래스가 모두 새로운 기능을 구현해야했는다. 하지만, 이렇게 되면 호환성 문제가 생기기 때문에 인터페이스 자체에서 기본으로 기능을 구현하여 제..

Optional 클래스 java.util.Optional라는 새로운 클레스를 제공하여 변수에 null을 할당하지 않고, Optional.empty메서드로 Optional를 반환받아 할당한다. 따라서 Optional을 사용하면 값이 없는 상황이 소유한 데이터에 문제가 있는지 아닌지알 수 없기 때문에 모든 null참조를 Optional로 대체하는 것은 옳지않다. Map과 FlatMap Optional에서의 map도 Stream의 map과 비슷한 역할로 Optional이 값을 포함하면 map의 인수로 제공된 함수가 값을 바꾼다. Flatmap역시 Stream의 것과 비슷한 역할을 지니는데 map()을 통해 변환을 하다보면 Optional와 같은 이차원 Optional을 반환한다. 이때 Flatmap을 통해 이..
Collection factory Java 9에 새롭게 추가된 기능으로써, 비어있거나 비어 있지 않은 불변 콜렉션을 쉽게 초기화 할 수 있음.[1] 1. ListFactory A. List.of 불변리스트 생성 2. Set Factory A. Set.of 불변리스트 생성 3. Map Factory A. Map.of 불변리스트 생성 List와 Set 처리 removeIf: predicate를 만족하는 요소 제거 replaceAll: list에서 이용할 수 있는 기능 UnaryOperator함수를 이용해 요소를 변경sort: list에서 사용가능한 기능으로 리스트 정렬 Map 처리 forEach: Map.Entry의 반복자를 이용해 맵의 항목집합을 반복할 수 있음 ageOfFriends.forEach((fr..
Collectors Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환해줌 - 리듀싱과 요약: 최대 최소 검색, 요약연산, 문자열 연결 - 그룹화 다수준 그룹화: Collectors.groupingBy를 이용해서 항목을 다수준으로 그룹화할 수 있음. 두개의 collector사용시 두번째 컬렉터를 외부 컬렉터로 전달해 다수준 그룹화 연산을 구현할 수도 있고, 컬렉터의 인수로 컬렉터를 전다하여 계산할 수도 있다. - 분할: 분할함수(partitioning function)을 사용하는 특수한 그룹화 기능 분할함수: 비교식에 맞춰 Boolean값을 반환하며, 참과 거짓 두 요소의 스트림 리스트를 모두 유지한다. Reduce 와 collector의 차이 Reduce는 fold operation으..

Stream 연산 스트림 인터페이스는 크게 중간연산과 최종연산으로 나뉜다. 중간연산 그림의 초록색 부분에 해당하며 filter(), map(), limit(), sorted(), distinct()등이 이에 포함된다. Stream을 반환하는 것이 특징이며, 단말 연산을 스트림 파이프라인에 실행하기 전까지는 아무 연산도 수행하지 않는다. (Laziness) 최종 연산 그림의 노색 부분에 해당하며 forEach(), count(), collect()등이 이에 포함된다. void, long, collection을 반환하는 것이 특징이며, 최종 연산값을 반환한다. 분류 종류 예시 필터링 프레디케이트 .filter(Dish::isVege) 고유요소 필터링 .filter(i->i%2==0) .distinct() L..
Stream Process 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임으로 예로 들자면 공장 라인을 들 수 있다 한 작업장에서 작업물을 받아 다음 작업을 처리할 수 있도록 넘겨주는 것이다. 이때 각각의 작업장은 다른 업무를 처리하지만 전체적으로 보았을 때, 동시간에 작업을 처리하고 한 개의 작업물 만을 작업한다. ** 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 Stream예시) 입력 스트림은 데이터를 한 개씩 읽음 / 출력 스트림은 데이터를 한 개씩 기록 Stream API 스트림은 자바 8 API에 새로 추가된 기능으로 이를 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 기존 자바7에서 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 요리를 정렬하는 코드이다. 이 ..
포스트맨을 쓸때 위와 같은 오류가 나면, Header에서 key에 Content-Type value에 application/json를 넣어주면 오류가 나지 않고 잘 돌아간다

1. MyBatis MyBatis는 위와 같이 RDBMS에서 값을 받아 CoreContainer(= DI Container / Persistence Layer)에 Dependency Injection해준다. (붉은 부분에 MyBatis가 위치) 2. MyBatis 구조 MyBatis에서 가장 중요한 것은 사진을 보다시피 SQLmapconfig.xml이 제일 중요하다. 그 이유는 DB연결에 대한 문서(dbconn.properties), SQL Query를 담은 문서(mysawon_mapping.xml)그리고 VO정보를 담은 Class를 모두 Wiring(연결하는 것)하기 때문이다. 이렇게 Wiring된 문서는 Sql Session Builder에 DI되어 Sql Session을 통해 DAO에 DB안의 데이..

1. Framework Framework는 여러가지 모듈이 합쳐진 것이다. 동일한 말로 각각이 완벽한 Component의 집합이자 library의 모듈화 이다. 우리가 자주 접하는 Spring Framework로 예를 들면 아래와 같은 형태로 구성되어있다. 크게 CoreContainer(DI ; Dependency Injection) / MVC / JDBC / Aop / Security등으로 나눌 수 있으며, 각각의 모듈들은 꼭 스프링프레임워크의 것을 사용하지 않아도 된다. 2.Spring MVC Architecture 위 사진과 같이 서비스 요청 흐름과 개발자 시점은 다르다. 특히 어디에 의존(Dependency)하느냐에 따라 순서가 굉장히 중요해진다. 그렇기 때문에 DB에서 값을 주입 받는 DAO가 ..
CrossEntropyLoss를 사용 할 때 차원이 맞지 않는다고 에러가 났었다. loss_function = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(),lr=learning_rate) loss_list = [] for epoch in range(num_epochs): for f,l in list(zip(X_train,y_train)): preds = model(f) #Fully Connected Network loss = loss_function(preds,l) 처음 코드는 이러한 형태였는데. 이 상태로 preds와 l의 size를 찍어보면 preds는 torch.Size([3]) / l은 torch.Size([])의 형..