fun main(args: Array { println("Hello, World") } 함수를 선언할 때 fun 키워드를 사용한다. 파라미터 이름 뒤에 그 파라미터의 타입을 작성한다. 이는 변수를 선언할 때도 마찬가지로 방식으로 타입을 지정한다. 함수를 최상위 수준에 정의할 수 있다. 즉, 클래스 안에 함수를 넣어야할 필요가 없다. 코틀린에서는 자바와 달리 배열 처리를 위한 문법이 따로 존재하지 않는다. 배열도 일반적인 클래스와 마찬가지이다. 코틀린 표준 라이브러리는 여러 가지 표준 자바 라이브러리 함수를 간결하게 사용할 수 있게 감싼 래퍼(wrapper)를 제공한다. 세미콜론(;)을 붙이지 않아도 된다. 함수 함수 선언은 fun 키워드로 시작하고, fun 다음에는 함수 이름이 온다. 아래 max라는 이..
비합리적이거나 애매한 가정에 기반해서 코드가 작성되거나 다른 개발자가 잘못된 일을 하는 것을 막지 못할 때 코드는 오용되기 쉽다. 코드를 잘못 사용할 수 있는 몇 가지 일반적인 경우는 다음과 같다. 호출하는 쪽에서 잘못된 입력을 제공 다른 코드의 부수 효과(입력 매개변수 수정 등) 정확한 시간이나 순서에 따라 함수를 호출하지 않음 관련 코드에서 가정과 맞지 않게 수정이 이루어짐 위와 같은 상황을 막기 위해선 코드를 오용하기 어렵게 설계하고 작성하는 것이 중요하다. 아래에서 코드를 쉽게 오용할 수 있는 경우를 살펴보고, 오용하기 어렵게 만드는 기법을 알아보자. 불변 객체로 만드는 것을 고려하라 객체를 불변으로 만드는 것이 항상 가능하지도 않고, 또 항상 적절한 것도 아니다. 하지만 가변적인 객체는 코드의 ..
서술형 명칭 사용 가독성은 본질적으로 주관적인 것이며, 그것이 정확히 무엇을 의미하는지 확실하게 정의하기는 어렵다. 가독성의 핵심은 개발자가 코드의 기능을 빠르고 정확하게 이해할 수 있도록 하는 것이다. 서술적이지 않은 이름은 코드를 읽기 어렵게 만든다 아래 예는 서술적인 이름을 사용하지 않은 예이다. 만약 아래 코드가 무엇을 하는지 설명하라고 요청을 받는다면 어떻게 답해야 할까? class T { Set pns = new Set(); Int s = 0; Boolean f(Strinf n) { return pns.contains(n); } Int getS() { return s; } } Int? s(List ts, String n) { for (T t in ts){ if(t.f(n)) { return t..
복구 가능성 소프트웨어에 대해 생각할 때, 특정 오류가 발생한 경우, 복구할 수 있는 현실적인 방법이 있는지 생각해야 하는 경우가 많다. 복구할 수 있는 오류와 복구할 수 없는 오류를 상황에 따라 어떻게 달라지는지 살펴보자. 즉, 오류가 발생했을 때 무엇을 할 것인지 결정하기 위해서는 자신의 코드가 어떻게 사용될지 신증하게 생각해야 한다. 복구 가능한 오류 많은 소프트웨어 오류는 치명적이지 않으며, 오류가 발생하더라도 사용자는 알아채지 못하도록 적절하게 처리한다면 작동을 계속할 수 있는 합리적인 방법이 있다. 네트워크 오류: 자신의 코드가 의존하는 서비스에 연결할 수 없는 경우, 몇 초 동안 기다렸다가 다시 시도하거나, 그 코드가 사용자의 장치에서 실행되는 경우라면 사용자에게 네트워크 연결을 확인하도록 ..
자신의 코드와 다른 개발자의 코드 다른 개발자들이 활발하게 코드를 변경하더라도 코드의 품질이 유지되려면 코드가 튼튼하고 사용하기 쉬워야 한다. 고품질 코드를 작성할 때 가장 중요한 고려 사항 중 하나는 다른 개발자가 변경하거나 코드와 상호작용할 때 발생할 수 있는 문제는 없는지, 또 발생한다면 그 문제를 어떻게 완화할 수 있을지를 이해하고 선제적으로 조치하는 것이다. 우리는 혼자 일하지 않는 이상 다른 개발자들을 고려하지 않고는 고품질의 코드를 작성할 수 없다. 코드를 작성할 때 다음 세 가지를 고려하는 것이 유용하다. 자신에게 명백하다고 해서 다른 사람에게도 명백한 것은 아니다. 다른 개발자는 무의식중에 내 코드를 망가뜨릴 수 있다. 시간이 지남에 따라 자신의 코드를 기억하지 못한다. 자신에게 분명하다..
왜 추상화 계층을 만드는가 HttpConnection connection = HttpConnection.connect("http://example.com/server"); conncetion.send("Hello Server"); connection.close(); 예를 들어 사용자의 어떤 장치에서 실행되면서 서버에 메시지를 보내는 코드를 작성한다고 가정해보자. 이때, 최상위 계층에서는 HTTP 프로토콜이 어떻게 구현되는지 알 필요도 없이 서버에 메시지를 보내는 것에만 신경을 쓰면서 코드를 작성할 수 있다. 이와 비슷하게 HTTP 프로토콜을 구현하기 위한 코드를 작성한 엔지니어는 데이터가 무선 신호에 변조되는 방법에 대해 아무것도 몰라도 문제가 없을 것이다. HttpConnection 코드를 구현한 개발..
코드는 어떻게 소프트웨어가 되는가 코드는 일반적으로 엔지니어가 작성하자마자 실제로 실행되는 소프트웨어가 되는 것이 아니다. 코드가 의도한 대로 작동하고 기존의 기능이 여전히 잘 작동한다고 확신하기 위한 다양한 과정과 점검이 이루어진다. 이러화 과정을 소프트웨어 개발 및 배포 프로세스라고 부른다. 코드베이스(Codebase): 소프트웨어를 빌드할 수 있는 코드가 저장된 저장소다. 이것은 일반적으로 깃, 서브버전, 퍼포스 등과 같은 형상관리 시스템에 의해 관리된다. 코드 제출(submitting code): 코드 커밋 혹은 풀 요청 병합이라고도 불린다. 개발자는 일반적으로 코드베이스를 자신의 로컬 컴퓨터에 복사하고 여기서 코드를 변경한다. 코드 변경이 끝나면 변경된 사항을 메인 코드베이스에 제출한다. 코드 ..
오늘 TIL 3줄 요약 실현하려면 계획하라. 유행하는 것이 아니라 실제로 잘 맞는 것을 사용하라. 모든 테스트가 끝날 때까지는 코딩이 끝난게 아니다. TIL (Today I Learned) 2022.04.05 오늘 읽은 범위 9장. 실용주의 프로젝트 p377-p406 책에서 기억하고 싶은 내용을 써보세요. 깨진 창문을 없애라 품질은 팀의 문제다. 팀 전체가 깨진 창문을 용납하지 않아야 한다. 반드시 제품의 품질에 책임을 져야 한다. 실현하려면 계획하라. => 깨진 창문을 그래도 둔다면 상황은 점점 더 악화된다. 코드를 작성하다 엉망인 코드를 발견하고, 다음에 고쳐야지 하며 냅두었다. 시간이 지나고 다시 그 코드 쪽을 건드리다 엉망인 코드를 마주한다. 또 다시 다음을 기약한다. 이런 일이 반복되면서 시간은..
📌 연습문제 33 다음 문장들이 진정한 요구 사항인가? 가능하다면 진정한 요구사항이 아닌 것을 좀 더 유용하게 고쳐 써 보라. 1. 응답 시간은 500ms이하여야 한다. 💡 나의 해답 : 확실한 요구사항이다. 분명한 이유가 있어서 응답 시간이 500ms이하여야한다는 사항이 주어진 것으로 보인다. 2. 모달창의 바탕색은 회색이다. 💡 나의 해답 : 요구사항이 아니라 생각한다. 음.. 이 사항은 보자마자 "왜?"라는 질문이 자동으로 튀어나왔다. 의도가 사용자를 위한 것인지, 디자이너의 관점에서 그런것인지, 그냥 본인 취향인지 확인할 필요가 있는 사항이다. 3. 애플리케이션은 프론트엔드 프로세스 몇 개와 백엔드 서버로 구성된다. 💡 나의 해답 : 요구사항이 아니라 생각한다. 책에서 말하는 좋은 요구사항은 추상..
오늘 TIL 3줄 요약 사용자처럼 생각하기 위해 사용자와 함께 일하라. 행운은 준비된 사람에게 찾아온다. 사용자는 여러분 팀의 일원이다. TIL (Today I Learned) 2022.04.03 오늘 읽은 범위 8장. 프로젝트 전에 p349-p376 책에서 기억하고 싶은 내용을 써보세요. 요구 사항의 구렁텅이 자신이 뭘 원하는지 정확히 아는 사람은 아무도 없다. 진짜 세상은 엉망이고 갈등이 넘쳐나며 알 수 없는 점도 많다. 프로그래머는 사람들이 자신이 원하는 바를 깨닫도록 돕는다. 신입 개발자들이 자주 범하는 실수는 이런 요청 사항을 받았을 때 바로 해결책을 구현해 버리는 것이다. 요구 사항은 피드백을 반복하며 알게 된다. 실용주의 프로그래머는 프로젝트 전체를 요구 사항 수집 과정으로 보아야 한다. 사..
- Total
- Today
- Yesterday
- 파이썬
- 그리디
- 백준
- 북클럽
- 자료구조
- 리팩토링
- 정렬
- Algorithm
- MySQL
- 데이터베이스
- 노마드
- 스프링부트
- 알고리즘
- webflux
- Spring
- 스프링
- kotlin
- mysql 8.0
- 구현
- spring boot
- 코테
- 문자열
- 릿코드
- 코틀린
- 인프런
- 노마드코더
- leetcode
- 스프링 부트
- Real MySQL
- 김영한
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |