본문 바로가기


전체

[OOP] 객체, 추상화, 캡슐화 객체 객체와 일반적인 값이 구분되는 것은 식별자때문이다. 객체를 고유하게 만들어주는 식별자 그게 바로 객체이다 식별자는 ID나 이름 같은 하나의 값일수도 ID와 이름이 합쳐진 또 다른 타입의 값일 수도있다. 추상화(Abstraction) 추상화는 특성을 일반화하고 세부사항을 제거하여 단순하게 만드는 과정이다. 모든 지형들을 표시하기 보다는 필요에 따라 필요한 특성들을 골라냄을 통해 복잡한 지형을 단순하게 길을 찾기 위한 용도만으로 사용할 수 있다. 이를 객체에 적용하여 하나의 새로운 타입으로 만들어 낼 수 있다. 토끼, 강아지, 고양이 이라는 객체가 있다고 하자 이 객체들을 '동물' 이라는 개념으로 추상화할 수 있다. 추상화의 과정 공통점을 찾아 일반화한다. 숨을 쉰다. 스스로 움직일 수 있다. 토끼가 ..
[Cassandra] Cassandra Row Key 종류 Row Key 종류 Partition Key (Row Key) Node를 결정하는 Key 각 노드가 ring에 참여하면 hash 값의 범위를 부여받고 들어온 데이터의 hash 값을 계산하여 저장될 노드가 결정 된다. 이 때 계산되는 hash 값을 token 이라고 한다. Clustering Key (Sort Key) Node 에 저장된 각 Row 의 모든 Column 들을 정렬하는 Key Primary Key 각 Node 에서 각 Row를 Unique하게 결정해주는 Key 1개 이상의 Partition Key와 0개 이상의 Clustering Key로 구성된다. Primary Key는 Unique 해야한다. Composite Key 여러개의 컬럼으로 구성된 Key 끝!
[JPA] @Convert 사용해서 Object를 Json 형식으로 저장하기 서론 요즘은 다양한 DB 에서 Json 타입을 지원하려고 하지만 하위버전이나 Json 타입을 지원하지 않는 DB 를 사용하고 있는 경우가 있을 것이다. 속성값 같은 건데 모두 column 으로 파는것보다는 Json 타입으로 저장하여 꺼내 쓰는 용도로 사용하면 유용한 경우가 있다. 이런 경우에 매번 가져올 때마다 convert 하지 않아도 Entity 내에서 객체 타입 그대로 사용할 수 있게 해주는 Java Persistence Api 가 있다. 예제 Product 라는 Entity 가 있고 ProductAttribute 를 Json 형식의 text 타입으로 DB Column 에 넣는다고 가정하자. Product Entity 코드 @Entity public class Product { ... @Conver..
[의존성과 아키텍처] 조영호작가님의 우아한 객체지향 강의 후기 및 정리 회사에 조영호작가님이 오셔서 우아한테크세미나에서 진행하신 의존성과 아키텍처 강의를 진행해주셨다. 오늘 쓸 내용은 그 강의에 대한 후기이자 정리이다. 정리 의존성 의존성이란 A와 B가 존재하고 B가 변경될 때 A도 변경되어야 하면 A가 B에 의존성을 가진다라고 할 수 있다. https://image.slidesharecdn.com/woowahanoo-190618171417/95/-3-1024.jpg?cb=1560916139 클래스 의존성의 종류 연관 관계 (Association) A가 B를 '영구적' 으로 의존하는 경우 대표적으로 객체참조가 이에 해당된다. 의존 관계 (Dependency) A가 B를 '일시적'으로 의존하는 경우 대표적으로 함수의 파라미터로 넘겨받는 경우나 리턴타입, 지역변수의 경우가 해당..
[JAVA Stream] stream(), peek()의 함정 Java8 에서 stream 에는 두가지의 반복문이 사용가능한데 peek() 과 forEach() 가 있다. 두가지의 차이점이라고하면 forEach 는 그자체만 사용가능하지만 peek() 은 그렇지 않다. 이유는 단순한데 forEach는 return 값이 void 라서 최종처리메소드로 쓰일 수 있지만 peek은 stream 을 return 해서 불가능하다. /*peek 구현체*/ @Override public final Stream peek(Consumer
[Gradle] Dependency version 이 꼬였을 땐, Dependency Management gradle version :gradle-5.5-bin.zip ide : intellij idea 2019.1 잡소리서론 개발을 하다보면 전부 구현해서 쓸수 없으니까 여러가지 디펜던시를 설정해서 다양한 외부라이브러리들을 사용하게 된다. 하지만 그 라이브러리들 또한 다양한 외부 라이브러리들을 사용하게되고 한프로젝트 내에 다양한 모듈 그리고 다양한 라이브러리들을 사용하다보면 서로 버전이 안맞게 되고 guava 같이 하위버전 호환을 잘 안 해주지만 엄청나게 많은 라이브러리에서 사용하고 있는 애들이 간혹있다. compile 말고 implementation 를 사용하면 좀 더 버전을 깔끔하게 할 수 있지만 오억개의 라이브러리를 디펜던시하고있는 라이브러리를 사용할땐 여간 불편한게 아니다. 최근에 netty 관련 라..
[Cassandra] cassandra 설치 및 테이블 생성 환경 : Mac OSX high sierra 카산드라는 다운로드로 설치할 수도 있고 도커위에 올려 놓을 수 도 있고 다양한 방법이 있는데 간단하게 설치하려면 역시 뭐다? brew 다 1. brew로 설치 > brew install cassandra 2. 카산드라 실행 > brew services start cassandra 3.카산드라 정지 > brew services stop cassandra 일단 카산드라를 사용하려고하니 3번은 건너뛰고 2번의 실행만 시킨상태로 cqlsh를 사용한다. 구글링해보면 cassandra-cli를 이용한 다양한 예제들이 나오는데 사용하지 않는게 권고사항이니 cqlsh를 쓰도록 합시다. 4. keySpace 생성 CREATE KEYSPACE IF NOT EXISTS test_..
[Java] Handlebars.java 써서 예약어 Template 으로 처리하기 Handlebars.java 버전 : 4.1.0 Java 버전 : open jdk 1.8 Mac Os : High sierra 라이브러리 주소: https://github.com/jknack/handlebars.java "Message's {{title}} and {{bod}}" 라는 문장에 title과 body를 동적으로 채워야 하는 처리가 필요할 때 사용할 수 있는 유용한 라이브러리를 소개하려고 한다. 핸들바(Handlebars)에서는 어떤 객체에 담긴정보를 템플릿화 시킬 수 있는 라이브러리를 제공 해주는게 그게 바로 TypeSafe Handlebars 이다 영어로 사용법이 소개되어있는데 매우 간단하다. public interface MessageTemplate extends TypeSafeTempl..