[Modern Java In Action] 13. 디폴트메서드
in Programming on Java
이 장에서는 Default Method가 무엇인지, 어떻게 활용하는지 알아본다.
in Programming on Java
이 장에서는 Default Method가 무엇인지, 어떻게 활용하는지 알아본다.
in Programming on Java
in Programming on Java
모든 자바개발자들이 겪고있는 NullPointerException 에러.. 자바8에서는 이를 해결하기위해 Optional이라는 새로운 선택지를 들고왔다. 어떻게 널포인트익셉션지옥에서 벗어날수있을지 알아보자.
in Programming on Java
in Programming on Java
“컬렉션 API가 없었다면 자바 개발자의 삶은 많이 외로웠을 것이다”
in Programming on Java
병렬스트림으로 데이터를 병렬처리하는방법을 알아보자!
in Programming on Java
최종연산 collect 를 통해 다양한 방식으로 데이터를 수집하는 연산을 수행할 수 있다. 다양한 collect 활용 방식을 알아보자.
in Programming on Java
다양한 스트림 활용 방법에 대해 알아보자
in Programming on Java
우리는 자바를 사용할때 컬렉션(Collection)으로 데이터를 그룹하하고 처리할 수 있다.
in Programming on Java
람다 표현식에 대해 알아보자
in Programming on Java
java8부터 지원하는 메서드를 코드에 파라미터로 전달하는 방법에 대해 알아보자
in Programming on Java
java 8부터 자바에 큰 변화들이 있어왔다. 무슨 변화들이 왜, 어떻게 일어났고 우리는 이걸 어떻게 활용해야하는지 알아보자!
in Programming on Java
상태값들을 enum을 통해서 관리하려고하는데 enum 사용의 국룰이 뭔지 명확치 않아 찾아보고 거기서 기본적인 내용만 정제해서 활용해보았다.
활용할때는 java enum을 검색했을때 나오는 아래 블로그들 내용을 참고했으며 아마 현시점에서 enum관련해서 제일 상위로노출되는 사람들이 제일 많이 참고하는 블로그일듯
in Programming on Java
스트림 병렬화는 주의해서 사용해야한다
in Programming on Java
원소 시퀀스를 반환하는 API를 개발할 일이 생겼다면? 어떤타입을 반환하는 방법이 최선일까?
당연히 컬렉션으로 반환하는것이 최선이다. 왜냐면 스트림으로 처리하기를 원하는 사용자와 반복으로 처리하길 원하는 사용자 모두를 다 만족시킬수 있으니까.
스트림은 iterable인터페이스가 정의한 추상메서드들을 전부 포함하지만 extend하고있지 않고있어서 반복문을 사용할수는 없음. (나중에 java가 수정되서 스트림이 iterable 메서드들 사용할수있게되면 그때 되서나 stream을 반환하라고 저자가 권유하고있음)
단, 만약 사용자가 Stream만 사용하길 원한다면 Stream을, Iterable만 사용하길 원한다면 Iterable만 반환해도 괜찮다.
in Programming on Java
스트림은 함수형 프로그래밍에 기초한 패러다임이다. 따라서 그냥 가져다 쓴다는 생각보다는, 이 패러다임 자체를 이해해야한다.
(함수형 프로그래밍의 개념에 대해서는 차후 다시 정리. 간단히 말해서는 순수한 함수를 작성해 사용해서 share/mutable한 상황을 겪지 않는 안정적인 프로그래밍을 지향하는 방식)
in Programming on Java
java8부터 추가된 Stream API 에 대해 알아보자
in Programming on Java
이번 아이템은 java stream을 잘 사용하는 방법에 대한 내용이다.
cf. JAVA Stream API란? 참고.
in Programming on Java
Object이 기본 toString 메서드는 보통 클래스_이름@16진수 해시코드
를 반환함. 그러나 toString 일반규약에 따르면 간결하면서도 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야한다. 또한 모든 하위 클래스에서 이 메서드를 재정의하라 고 명시하고있다. toString 메서드를 잘 재정의하면 println, assert, 디버거가 객체를 출력할 때 자동으로 불리므로 훨씬 사용하고 디버깅하기쉬워진다.
in Programming on Java
equals를 재정의한 클래스 모두에서 hashCode도 재정의해야함. 그렇지않으면 hashCode 일반규약을 어기게되어 HashMap이나 HashSet 의 원소로 사용할때 문제가될수있음.
in Programming on Java
메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하길 바람. (ex. 인덱스값은 음수여서는 안됨. 객체 참조는 null이 아니어야함. 등 )
이러한 제약은 반드시 문서화해야하며 메서드 몸체가 시작되기 전에 검사해야함. 그래야 즉각적으로 깔끔하게 예외를 던질 수 있다.
in Programming on Java
in Programming on Java
앞에서 배운 상속의 목적은 코드 재사용이 아니다. 상속은 타입계층을 구조화하기 위해 사용해야한다.
상속을 통해 타입 계층을 구조화하여 다형성을 구현하는 방법에 대해 알아보자.
in Programming on Java
상속 : 부모클래스와 자식클래스를 연결해서 부모 클래스의 코드를 재사용. is-a 관계. 의존성이 컴파일 타임에 해결됨. 정적인 관계.
합성 : 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용. has0a 관계. 의존성이 런타임에 해결됨. 동적인 관계
in Programming on Java
유연한 설계
in Programming on Java
잘 설계된 객체지향 어플리케이션은 작고 응집도높은 객체들로 구성된다. 때문에 객체들간 협력은 필수적이다. 협력하기 위해서는 객체끼리 서로 어떤 기능인지 알고있어야한다. 이런 다른 객체에 대한 지식은 객체간 의존성을 낳는다.
협력을 위해서는 의존성이 필수적이지만 과도한 의존성은 유지보수를 어렵게 만든다.
따라서 객체지향의 핵심은 필요한 의존성은 유지하고 변경을 방해하는 의존성은 제거하는것이다.
충분히 협력적이면서 변경을 방해하지않는 유연한 객체를 만ㄷ르기 위한 의존성 관리 방법을 알아보자.
in Programming on Java
불필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업을 추사오하라고 한다.
큰 문제를 해결 가능한 작은 문제로 나누는 작업을 분해라고 한다.
in Programming on Java
객체지향 애플리케이션의 가장 중요한 재료는 객체들이 주고받는 메시지이다.
즉 추상화한 뒤 public method로 공개하여 협력을 위해 서로 호출하는 기능들이 주인공이라는 뜻이다.
in Programming on Java
책임을 할당할때는 두가지 원칙을 따라야함
in Programming on Java
객체지향 설계의 핵심은 역할, 책임, 협력이다. 그 중에서 가장 중요한것은 책임이다. 채임을 어떻게 할당하냐에 따라 객체지향 어플리케이션 전체의 품질을 좌우한다.
훌륭한 설계란 합리적인 비용 안에서 변경을 할 수 있는 구조를 만드는것이다. 이를 위해서는 높은 응집도와 낮은 결합도가 필요하다. 그러려면 설계할때 객체의 책임에 초점을 맞춰야한다.
그런데 기존에는 주로 데이터중심관점에서 개발이 많이 이루어졌다. 데이터 중심의 설계를 살펴보고 어떤 단점이 있는지를 파악하여 책임 할당 원칙을 더 쉽게 이해해보자.
in Programming on Java
객체지향패러다임의 관점에서의 핵심은 역할(role), 책임(responsibility), 협력(collaboration)이다.
객체지향의 본질은 협력하는 객체들의 공동체를 창조하는것 이다.
객체지향 설계의 핵심은 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러난다.
역할, 책임, 협력을 충분히 고민한 뒤에 이를 구현하는것이 클래스, 상속, 협동인것이다.
in Programming on Java
내용 추가 예정
in Programming on Java
소프트웨어 분야에서 객체와 설계에 대해 알아보자
in Programming on Java
Generic type이란 데이터 타입을 아직 명시하지 않은 상태. class 안에서 사용하는 데이터 타입을 미리 정의하지 않고 class를 instance화 하는 시점에서 데이터타입을 지정해주는 방식.
ex. List
in Programming on Java
동기(sync), 비동기(unsync), 블락(block), 논블락(non-block)의 개념에 대해 알아보고, 예시를 통해 구체적으로 이해해보자.
in Programming on Java
JVM(Java Virtual Machine)의 메모리 구조를 알아보자.
in Programming on Java
Optional 은 존재할수도 있지만 안할수도있는 객체. 즉 null이 될 수도 있는 객체를 감싸는 Wrapper class이다. 기존 nullable 객체들의 경우 런타임에 NPE(NullPointerException) 예외를 발생시키거나 NPE 방어를 위해 들어간 null 체크 로직때문에 코드 가독성과 유지보수성이 떨어졌다. 이런 nullable 객체를 다루기 위해 등장한것이 Optional이다.
in Programming on Java
Java에서는 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해 Java Collection Framework를 제공한다. 다음은 JCF의 상속 구조이며 사용 용도에 따라 List, Set, Map 3가지로 요약할 수 있다.
in Programming on Java
GC (Garbage Collection)이 메모리를 정리하는 과정을 알아보자.
in Programming on Java
java의 String vs StringBuffer vs Stringbuilder 차이는 무엇일까?
in Programming on Java
mutex와 semaphore는 동기화(syncronize)기법으로 동일 메모리 영역(자원)에 서로 다른 스레드가동시 접근할때 어떤것을 우선할지 접근 스레드의 실행 순서를 지정하는 방법이다. 두 동기화기법이 어떤 차이가 있는지 알아보자.
in Programming on Java
stdout과 log (logger.log)를 저장하는방법이 다르다.
몰랐는데 stdout은 그냥 리다이렉트해도되지만 logger.log는 콘솔 출력내용을 파일로 떨구는 처리를 해줘야한다.
in Programming on Java
java 7 Connection reset Error
in Programming on Java
기본클래스 을(를) 찾거나 로드할 수 없습니다