추상화(Abstraction) Abstract 라는 단어의 어원은 라틴어 abstractus 에서 왔고, 이 단어는 from 의 의미를 가진 ab- 와 draw off 의 의미를 가진 trahere 의 합성어 이다. 어원에서 부터 이 단어의 의미를 생각해 보면 무엇으로 부터 어떤 것을 빼낸다는 것이다. 쉽게 생각해 보면 어떤 대상으로 부터 필요한 것을 추출한다는 의미를 가지고 있다고 볼 수 있다. OOP에서 말하는 추상화(Abstraction)의 개념도 이 단어가 가진 의미를 그대로 담고 있다. 복잡한 시스템에서 필요한 부분만 추출하여 단순화 하여 본질적이고 공통적인 부분만 남게 만드는 것이다. 사용자는 추상화를 통해 단순화 된 개념을 사용해 사용자의 본래 목적에 더 집중할 수 있게 된다. 캡슐화(Enc..
내부 클래스에 static이 권장되는 이유는 크게 두 가지이다. 첫째, static으로 선언되지 않은 내부 클래스는 외부 클래스에 대한 숨은 참조를 저장해야 하기 때문에 이를 위한 시간/공간적 복잡도가 증가해 성능이 떨어진다. 둘째, 내부 클래스가 외부 클래스에 대한 숨은 외부 참조를 갖기 때문에 가비지 컬렉션이 제대로 이루어 지지 않아 메모리 누수가 발생할 수 있다. 이러한 이유로 내부 클래스에서 외부 클래스의 인스턴스 변수에 접근하지 않는 경우 static으로 내부 클래스를 선언하는 것이 좋다. 이 때, static으로 선언된 내부 클래스는 외부 클래스에 대한 숨은 외부 참조를 갖지 않는다. 숨은 외부 참조를 가진다는 의미는 다음 코드를 보면 쉽게 이해할 수 있다. public class OuterC..
동기/비동기, 블로킹/논블로킹의 차이 동작은 비슷하지만 관심사가 다르다 Blocking / Non-Blocking 관심사: 호출되는 함수가 바로 리턴하느냐 마느냐 Blocking: 호출된 함수가 자신의 작업을 모두 마칠때 까지 제어권을 넘겨주지 않고 대기하게 만듦 Non-Blocking: 호출된 함수가 호출한 함수에게 바로 제어권을 넘겨주고 호출한 함수가 다른 일을 할 수 있게 함 Synchronous / Asynchronous 관심사: 호출되는 함수의 작업 완료 여부를 누가 신경 쓰느냐 Synchronous: 호출 하는 함수가 호출되는 함수의 완료 여부를 신경씀 Asynchronous: 호출하는 함수가 작업 완료 여부를 신경쓰지 않고, 호출받는 함수에게 callback 전달. 조합 Blocking, S..
jpa 엔티티 클래스에 @EqualsAndHashCode 연산을 사용하는 경우. IDEA에서 경고 메시지를 표시합니다. Using @EqualsAndHashCode for JPA entities is not recommended. It can cause severe performance and memory consumption issues. JPA 엔티티에 @EqualsAndHashCode를 사용하는 것은 권장되지 않습니다. 심각한 성능 및 메모리 소비 문제를 일으킬 수 있습니다. JPA 엔티티에 @EqualsAndHashCode 주석을 사용할 수 있지만 IntelliJ IDEA는 성능 및 메모리 소비 문제를 일으킬 수 있으므로 사용하지 않는 것이 좋다는 경고 메시지를 표시합니다. 이 경고가 표시되는 이..
https://webfirewood.tistory.com/128 Kafka(카프카) 개관 분산 서비스가 대세가된 지금 대부분의 현대 웹애플리케이션의 아키텍쳐는 위 그림과 같은 복잡한 모습을 가지게 됩니다. 보기만 해도 머리가 아플 정도로 복잡한 의존성 관계 때문에 시스템 webfirewood.tistory.com 위 포스트에서 카프카에 대한 개략적인 설명을 드렸었습니다. 이제 실제로 로컬에 카프카를 설치해서 Java 로 메세지를 발행하고 받아보는 코드를 만들어 보도록 하겠습니다. Mac OS 기준의 설명인 점 양해 부탁드립니다. 다운로드 일단 아래 링크에서 카프카를 다운로드 받습니다. 이 포스트에서는 2.8.0 버전을 사용하도록 하겠습니다. https://www.apache.org/dyn/closer.c..
pwd ls -al chmod 777 [file name] 권한 종류 rwx : 7 rw- : 6 r-x : 5 r-- : 4 -wx : 3 -w- : 2 --x : 1 mkdir [directory name] touch [file name] rm -f [file name] rm -r [directory name] cd [directory name] mv [source] [destination] cp [source] [destination] I cp -r [dir source] [dir destination] ln -s [source] [target] ln [source] [target] cat [file name] cat [source] [target] cat [source] >> [target] he..
큰맘먹고 새로운 맥북을 장만하고 기본적인 세팅중에 겪은 문제를 공유합니다. homebrew 통해서 mysql 설치를 완료하고 안내대로 PATH를 추가 했음에도 불구하고 (echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc) zsh: command not found: mysql 에러가 발생해서 사람을 당황하게 만들었습니다. 처음에는 M1 칩의 문제인가 하여 서칭을 했는데 칩의 문제가 아니라 .zshrc 파일을 수정하고 적용을 하지 안아서 생긴 문제였습니다. 수정한 스크립트 파일을 바로 적용하기 위해서 source 명령어를 사용하면 됩니다. source ~/.zshrc
package 정의와 imports package 사양은 소스파일의 최상단에 위치합니다. 이 때, 디렉토리와 패키지가 매치될 필요는 없습니다. 소스파일은 디렉토리와 상관없이 파일 시스템 어디든 위치할 수 있습니다. package com.tistory.webfirewood.kotlin import kotlin.text.* // ... program entry point 코틀린의 시작점(entry point)은 main 함수 입니다. fun main() { println("Hello world!") } 또다른 형태의 main 함수는 복수의 String arguments를 받을 수 있습니다. fun main(args: Array) { println(args.contentToString()) } standard..
- Total
- Today
- Yesterday
- RESTful
- 크롬
- 전략패턴
- 야근
- REST API
- Spring in Action
- 자바스크립트 개론
- DP
- GROUP BY
- 동적계획법
- restful api
- 마르코프
- Count
- was
- Warning
- 자바스크립트개론
- markov chain
- 경고
- 디자인패턴
- 몰라서망신
- Markov
- java
- 로그
- CONVENTIONS
- 유지보수
- html
- 코딩의 기술
- 마르코프 연쇄
- 클린코드
- 문장 생성기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |