반응형 Java4 부작용(Side-Effect) 없는 스트림(Stream) API 사용 이펙티브 자바 (Effective Java) 아이템 46의 내용이 과거 업무중 스트림 API를 잘못 사용했던 경험과 매우 유사해서 정리차원에서 작성하는 글입니다. 두개의 API를 호출하여 2개의 리스트를 받고, 그 리스트들의 원소의 합을 Map에 담는 코드를 스트림 API를 이용하여 작성한 경험이 있었다. public class Service { public Map getSum() { List list1 = apiCall1(); // 리스트를 받는 API 1... List list2 = apiCall2(); // 리스트를 받는 API 2... Map map = new HashMap(); list1.stream().forEach(data -> { if(map.get(data.getId()) == null).. 2023. 3. 6. 상속과 Override, Super()와 자기 사용(Self-use) 여부 이펙티브 자바를 읽던 중 의문점이 생겼다. //아이템18 "상속보다는 컴포지션을 사용하라" 중... public class InstrumentedHashSet extends HashSet { private int addCount = 0; public InstrumentedHashSet() { } public InstrumentedHashSet(int initCap, float loadFactor) { super(initCap, loadFactor); } @Override public boolean add(E e) { addCount++; return super.add(e); } @Override public boolean addAll(Collection 2023. 1. 11. DTO vs VO vs DAO VO(Value Object) - 값 객체 - Read-Only(getter만 존재 setter X) ex) 지역번호를 저장한 객체가 있다. 지역번호는 핸드폰 번호처럼 변하는게 아닌 고정된 값이다. 고정된 값은 VO로 저장 후 Getter 호출 할수 있다. VO의 특징 변하지 않는 값을 가지는 객체(불변성, immutable) 값이 변하지 않음을 보장하며 코드의 안정성과 생산성을 높임 값이 같다면 동일한 객체 각 객체를 비교하는데 사용되는 ID가 없음 같은 객체인지 판단하기 위해 각 속성들의 값을 비교함 equals() 메서드와 hashCode() 메서드를 오버라이드해서 객체 비교를 구현합니다. DTO(Data Transfer Object) - 계층(Layer) 간 데이터를 교환을 위한 객체 - 데이터 .. 2021. 9. 12. 자바 빈즈란? 자바빈즈(JavaBeans)는 자바로 작성된 소프트웨어 컴포넌트이다. 썬 마이크로시스템즈에서의 정의는 "빌더 형식의 개발도구에서 가시적으로 조작이 가능하고 또한 재사용이 가능한 소프트웨어 컴포넌트이다." 자바빈즈의 관례 자바빈즈 클래스로서 작동하기 위해서는? → 객체 클래스는 명명법, 생성법 그리고 행동에 관련된 일련의 관례를 따라야만 한다. 이러한 관례는 (빌더 형식의) 개발 도구에서 자바빈즈와의 연결을 통해 클래스의 사용과 재사용 그리고 클래스의 재배치를 가능하게 한다. 클래스는 직렬화되어야 한다.(클래스의 상태를 지속적으로 저장 혹은 복원 시키기 위해) 클래스는 기본 생성자를 가지고 있어야 한다. 클래스의 속성들은 get, set 혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다... 2021. 9. 12. 이전 1 다음 반응형