전체 글

Book/객체지향의 사실과 오해

[객체지향의 사실과 오해] 01장 협력하는 객체들의 공동체

대다수의 개발자들은 객체지향 애플리케이션이 실세계를 모방해야 한다는 설명을 전혀 납득하지 못한다. 협력하는 사람들 (feat. 커피 공화국) 커피를 주문하는 손님, 주문을 받는 캐시어, 커피를 제조하는 바리스타라는 역할 손님, 캐시어, 바리스타는 주문한 커피를 손님에게 제공하기 위해 협력하는 과정에서 자신이 맡은 바 책임 커피 주문이라는 협력에 참여 요청과 응답으로 구성된 협력 1. 사람들은 스스로 해결하지 못하는 문제와 마주치면 문제 해결에 필요한 지식을 제공해 줄 수 있는 사람에게 도움을 요청한다. 2. 요청을 받은 사람은 다른 사람의 요청에 응답한다. 역할과 책임 특정한 역할은 곧 특정한 책임이며 몇 가지 개념을 제시한다. 이는 객체의 역할의 개념과 같다. 여러 사람이 동일한 역할을 수행할 수 있다..

Book/자바의 정석

[자바의 정석] Chapter 14. 스트림

스트림 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다. 쉽게 말해 for문과 Iterator를 사용했을 때 길어지는 코드를 매우 간결하게 줄일 수 있는 기능이다. 근데 가독성이나 기능 문제로 기존 코드를 사용하는 분들도 많다고 들었다.. 스트림은 데이터 소스를 변경하지 않는다. 스트림은 일회용이다. 스트림은 작업을 내부 반복으로 처리한다. 스트림의 최종연산 - reduce() 이름에서 짐작할 수 있듯이, 스트림의 요소를 줄여나가면서 연산을 수행하고 최종 결과를 반환한다. 스트림의 모든 요소를 소모하게 되면 결과를 반환한다. Optional reduce (BinaryOperator accumulator) T reduce(T identity, BinaryOper..

Book/자바의 정석

[자바의 정석] Chapter 14. 람다

람다식 JDK1.9부터 추가된 람다식 덕분에 자바는 객체지향언어인 동시에 함수형 언어가 되었다. 람디식이란 간단히 말해서 메서드를 하나의 식으로 표현한 것이다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해 준다. int[] arr = new int[5]; Arrays.setAll(arr, i -> (int) (Math.random()*5)+1); 원래 모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야 하고, 객체도 생성해야만 비로소 이 메서드를 호출할 수 있다. 그러나 람다식은 이 모든 과정 없이 오직 람다식 자체만으로도 이 메서드의 역할을 대신할 수 있다. 람다식 작성하기 람다식은 익명 함수답게 메서드에서 이름과 반환타입을 제거하고 매개변수 선언부와 몸통{} 사이에 '-..

Book/자바의 정석

[자바의 정석] Chapter 12. 제네릭, 열거형, 어노테이션

제네릭 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 타입 안정성을 제공 타입체크와 형변환을 생략할 수 있어 코드가 간결 간단히 정리하자면, 다룰 객체의 타입을 미리 명시해 줌으로써 번거로운 형변환을 줄일 수 있다. class Box { T item; void setItem(T item) { this.item = item; | T getItem() { return iterm; } } Box 에서 T를 '타입 변수'라고 한다. 물론 T가 아니라 상황에 맞게 다른 변수로 작성해도 된다. f(x, y) = x + y와 f(k, v) = k + v 가 다르지 않은 것처럼 타입 변수명도 상관없다. 제네릭을 실제로 사용하기 위해선 아래처럼 코드를 작성해 ..

Book/자바의 정석

[자바의 정석] Chapter 11. 컬렉션 프레임워크 - Set, Map

2. Set 2-1. HashSet HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이며, Set 인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다. 그리고 List 인터페이스를 구현한 컬렉션들과 달리, HashSet은 저장순서를 유지하지 않으므로 저장 순서를 유지하고자 한다면 LinkedHashSet을 사용해야 한다. HashSet이 중복을 막는 법 HashSet는 add메서드를 사용해서 새로운 요소를 추가할 때, 기존의 요소와 동일한 요소인지 판별하기 위해, equals와 hashCode 메서드를 호출한다. 그렇기 때문에, 해당 객체를 set에 넣어서 올바른 결과를 얻기 위해서는 equals와 hashCode 메서드를 목적에 맞게 오버라이딩해야 한다. public cl..

Book/자바의 정석

[자바의 정석] Chapter 11. 컬렉션 프레임워크 - List

1권에서 습득한 객체지향 관점 놓치지 않기! 컬렉션 프레임워크 컬렉션 프레임워크는 다수의 데이터(컬렉션)를 다루는데 필요한 다양하고 풍부한 클래스들을 제공한다. 또한 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 재사용성이 높은 코드를 작성할 수 있도록 해준다. 컬렉션 프레임워크의 핵심 인터페이스 컬렉션 프레임워크에서는 컬렉션(데이터 그룹)을 크게 3가지 타입이 존재한다고 인식하고 각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의하였다. 이때 List 인터페이스와 Set 인터페이스는 공통부분이 많아 해당 공통부분을 다시 뽑아 Collection 인터페이스를 정의하였다. 하지만 Set 인터페이스의 경우 공통되는 부분이 아예 없어 따로 떨어져 있다. 이 3가지 인..

Book/자바의 정석

[자바의 정석] Chapter 8. 예외처리

프로그램 오류 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 에러와 예외 에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 예외 클래스의 계층 구조 RuntimeException클래스와 그 하위클래스들 프로그래머의 실수로 발생하는 예외 Exception클래스와 그 하위클래스들 (RuntimeException클래스와 하위클래스들 제외) 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외 예외처리 하기 : try-catch문 : 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이다. 프로그램의 비..

Book/자바의 정석

[자바의 정석] Chapter 7. 객체지향 프로그래밍 II - 추상메서드, 인터페이스

추상클래스와 추상메서드 abstract class 클래스이름 { void play(int pos); void stop(); } class AudioPlayer extends Player { void play(int pos) { } void stop() { } } abstract class AbstractPla extends Player { void play(int pos) { } } 추상클래스는 키워드 abstract를 붙이기만 하면 된다. 즉, 해당 클래스는 추상메서드가 있으니 상속받아 구현해야 한다는 의미를 포함한다. 추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 추상클래스의 모든 추상메서드를 구현해주어야 한다. 만약, 상속받은 추상메서드 중 하나라도 구현하지 않는다면, 해당 서브클래스 역시..

yo0oni
기록 기록 기록