가상은행 프로젝트를 진행하면 거래번호 타입을 UUID로 할 지 Long으로 할 지 고민을 했다. Long [장점] - 성능: 숫자 기반은 일반적으로 인덱싱과 검색이 빠르다. Auto Increment를 사용하면 새로운 ID를 생성하고 관리하는 것이 효율적이다. [단점] - 예측 가능성: 숫자 ID는 연속적이고 예측이 가능해서 보안 측면에서 약점이 될 수 있음 UUID [장점] - 유일성: 16진수 36자 문자열(32개의 문자와 4개의 하이픈)로 표시되는 128비트 값이기 때문에 아주 높은 확률로 고유한 값을 가진다. 총 340,282,366,920,938,463,463,374,607,431,768,211,456개가 사용가능하다. 엄청 희박하겠지만, 이론상으로는 중복이 될 가능성이 있다. - 보안: 예측하..
BaseEntity 사용 이유 생성일, 수정일과 같은 모든 엔티티의 공통 속성은 BaseEntity를 사용함으로써 중복을 방지해주고 코드의 일관성을 유지해준다. @MappedSuperclass: BaseEntity가 실제 entity의 기능을 하는 것이 아니기 때문에 실제 entity에 매핑해주기 위해 사용 @EntityListeners: 하나 이상의 엔티티 리스너 클래스를 지정하기 위해 사용 AuditingEntityListener.class: 엔티티의 생성 시간과 수정 시간을 자동으로 감시 @CreatedDate: 생성일 자동 할당 @LastModifiedDate: 수정일 자동 할당 @EntityListeners(AuditingEntityListener.class) @Getter @MappedSupe..
Organization을 통해 팀으로 진행했던 프로젝트가 있다. 이 프로젝트를 개인 리포지토리에 옮겨서 포트폴리오로 만들고 싶었다. front와 back을 나누어 진행했기 때문에 하나의 리포지토리로 합쳐서 보여주면 더 좋을 것 같았다. Git 리포지토리에 다른 리포지토리를 포함시킬 수 있는 방법으로는 subtree, submodule 방법이 있다. subtree는 외부 리포지토리의 내용을 직접 복사하는 방식이다. 완전히 통합되어 자동 업데이트 된다. submodule은 외부 리포지토리의 링크를 참조하는 방식이다. 독립성을 유지할 때 좋다. 추후에 리팩토링 할 예정이므로 subtree로 진행했다. [외부 리포지토리] [결과 - 내 리포지토리] 1. 새로운 내 리포지토리를 하나 생성한다. 처음 만들면 아무런..
다형성이란? 하나의 객체가 많은 형(타입)을 가질 수 있는 성질이다. 상속 관계에 있을 때, 조상 클래스의 타입으로 자식 클래스 객체를 참조할 수 있다. 다형성의 활용1 다른 타입의 객체를 다루는 배열 다형성으로 다른 타입의 데이터 (Person, SpiderMan)을 하나의 타입으로 통일하여 하나의 배열로 관리 할 수 있다. Object의 배열은 어떤 타입의 객체라도 다 저장할 수 있다. 기본형인 int는 담을 수 있을까? → 오토 박싱을 통해 자동으로 감싸준다. Wrapper class인 Integer 형태로 담는다. 다형성의 활용2 매개변수의 다형성 public void println(Person p){...} public void println(SpiderMan sp){...} println을 사..
데이터 은닉과 보호(Encapsulation) 변수는 private으로 접근을 막고, getter / setter 메소드를 통해 접근하도록 하는 것 → getter/setter 메서드를 통해 데이터를 보호한다. 싱글톤(Singleton) 객체를 구별할 필요가 없는 경우에 사용한다. 객체를 계속 생성/삭제 하는데 많은 비용이 들어서 재사용이 유리한 경우에 사용한다. 외부에서 생성자에 접근 금지 → 생성자의 접근 제한자를 private으로 설정 내부에서는 private에 접근 가능하므로 직접 객체 생성 → 멤버 변수이므로 private으로 설정 외부에서 private 멤버 변수에 접근 가능한 getter 생성. setter는 불필요(외부에서 값을 설정할 수 없음) 객체 없이 외부에서 접근할 수 있도록 get..
제한자란? 클래스, 변수, 메소드 선언부에 함께 사용되어 부가적인 의미를 부여하는 것 접근 제한자 - public, protected, default, private 제한자 접근 가능 범위 같은 클래스 같은 패키지 다른 패키지의 자손 클래스 전체 public O O O O protected O O O default(package) O O private O 그 외 제한자 static : 클래스 레벨의 요소 설정 final : 요소를 더 이상 수정할 수 없음 abstract : 추상 메소드 및 추상 클래스 작성 synchronized : 멀티스레드에서의 동기화 처리 하나의 대상에 여러 제한자를 조합 가능하나 접근 제한자는 하나만 사용 가능하다. 💡 final을 쓰는 이유는? → 이미 잘만들어져있기 때문에 괜..
상속이란? 상위 클래스의 멤버를 자식 클래스에서 재사용하기 위한 것 → 상위 클래스의 멤버를 물려받기 때문에 코드의 절감 → 상위 클래스의 코드를 변경하면 모든 하위 클래스들에게도 적용되므로 유지 보수성 향상 상위 클래스의 생성자와 초기화 블록은 상속하지 않는다. extends 키워드를 사용하여 상속한다. 상속의 관계는 is a 관계라고 한다. Person is a Object, SpiderMan is a Person 모든 클래스는 Object 클래스를 상속하고 있다. extends의 선언이 없는 클래스는 extends Object가 생략된 것이다. 자바는 단일 상속만 지원한다. 두 개의 상위 클래스에 동일한 이름의 메서드가 있을 경우 복잡해질 수 있기 때문이다. 이를 극복하기 위해서 interface와..