본문 바로가기

Language13

Kotlin Sequential UUID 생성 RDB 환경에서 개발을 하다보면 무의식 적으로 PK 를 Sequence 값으로 지정할 때가 있습니다. 이번에 개발하면서 외부에 노출이 필요한 Unique 정보가 필요했습니다. 그런데 Sequence 정보를 사용하게되면 보안에 취약하고 다른 회원의 정보가 탈취당하기 쉽다. 저희의 요구사항은 이랬습니다. Sequential 한 값이어야 한다.(PK 기본 clursted Index 이기 때문) 값이 서로 비교가 되어야 한다. (1번의 확장) 육안으로 값을 유추할 수 없어야 한다. 위 요구사항을 생각 했을때, UUID 와 MongoDB 의 ObjectId 가 후보로 올라왔습니다. 그런데 여러가지의 DB 를 사용하는건 상관없지만 ObjectId 때문에 MongoDB 의 의존성을 주입 받는게 추후 관리적으로 힘들어.. 2023. 12. 5.
직렬화(Serialization)와 역직렬화(Deserialization) 클래스를 만들 때, 해당 특정 클래스에서 사용될 객체를 만들 수 있으며 프로그램을 실행 / 종료하면 가비지 수집기 스레드를 통해 객체가 자체적으로 수거됩니다. 객체를 다시만들지 않고 해당 클래스를 호출하려는 경우 어떻게 될까요?? 이럴때 데이터를 바이트 스트림으로 변환하여 직렬화 개념을 사용합니다. 객체 직렬화는 객체의 상태를 바이트 스트림으로 변환하는데 사용되는 프로세스로, 디스크 / 파일로 유지되거나 네트워크 통신을 통해 실행중인 다른 Java 가상머신으로 전송될 수 있습니다. 역직렬화란 이러한 바이트 스트림을 다시 객체형태로 변환하는 작업을 말합니다. 생성된 바이트는 플랫폼에 독립적입니다. 그래서 한 플랫폼에서 직렬화된 객체는 다른 플랫폼에서 역직렬화를 통해 데이터를 받아올 수 있습니다. 자바클래스.. 2022. 4. 18.
call by value vs call by reference 프로그래밍 언어들의 메소드 매개변수 호출 방식에는 여러 가지가 있으며 호출 방식은 언어마다 다르게 되어 있습니다. 대표적으로 C++ 은 call by refernce를 사용합니다. (매개변수를 넘겨주는 행위이기 때문에 pass by value, pass by reference라고도 합니다) call by value : 함수의 인자를 전달할 때 '값을 전달하는 방식' call by reference : '주소를 전달하는 방식' Java 는 call by value 방식! 더보기 Call by Value, Call by Reference 방식은 굉장히 헷갈리는 부분입니다. 하지만 자바가 탄생하던 시기의 C, C++와 비교하여 어째서 Call by Value 방식을 채택하였는지 감히 예상해 보자면 두 언어에 .. 2022. 4. 17.
자바 Generic Generic이란? 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식 파라미터 타입이나 리턴 타입에 대한 정의를 외부로 미룬다. 타입에 대해 유연성과 안정성을 확보한다. 타입 캐스팅을 하지 않기 때문에 성능상으로도 이점을 얻을 수 있다. 런타임 환경에 아무런 영향이 없는 컴파일 시점의 전처리 기술이다. Generic의 특징 클래스 혹은 메소드에 선언 할 수 있다. 동시에 여러 타입을 선언할 수 있다. 와일드카드를 이용하여 타입에 대하여 유연한 처리를 가능케 한다. 제네릭 선언 및 정의서에 타입의 상속관계를 지정할 수 있다. 출처 https://jehuipark.github.io/java/java-generic .. 2022. 4. 17.
상속(extends) vs 구현(implements) 상속(Extends) 사실 extends가 상속의 대표적인 형태다. 부모의 메소드를 그대로 사용할 수 있으며 오버라이딩 할 필요 없이 부모에 구현되있는 것을 직접 사용 가능하다. class Vehicle { protected int speed = 3; public int getSpeed(){ return speed; } public void setSpeed(int speed){ this.speed = speed; } } class Car extends Vehicle{ public void printspd(){ System.out.println(speed); } } public class ExtendsSample { public static main (String[] args){ Car A = new Ca.. 2022. 4. 17.
Interface vs Abstract Class 주제 내용을 알기전에 is-a 개념과 has-a 개념을 알고갑시다. 객체 지향적 관점 Is-a vs Has-a is-a 말 그대로 'A는 B이다'일 때의 '~이다'와 같습니다. 더보기 is-a는 추상화(형식이나 클래스와 같은)들 사이의 포함 관계를 의미하며, 한 클래스 A가 다른 클래스 B의 서브클래스(파생클래스)임을 이야기합니다. 다른 말로, 타입 A는 타입 B의 명세(specification)를 암시한다는 점에서 타입 B의 서브타입이라고도 할 수 있습니다. is-a 관계는 타입 또는 클래스 간의 has-a 관계와는 대조됩니다. has-a 및 is-a 관계들 간의 혼동은 실세계 관계 모델에 대한 설계에 있어 자주 발견되는 에러입니다. is-a 관계는 또한 객체 또는 타입 간의 instance-of 관계.. 2022. 4. 17.