일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 3-way handshaking
- Kotlin
- gatway
- 낙관적 락
- Redis
- DB
- 스레드 풀
- Spring
- 캐시 오염
- Kafka
- java
- 페이지네이션
- 비관적 락
- JPA
- MSA
- 삽입 이상
- null
- HTTP
- Dirty Checking
- 데이터베이스
- AWS
- 자료구조
- 자바
- 갱신 이상
- buildSrc
- ocp
- 정규화
- 네트워크
- well-know port
- 삭제 이상
- Today
- Total
728x90
목록
728x90
Java (13)
어 나 갱수.
Java의 Exception 예외처리에 대해 알아보기 이전에 Error(에러)와 Exceptin(예외)에 대해 정리해보겠습니다. Error(에러)와 Exception(예외)Error는 시스템에서 문제가 생겼을 때 발생하는 것을 말합니다. 이는 시스템 레벨에서 발생하는 것을 뜻하며 심각한 오류로 판단합니다.개발자가 미리 에러를 예측해서 처리하는 것이 쉽지 않기 때문에, 개발자가 에러에 대해 미리 처리에 대해 신경 쓸 필요는 없습니다. Exception은 개발자가 짠 비즈니스 로직에서 문제가 생겼을 때 발생하는 것을 말합니다. 시스템 레벨에서 발생하는 것이 아니기 때문에 개발자가 로직을 짜면서 미리 예외를 예측하여 처리할 수 있습니다. 개발자가 처리할 수 있기 때문에 구분하고 그에 따른 처리 로직을 잘 구현..
OCP를 통해 기능 확장에 강하고, 외부 변경에 강건한 소프트웨어를 만들고자 로버트 마틴이 명명한 객체지향 5대 원칙 중 하나입니다. OCP는 소프트웨어를 설계하면서, 기능이나 모듈의 확장에 대해서는 개방(OPEN) 되어야 하고, 기존의 것의 변경에 대해서는 폐쇄(CLOSE) 되어야 한다는 원칙입니다.간단하게 말하면, 새로운 기능이 추가되더라도 기존의 코드를 변경하지 않고도 확장이 가능해야 한다는 점입니다. 아래의 코드는 OCP를 적용시키지 못한 코드라고 말할 수 있습니다. JavaMailSendPort는 제대로 추상화된 인터페이스라고 불릴 수 없습니다. 추상화된 인터페이스에서 구현 라이브러리인 JavaMail의 이름을 사용해 버렸기 때문에 1:1로 밖에 구현클래스를 사용할 수밖에 없기 때문입니다. 다양..
객체 생성보통 자바에서 객체를 정의하고 그 객체를 생성하게 되면 생성자를 통해 생성하는 것을 많이 볼 수 있습니다.Book book = Book("name", 1000, "type") 하지만 위와 같은 방법으로 생성자를 통해 객체를 생성하게 되면 몇 가지 단점이 존재합니다. 생성자에서의 단점을 보완하고자 builder라는 방식을 사용하는 것을 추천드립니다.Book book = Book.builder() .name("name") .money(1000) .type("type") .build(); 빌더를 사용해야하는 이유빌더라는 방식으로도 객체를 생성할 수 있다는 것을 알았습니다. 그럼 왜 굳이 기존의 생성자를 통해 객체를 생성하는 방법이 아닌 빌더를 통해 객..
오늘은 Kotlin에서 아주 유용한 게 사용되는 클래스인 Data Class에 대해 알아보겠습니다! Java와 다르게 Kotlin에서는 다양한 클래스들을 제공합니다. 그중 Data Class라는 클래스는 Java에서 개발자들이 불편했던 점을 완벽하게 개선해 줄 기능을 가지고 있는 클래스입니다. Data Class보통 데이터 전달을 위한 객체를 DTO(Data Transfer Object)라고 부릅니다. 구현 로직을 가지지 않고 순수 데이터만 가졌기 때문입니다. dto의 역할을 하는 클래스는 getter, setter의 역할이 필요하고, toString, equals와 같이 데이터를 출력하고 비교하는 기능도 필요합니다. Java에서는 이 모든 기능을 구현하려면 직접 구현해야 하지만, Kotlin에서는 직접..
오늘은 자바에서 많이 사용되는 오버로딩 & 오버라이딩에 대해 알아보겠습니다 ! 자바에서는 다형성을 지원하는 방법으로 메서드 오버로딩과 오버라이딩이 있습니다. 오버로딩 : 같은 이름의 메서드를 여러개 가지며 매개변수의 유형과 개수가 다르도록 하는 기술 오버라이딩 : 상위클래스에서 가지고 있는 메서드를 하위클래스에서 재정의 하는 기술 오버로딩(Over loading) 자바에서는 원래 한 클래스에서 같은 이름의 메서드를 가지면 안된다. 하지만 오버로딩을 사용하게 된다면 하나의 클래스에서 같은 이름의 메서드를 가질 수 있습니다. 오버로딩은 같은 이름의 메서드를 여러개 정의하고, 각 메서드마다 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 메서드를 구현할 수 있도록 합니다. public class Test ..
오늘은 자바에서 사용되는 추상클래스와 인터페이스에 대해 알아보겠습니다! 추상클래스란? 우리가 지금까지 사용하던 클래스는 구체적으로 데이터를 담아 인스턴스화하여 직접 다루는 클래스입니다. 그 반대로 구체적이지 않은 추상적인 데이터를 담고 있는 클래스를 '추상 클래스'라고 부릅니다. 그래서 추상 클래스는 일반 클래스와 다르게 자체적으로 인스턴스화를 시키지 못합니다. 자체적으로 객체를 생성할 수 없습니다. 상속을 통해 자식 클래스에서 인스턴스를 생성할 수 있습니다. 자바에서는 abstact 키워드를 사용해서 이 클래스가 추상 클래스라고 표현합니다. 추상 클래스에는 추상 메서드가 있는데 추상 메서드는 메서드의 선언부만 있고, 구현부는 아직 미완성인 채로 남겨둔 메서드입니다. 부모 클래스에서 추상 메서드를 작성해..
오늘은 Call by value와 Call by reference의 차이를 알아보고 자바에서는 어떻게 사용되는지 알아보겠습니다. 함수를 호출하는 방법은 크게 두 가지가 있습니다. Call by value(값의 의한 호출), Call by reference(참조의 의한 호출) Call by value(값의 의한 호출)는 인자로 받은 값을 복사하여 처리합니다. Call by reference(참조의 의한 호출)는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 줍니다. Call by value는 말 그대로 호출 시 자신의 값을 복사해서 넘겨주는 방식이고 Call by reference는 자신의 값이 아닌 자신을 직접 공유해서 사용하도록 허용하는 개념이다. Call by value(값의 의한 호출) Cal..
오늘은 Kotlin을 사용하게 된다면 많이 사용하게 되는 리스트 정렬 관련된 함수들을 알아보겠습니다. Immutable 리스트 정렬 sorted() 함수는 데이터 변경이 되지 않는 리스트(Immutable)를 정렬할 때 사용합니다. sorted() 함수는 기존 리스트의 원본을 변경하지 않고 정렬된 리스트를 생성하여 리턴합니다. val list = listOf(20, 100, 5, 60, 40) val sortedList = list.sorted() println("List : $list") println("SortedList : $sortedList") 결과 List : [20, 100, 5, 60, 40] SortedList : [5, 20, 40, 60, 100] 원본은 list는 그대로 반환하고 s..