일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- TDD
- 개발방법론
- 테스트주도개발
- DDD
- web
- Java
- 조영호
- 이펙티브코틀린
- 아키텍처
- FP
- 함수형프로그래밍
- 클린아키텍처
- Thymeleaf
- 개발서적
- 유지보수
- GrokkingFunctionalProgramming
- 도메인 주도 개발 시작하기
- 만들면서배우는클린아키텍처
- Spring
- 스터디
- 객체지향의사실과오해
- 테스트
- Boot Legacy 차이점
- 추상화 설계
- template
- 책스터디
- 코틀린
- 계층형아키텍처
- 헥사고날아키텍처
- Kotlin
- Today
- Total
김동형수 개발기
Grokking Functional Programming - 1부 1장 본문
Grokking Functional Programming - 1부 1장
김동형수 2022. 11. 9. 23:141장 Learning Functional Programming
이 장에서 배우게 될
- 누구를 위한 책인가
- 기능이란 무엇입니까
- 함수형 프로그래밍이 얼마나 유용한지
- 필요한 도구를 설치하는 방법
- 이 책을 사용하는 방법
1.1 아마도 당신이 이 책을 집어든 이유는...
함수형 프로그래밍이 궁금하거나, 이전에 배우려고 했거나, 수년간 객체지향 또는 명령형 언어로 하다가 함수형의 맛을 잠깐 본 경우, 아니면 실습위주의 학습을 통한 성장
1.2 시작하기 전에 알아야 할 사항은 무엇입니까?
소프트웨어 모듈의 안정성, 테스트 가능성, 회귀 또는 통합에 문제가 있는 경우 최대 혜택을 받을 수 있다.
객체지향 전문가가 될 필요가 없고 널리 알려진 언어를 마스터할 필요가 없고 함수형 언어에 대해서 무엇이든 알고 있어야할 필요가 없다.
1.3 함수는 어떻게 생겼습니까?
아래의 코드를 보면 함수는 모두 공통점이 있다.
public static int add(int a, int b) {
return a + b;
}
public static char getFirstCharacter(String s) {
return s.charAt(0);
}
public static int divide(int a, int b) {
return a / b;
}
public static void eatSoup(Soup soup) {
// TODO: "eating the soup" algorithm
}
그것은 바로 일부 값을 입력으로 받고, 무언가를 하고, 출력으로 값을 반환할 수 있다.
모든 함수는 public static을 가지고 있다. 그 이유는 인스턴스 할당을 하지 않아도 호출을 할 수 있기 때문에 비용을 절감할 수 있다.
지금의 함수는 언제 어디서든 public하게 호출할 수 있다고 약속.
public static int increment(int x) {
// TODO
return x + 1;
}
public static String concatenate(String a, String b) {
// TODO
return a + b;
}
1.4 함수를 만나다
public static int increment(int x)
// 함수의 선언부를 보면 x에 값을 증가시키는 본체를 갖고 있을거라 유추가 된다.
1.5 코드가 거짓말을 할 때...
add 함수를 제외한 나머지 함수들은 입력값에 따라서 원치 않는 결과를 야기할 수 있다.
이 책에서는 거짓말 하지 않는 함수를 작성하는 방법에 대해서 배우게 된다. FP에서 큰 의미를 갖는다.
1.6 명령적 vs 선언적
1.7 휴식 시간: 명령적 vs 선언적
calculateScore("imperative") == 9 wordScore("declarative") == 9 calculateScore("no") == 2 wordScore("yes") == 3 // Make sure to think about the solution for a bit before checking the next page. The best way to do this is to write your answer on a piece of paper or using a computer. |
public static int calculateScore(String word) {
int score = 0;
for(char c : word.toCharArray()) {
score++;
//문제에서 제시하는 최대값이 9이므로 if문 조건을 통해서 반복문을 탈출한다. 명령적 접근 방법을 이용한다.
if(score == 9) break;
}
return score;
}
public static int wordScore(String word) {
//최대값을 구하는 Math.max를 이용해서 선언적 접근 방법을 이용한다.
return Math.max(word.length(), 9);
}
1.8 커피 브레이크 설명: 명령적 vs 선언적
문제의 해설을 보니 'a'가 아닌 문자열을 카운팅 한다고한다. 내 풀이도 맞는 것 같은데..
FP에서 우리는 "어떻게" 발생해야 하는지보다 "무엇"이 더 자주 발생해야 하는지에 중점을 둡니다.
1.9 함수형 프로그래밍을 배우는 것이 얼마나 유용합니까?
함수형 프로그래밍은 다음과 같은 함수를 사용하여 프로그래밍하는 것이다.
- 거짓말을 하지 않는 함수 선언부
- 가능한 한 선언적인 본문
선언적 및 함수형 프로그래밍이 전통적인 언어로 확장
FP언어에서도 기본 개념은 동일
문제를 해결하는데 다양한 사고(기존 방식 사고 + 함수적 및 선언적 사고)
1.10 스칼라로의 도약
러닝커브를 줄이기 위해서 기존언어(java)와 유사한 함수형 언어인 스칼라를 선택
1.11 스칼라에서 함수 연습하기
public static int increment(int x) {
return x + 1;
}
public static char getFirstCharacter(String s) {
return s.charAt(0);
}
public static int wordScore(String word) {
return word.length();
}
def increment(x: Int): Int = x + 1
def getFirstCharacter(s: String): Char = s.charAt(0)
def wordScore(word: String): Int = word.length
실습...
1.16 요약
'책 스터디 > [완료] FP - Grokking Funtional Programming' 카테고리의 다른 글
Grokking Functional Programming - 2부 6장 (0) | 2022.12.21 |
---|---|
Grokking Functional Programming - 2부 5장 (0) | 2022.12.14 |
Grokking Functional Programming - 1부 4장 (0) | 2022.11.30 |
Grokking Functional Programming - 1부 3장 (0) | 2022.11.23 |
Grokking Functional Programming - 1부 2장 (0) | 2022.11.16 |