Mac OS 로컬환경에 Redis를 설치하는 도중 home brew update를 진행하고자 brew update 명령문을 날리는 순간. Error: homebrew-core is a shallow clone. To `brew update`, first run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow This command may take a few minutes to run due to the large size of the repository. This restriction has been made on GitHub's request because updating shallow clones is ..
제네릭 제네릭은 컴파일 시점에 해당 타입을 확정짓지않고 런타임으로 유예시켜 다양한 타입을 받아들일 수 있도록 제공되는 문법입니다. 자바에서 Collection(List, Map, Set 등)을 활용해보셨다면 코틀린에서도 충분히 쉽게 다가올 수 있을 것입니다. 코틀린의 클래스는 자바와 마찬가지로 타입 파라미터를 가질 수 있습니다. class BlackdogGenerics(val t: T) { } 타입 파라미터란 위의 제네릭 클래스의 T 타입입니다. 위의 제네릭 클래스를 실행로직에서 활용해보겠습니다. 타입 아규먼트를 제공해주면 됩니다. fun main() { val blackdogGenerics = BlackdogGenerics("제네릭"); } 여기서 타입 아규먼트 선언은 생략할 수 있습니다. (타입추론)..
안녕하세요. 이번 포스팅은 공변성과 반공변성에 대해서 알아보겠습니다. 아마 많은 분들에게 생소한 단어로 느껴질 것 같습니다만 코드로 보면 단번에 이해할 수 있을 것입니다. 먼저 배열을 통해서 공변성에 대해 알아보겠습니다. Array는 공변성이다. 배열은 기본적으로 공변성입니다. 예를 들어, T[] 배열은 요소로써 T 하위 타입을 삽입할 수 있는 규칙이 허용된다는 뜻입니다. public static void main(String[] args) { Number[] numbers = new Number[4]; numbers[0] = 10; numbers[1] = 3.14; numbers[2] = 11L; numbers[3] = 3.25f; } 위에 대한 내용 뿐만아니라 타입 S가 타입 T의 하위타입일 때, S..
확장함수란 코틀린에서는 기존 클래스를 상속하거나 데코레이터 패턴 같은 디자인 패턴을 활용하지 않고도 클래스의 사용 목적을 확장할 수 있도록 기능을 제공합니다. 예를 들어, String 클래스를 예로 String 인스턴스의 맨 첫번째 요소를 가져오는 함수를 만들어두고 표준라이브러리에 추가하는 효과처럼 보이고 싶다면 fun String.getFirstWord() = this[0] fun main() { val str = "str"; println(str.getFirstWord()) } // s 이런식으로 마치 String 클래스에 이어서 getFirstWord라는 함수를 추가해두고 필요할 때 호출해서 사용할 수 있다. main 함수에서는 마치 이미 String 클래스에 해당 함수가 들어있던 것처럼 보인다. ..
HTTPS가 필요한 이유 개인정보 보호 무결성 식별 개인정보 보호 서버간 메시지 전송 시 통신하는 서버가 아닌 제 3자가 이를 가로챌 수 없음을 의미한다. 이러한 암호화되지 않은 메시지가 제 3자에게 노출된다면 잠재적으로 악용될 소지가 있음을 나타낸다. HTTPS 없이 웹사이트를 탐색한다면 비밀번호 등 유효정보를 도청당할 수 있다. 브라우저의 URL 표시줄에 자물쇠는 이렇게 몰래 훔쳐보고 있는 제 3자가 없다는 것을 뜻한다. 무결성 무결성은 메시지가 목적지로 가는 도중에 조작되지 않음을 의미한다. 예를 들어, 내가 누군가에게 메시지를 좋은 말로 보냈는데 제 3자에 의해 수정되어 못된 말로 변경되어 가는 경우 이러한 무결성이 보장되지 못한다고 볼 수있다. 위의 예처럼 중간에서 조작되는 것을 중간자 공격이라..
객체간에 변경할 수 없는(immutable) 데이터를 전달하는 것은 가장 흔하게 웹 어플리케이션을 개발하면서 만날 수 있는 작업입니다. Java 14 이전에는 boilerplate code 가 포함된 클래스를 만들어야 했으며 이는 사소한 실수와 복잡한 의도 등에 취약했습니다. Java14가 출시되면서 이제 record 키워드를 사용하여 이런 문제들을 해결할 수 있었습니다. Record record 키워드 사용하기 이전 대부분의 많은 상황에서 데이터를 전달하는 클래스는 데이터베이스에서 데이터를 꺼내와서 http 통신 너머의 유저에게 데이터를 전달하여 보여주는 역할을 하게 됩니다. 대부분 말씀하시는 DTO가 이런 역할로 볼 수 있습니다. 많은 경우 이러한 데이터를 변경하여 전달하기보다 해당 디비 raw 데이..
실드 클래스 하나의 Parent 클래스가 있을 때, 이를 상속하는(인터페이스라면 구현하는) 다른 Child1, Child2, ... 클래스가 있다고 가정하면, 컴파일러는 현재 시점에서 어떤 클래스가 Parent를 상속하고 상속하지 않는지 알수가 없다. abstract class AbstractRoom { abstract val roomType: String abstract val title: String abstract fun tellStatus() } data class RoomApt(override val title: String) : AbstractRoom() { override val roomType: String = "아파트"; override fun tellStatus() { println("..
싱글톤이란 싱글톤 패턴에서 싱글톤, 즉 단하나의 인스턴스를 토대로 개발해나가는 디자인 패턴의 하나이다. 멀티스레드 환경에서도 안전하게 유일한 인스턴스를 가져야합니다. 싱글톤을 구현하는 방법은 굉장히 많습니다. 이러한 디자인 패턴은 한가지 언어에 국한되지 않고 다양하게 적용할 수 있기 때문에 싱글톤 패턴이라는 디자인 패턴을 보고싶은 분들의 경우에는 아래의 블로그 포스팅을 참조해주세요. https://sas-study.tistory.com/478 [Java Design Pattern] 자바 디자인패턴, Singleton 싱글톤 패턴 싱글톤 패턴 시스템 런타임이나 환경 셋팅에 대한 정보등 클래스 인스턴스가 여러개일 때 문제가 발생할 수 있는 요구사항이 있다. 이럴 경우 싱글톤 패턴을 활용한다면 인스턴스를 오직..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.