반응형 All205 [이펙티브자바 3판] ITEM47. 반환타입으로 스트림보다 컬렉션이 낫다 이번장의 핵심은... 컬렉션을 반환하는 게 불가능하면 스트림과 Iterable 중 더 자연스러운 것을 반환하자 만약 나중에 스트림 인터페이스가 Iterable을 지원하도록 자바가 수정된다면, 그때는 안심하고 스트림을 반환하면 됩니다 스트림 반복문 스트림은 반복을 지원하지 않습니다 iterable 인터페이스가 정의한 추상메서드들을 전부 포함하지만 extend 하지 않습니다 따라서 for-each로 반복하지 못합니다 스트림으로 반복문을 쓰고 싶다면 어떻게 해야할까요? Stream를 Iterable로 중개해주는 어댑터를 생성해주면 됩니다 public static Iterable iterableOf(Stream stream){ return stream::iterable; } 하지만 너무 난잡하고 직관성이 떨어집.. 2020. 12. 13. [우아한테크캠프Pro] 1주차 - Racing car 안녕하세요~ 잭코딩입니다! 요즘 글쓴이는 우아한테크캠프 Pro라는 교육과정을 듣고 있습니다 (해당 업체에서 광고를 받지 않았으며, 교육비를 직접 내고 교육을 받고있습니다) 교육을 받으며 느낀점을 적기 위한 포스팅입니다 우아한테크캠프 Pro에 대해 간단히 설명드리겠습니다 이 교육과정은 벡엔드(Java) 경력 4년 이상을 대상으로 진행합니다 우아한테크캠프 Pro 과정은 아래 경험을 제공합니다. 1. 클린코드를 통해 유지보수하기 좋은 코드를 구현하는 경험 2. JPA 기반으로 웹 애플리케이션을 개발하는 경험 3. 단위, 인수 테스트를 기반으로 웹 애플리케이션을 개발하는 경험 4. 레거시 코드를 안정적으로 리팩터링하는 경험 5. 시스템 아키텍처를 설계하고 운영하는 경험 6. 대용량 데이터에 대해 최적화할 대상을.. 2020. 12. 6. [Java] Strategy Pattern(전략패턴)[feat. Interface] 안녕하세요~ 잭코딩입니다! 이번에는 인터페이스의 활용에 대해 글을 써보려고 합니다! 요즘 글쓴이는 우아한테크캠프 Pro라는 교육과정을 듣고 있습니다 이번 미션에서 Strategy Pattern을 적용해보라는 코드리뷰를 받아서 수정해보았습니다 Interface를 이용해 전략 패턴을 사용하였는데 어떤 점에서 코드가 좋아졌을까요? Strategy Pattern(전략 패턴) ? 전략 패턴이란 무엇일까요? 같은 기능이지만 서로 다른 전략을 가진 클래스들을 각각 캡슐화하여 상호교환할 수 있도록 하는 패턴입니다 Strategy Pattern 예시 (feat. CoffeeMachine) 예를 들어서 설명해보겠습니다 커피머신에는 각자가 커피를 내리는 전략이 있습니다 '커피를 내린다'라는 같은 기능이지만 서로 다른 전략으.. 2020. 12. 6. [Java] First Class Collection(일급 컬렉션) 안녕하세요~ 잭코딩입니다! 이번에는 일급 컬렉션에 대해 글을 써보려고 합니다! 요즘 글쓴이는 우아한테크캠프 Pro라는 교육과정을 듣고 있습니다 이번 미션에서 일급 컬렉션을 적용해보라는 코드리뷰를 받아서 관련 내용을 학습할 수 있었습니다 일급 컬렉션을 쓰면 무엇이 좋은지 살펴볼까요? First Class Collection(일급 컬렉션) ? 간단히 설명하면 Collection들을 한번 Wrapping한 컬렉션입니다 예를 들어 Car라는 객체가 있습니다 public class Car { private int position; public void move(MovingStrategy movingStrategy) { if (movingStrategy.isMove()) { position++; } } public.. 2020. 12. 6. [이펙티브자바 3판] ITEM46. 스트림에는 부작용 없는 함수를 사용하라 이번장의 핵심은... 스트림 파이프 라인 프로그래밍 핵심은 부작용 없는 함수 객체입니다 forEach는 스트림이 수행한 계산 결과를 보고할 때만 이용하자 (계산 자체에는 이용하지 말자) 가장 중요한 수집기 팩터리는 [ toList, toSet, toMap, groupingBy, joining ] 스트림 패러다임 스트림 패러다임의 핵심은 계산을 일련의 변환으로 재구성하는 것입니다 이때 변환은 입력만이 결과에 영향을 주는 순수 함수여야 합니다 잘못된 스트림 연산의 예시를 볼까요? Map freq = new HashMap(); try (Stream words = new Scanner(file).tokens()){ words.forEach(word -> { freq.merge(word.toLowerCase(),.. 2020. 12. 5. [이펙티브자바 3판] ITEM45. 스트림은 주의해서 사용하라 이번장의 핵심은... 스트림과 반복 중 어느 쪽이 나은지 확신하기 어렵다면 둘 다 해보고 더 나은 쪽을 택해라 스트림 API 다량의 데이터 처리 작업을 돕고자 추가되었습니다 스트림 핵심 2가지 1. 스트림은 데이터 원소의 유한 혹은 무한 시퀀스를 뜻합니다 2. 스트림 파이프라인은 이 원소들로 수행하는 연산 단계를 표현하는 개념입니다 스트림 원소들은 어디로부터든 올 수 있습니다 ex) 컬렉션, 배열, 파일, 정규표현식 패턴 매처, 난수 생성기 스트림 파이프 라인 myList.stream() //소스 스트림 .filter(s -> s.startsWith("c")) //중간 연산 .forEach(System.out::println); //종단 연산 소스 스트림에서 시작해 종단 연산으로 끝나며, 그 사이에 하나.. 2020. 12. 2. [이펙티브자바 3판] ITEM44. 표준 함수형 인터페이스를 사용하라 이번장의 핵심은... 입력값과 반환값에 함수형 인터페이스 타입을 활용하라 보통은 java.util.function 패키지의 표준 함수형 인터페이스를 사용하는 것이 가장 좋은 선택이다 단, 흔지는 않지만 직접 새로운 함수형 인터페이스를 만들어 쓰는 편이 나을 수 있음을 잊지 말자 함수형 매개변수 타입을 올바르게 선택하자 템플릿 메서드 패턴의 매력은 크게 줄었습니다 이를 대체하는 요즘 스타일은 같은 효과의 함수 객체를 받는 정적 팩터리나 생성자를 제공하는 것입니다 그러니까 함수 객체를 매개변수로 받는 생성자와 메서드를 더 많이 만들어야 합니다 ex) LinkedHashMap // 맵에 원소가 100개가 될 때까지 커지다가, 그 이상이 되면 맵에서 가장 오래된 원소를 제거 // 즉, 가장 최근 원소 100개 .. 2020. 12. 2. 이전 1 ··· 12 13 14 15 16 17 18 ··· 30 다음 반응형