728x90

분류 전체보기 173

[Mac] Kotlin 설치 및 CLI 에서 사용하기

맥 CLI 에서 코틀린을 사용하기 위해서 방법을 찾아보고 있었다. 일단 brew 를 통해 쉽게 설치 가능하다. brew install kotlin 위와 같이 입력하면 정상적으로 설치가 된다. 이렇게 설치되는 코틀린 SDK 는 코틀린 컴파일러 kolinc-jvm 과 코틀린 실행명령어 kotlin 이 포함되어 있다. 기존 javac 와 java 와 맵핑되는 느낌이다. 백문이 불여일타라고 한번 코드로 작성한뒤 컴파일과 실행을 해보자. fun main() { println("Hello World"); } 이제 한번 kotlinc-jvm 을 통해서 컴파일 시켜보자. kotlinc-jvm hello.kt 아래와 같이 잘 컴파일되어 Class 파일로 존재하는 것을 알 수 있다. 한번 Class 파일로 확인해보자. 아..

Kotlin 2021.12.06

협력과 메세지

앞선 포스팅들에서 책임에 관련된 이야기를 계속해서 해왔다. 객체지향에는 또 설명해야할 중요한 개념이 존재하는데 "협력" 과 "메세지" 이다. 이미 앞선 포스팅에서 지겹게 설명했다고 생각할 수도 있지만 이제는 이해를 하기 위해서 현실세계로 잠깐 저 내용을 끌고 와볼까 한다. 이 포스팅은 대부분의 내용이 조영호님의 "오브젝트" 를 읽고 느낀점을 생각으로 정리한 글입니다. 본문 제일 아래에 책 링크가 달려있습니다. 협력과 메시지 개인적으로 이 둘은 떼놓고 설명하기가 힘들다고 생각한다. 과연 이 추상적인 개념은 객체지향 세계에서 어떻게 설명할 수 있을까? 가장 쉽게 설명할 수 있는건 Client - Server Model 로 설명하는 것이다. Client 는 Server 에 Request(요청) 을 보내고 Se..

Architecture 2021.12.02

응집도와 결합도

응집도와 결합도는 소프트웨어 품질을 결정 짓는 요소이다. 대다수의 사람들은 코드를 작성할때 "응집도" 와 "결합도" 를 생각하지 않은채 관성적으로 코드를 적고는 한다. 응집도와 결합도는 무슨 뜻일까? 일단, 이 개념을 이해하기 위해서 알고 있어야 할 선행지식이 있다. 불안정한 부분과 안전한 부분의 분리 바로 "불안정한 부분" 과 "더 안전한 부분" 을 분리해 내는 능력이 필요하다. 예를 들어 아래와 같은 객체가 존재한다고 해보자. Address 는 모든 변수가 public 하게 열려있다. 우리는 앞으로 Public 하다는건 자신의 내부 속사정을 공개한 객체 취급을 할 것이다. 외부에서 이를 어떻게 사용할까? 위와 같이 사용할 수 있을 것이다. 위와 같이 사용했을때 어떤 문제가 발생할 수 있을까? 아니 "..

Architecture 2021.11.28

객체지향 체조

내가 부트캠프를 하던 시절 과제로 코드를 작성하는데 몇 가지 조건을 제한해둔 과제를 받은 적이 있다. 제한해둔 조건은 대략적으로 아래와 같았다. (기억이라 틀릴 수 있음) 1. 절대로 인덴트 depth 가 3 이상이 되지 않도록 하시오. 2. 중복코드를 최대한 없도록 하시오. 3. 하나의 함수가 80줄을 넘지 않도록 하시오. 그 당시에는 "이것이 가능한가?" 라는 물음이 있었다. 근데 또 하다보니 어찌어찌 되긴됬다. 근데 이 중 for 문 부분에서 3뎁스에 도달해서 떨어질꺼란 생각을 했던 기억이 난다. 여튼 그 당시에는 잘 몰랐지만, 이 내용이 객체지향 체조에 들어있던 내용이였다. 그래서 오늘은 객체지향 체조를 정리해보려고 한다. 객체지향 체조 1. 메소드 당 indent depth 는 하나로 제한한다...

Java 2021.11.28

객체지향) 객체의 역할, 책임, 협력

대부분의 책에서 객체지향은 역할, 책임, 협력이 중요하다고 한다. 도대체 역할, 책임, 협력은 정확히 객체세계에서 어떤 부분을 이루고 있을까? 한번 알아보자. 협력 객체지향 시스템은 자율적인 객체들이 공동체를 이루고 있는 것을 말한다. 객체지향 세계에서 협력이란 기능을 구현할 수 있는 유일한 방법이다. 두 객체사이의 협력은 하나의 객체가 다른 객체에게 도움을 요청할 때 사용한다. 백문이 불여일타라고 코드로 한번 보는 것이 빠를 것 이다. Lotto Class 는 자신의 IntArray 를 랜덤 숫자로 채우기 위해서 randomLottoNumberGenerator 에 협력을 요청하고 있다. 그림으로 그리면 아래와 같을 것이다. Lotto Class 는 LottoNumeberGenerator 의 genera..

Java 2021.11.24

JPA PersistContext

이 문서는 Hibernate ORM 공식문서를 읽으며 정리한 글입니다. Hibernate.Session 과 EntityManager 의 API 는 데이터를 지속성있게 다룰 수 있도록 해주는데 이를 Persistence Context 라 한다. Persistence Context 에서 관리되는 데이터는 기본적으로 database 와 persistence context 양쪽에서 연관된 상태로 관리된다. Persistence data 는 아래와 같은 생명주기를 가진다. LifeCycle 비영속 (transient) : 엔티티가 만들어졌지만 아직까지 Persistence Context 와 연관이 없는 상태를 뜻합니다. 위와 같이 Memer Entity 는 초기화가 됬지만, 아직 영속성 컨텍스트에 관리되지 않고있..

Java 2021.11.22

단어와 구

모든 언어는 기본적으로 아래와 같은 네가지 요소로 구성되어 있다고 한다. 단어가 모이면 구가되고, 구가 모이면 절이되고, 절이 모이면 문장이 된다고 한다. 품사 단어의 종류를 한 단어로 품사라고 한다고 한다. 영어에는 9가지 품사가 있고, 각 품사의 정의와 예는 아래와 같다. 간단한 정의 예 명사(noun) 사물의 이름 book, car, pen, milk 대명사(pronoun) 명사를 대신하는 단어 it, then, you, i 형용사(adjective) 명사 / 대명사를 수식하는 단어 small, happy, deep, thin 동사(verb) 동작 / 상태를 나타내는 단어 play, eat, sleep, love 부사(adverb) 동사를 수식하는 단어 well, really, soon, happi..

영어공부 2021.11.22

테스트 더블의 종류

https://devroach.tistory.com/52?category=1031971 테스트 더블 Effective Unit Test 에서 이 부분을 읽으면서 배운게 너무나도 많다. 그 내용을 한번 정리해보려고 한다. 테스트 더블이란? 테스트 더블이란 쉽게 예기하면 Stub 과 같이 특정 메소드가 완성되기 전에 devroach.tistory.com 앞서 설명한 테스트 더블에 대해서 어떤 종류가 있는지 조금 더 알아보자. 테스트 더블의 종류 테스트 더블은 아래와 같이 4가지 분류로 나뉜다. 테스트 스텁 테스트 스텁은 원래의 구현을 최대한 단순한 것으로 바꾸는 것이다. 우리가 만약에 서버에서 로깅을 하다가 실패하는 로그를 찍어야 된다고 해보자. 하지만 로깅 자체는 테스트 로직에는 영향을 주지 않아 독립시켜..

Test 2021.11.22

테스트 더블

Effective Unit Test 에서 이 부분을 읽으면서 배운게 너무나도 많다. 그 내용을 한번 정리해보려고 한다. 테스트 더블이란? 테스트 더블이란 쉽게 예기하면 Stub 과 같이 특정 메소드가 완성되기 전에 대용해서 사용할수 있는 것을 뜻한다. 너무 추상적인거 같아서 쉽게 얘를 들면 Mocking 한 객체라고 생각해도 좋다. 순수히 그 메소드만 평가해야되는 단위 테스트에서는 이러한 테스트더블을 많이 사용하게 된다. 예를 들면 저번에 말했던 우리가 제어할 수 없는 대상을 테스트 더블로서 통제할 수 있는 것이다. 언제나 그렇듯, 코드로 보는것이 제일 나으니 코드로 한번 살펴보자. 예를 들어, 이런 Car class 가 있다고 해보자. 우리는 외부에서 Car 의 start 메소드 가 호출될때 Engin..

Test 2021.11.19

어떤 것이 좋은 테스트 코드인가?

프로그래밍을 계속 해오고 테스트코드를 작성하면서 내 일생을 관통할 주제 중 하나인 것 같다. 오늘은 그래서 Effective Unit Testing 을 읽으며 느낀 생각들을 정리해보려고 한다. 무엇이 좋은 테스트인가? 좋은 테스트 코드에는 아래와 같이 공통적인 다섯가지 요소들이 있다. 1. 테스트 코드의 가독성과 유지 보수성 우리가 현업에서 코드를 작성하다보면 흔히 불리우는 'Legacy' 로 구성된 시스템에 부딪힌다. 레거시 코드를 읽다보면 코드를 이해하는데만 오랜 시간을 쓰게 된다. 그래서 우리는 레거시 코드를 더 읽기 좋게 바꾸기 위해 리팩토링이란 것을 진행하고는 한다. 테스트 코드 또한 코드로 이루어져 있기에 가독성이 나쁘다면 'Legacy Code' 가 된다. Legacy Code 를 만나보지 ..

Test 2021.11.19
728x90