Java 8

Test Fixture 란

Test Fixture란? Test Fixture:소프트웨어 테스트에서 필요한 테스트 데이터나 환경을 정의하는 코드 조각입니다 즉, 테스트에 필요한 Test Data의 생성을 쉽게 도와주는 라이브러리입니다. @BeforeEach void 유저_세팅() { //given User user = User.builder() .oauthIdx("68847615") .email("hyunin0102@gmail.com") .name("홍현인") .profileImageUrl("https://avatars.githubusercontent.com/u/68847615?v=4") .bio("한줄소개") .field(BACKEND) .url("https://github.com/honghyunin") .isFirstVisite..

Java 2023.04.21

추상클래스 무엇이고, 왜, 어떻게 사용할까?

최근에 프로젝트를 진행하면서 간단하게 추상클래스를 생성해서 사용해봤는데, 팀원분이 추상메서드도 없고 추상변수도 없는데 어째서 추상클래스를 사용했냐라고 물어보셨는데 정확하게 대답이 나오지 않아서 이 기회에 한 번 정리하고자 합니다. 추상이란? 보통 “추상적”이란 표현은 딱 짚어서 말할 수 없는 어떠한 “개념”이나 모호하여 쉽게 정의할 수 없는 것을 떠올리게 됩니다. OOP에서도 “추상”은 “개념”을 의미합니다. “추상”은 객체가 가진 복잡한 내부 구현을 숨기고 필요한 정보와 기능만 제공하는 것입니다. 이렇게 함으로써 사용자가 객체를 쉽게 사용할 수 있도록 인터페이스를 제공하고 세부적인 로직은 감춥니다. 예를 들어, 커피 머신이라는 객체가 있다면 사용자는 커피 머신이 어떻게 작동하는지 알 필요 없이 버튼만 ..

Java 2023.03.24

스레드(Thread) - 개념, 동시성

Thread 란? Process: 데이터와 메모리, 스레드 등의 자원에 메모리 공간을 할당받아 실행 중인 프로그램 Thread : 프로세스 내에서 실제로 작업을 실행하는 여러 작업의 한 단위 스레드는 독립된 메모리 영역인 Stack을 갖는다. 스레드는 다른 스레드와 스택 메모리를 공유할 수 없다 프로세스의 힙은 속한 모든 Thread가 공유할 수 있다. 이 자원을 공유할 수 있기에 같은 자원을 두고 동시에 여러 가지 일을 수행할 수 있다. Thread 구현 방법 Runnable 인터페이스 구현 Thread 클래스 상속 다중 상속이 불가능하므로 보통은 Runnable 인터페이스를 구현하는 방법으로 스레드를 생성한다. kotlin에선 thread()를 통해 Thread 클래스를 상속하고 있어, thread ..

Java 2022.11.29

[Java] 가비지 컬렉션 (Garbage Collection GC)

해당 글의 내용 중 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다! 자바를 사용하다보면 객체를 생성하기만 하지 개발자가 직접 객체의 생명주기를 관리하진 않았는데요 객체를 생성하고 소멸하는 것은 개발자가 컨트롤하지 않는데 어떻게 객체가 알아서 소멸되고 관리되는 것일까 궁금해져 알아보게 되었습니다! 가비지 컬렉션(Garbage Collection) 가비지 컬렉션이란 자바에서 객체가 할당한 Jvm Heap 영역 중 더 이상 참조되지 않는 객체들을 해제하는 작업을 의미합니다. Stop the World 가비지 컬렉션이 동작할 때는 따로 스레드를 두고 동작하는 것이 아닌, 실행되고 있는 모든 스레드를 중단하고 가비지 컬렉션을 실행합니다. GC의 성능 개선을 위해 튜닝 을 한다고 하면이 중단 시간을 줄이는 것..

Java 2022.08.13

[SOLID] ISP | 인터페이스 분리 원칙 (Interface Segregation Principle)

[SOLID] ISP | 인터페이스 분리 원칙 해당 글은 LSP와 추상화에 대해 이해하고 계시면 더욱 이해하기 쉽습니다. 추상화가 궁금하시다면 https://eojil-hyunin-in.tistory.com/3 이 글을 읽어주세요! 우선 ISP의 정의부터 뭔지 알아보죠! 인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 인터페이스는 객체가 사용하는 메서드를 정의해놓는 설계도와 같은 역할을 가집니다. 예시 아래 예시들은 기능을 구현하는 클래스들은 인터페이스로부터 구현을 받아야 한다는 전제하에 설명된 예시들입니다. ISP를 지키는 예시를 설명하자면 자동차에 존재하는 기능들은 전진, 후진, 정지, 가속 등등 여러 기능들이 존재합니다. public interfa..

Java/SOLID 2022.04.21

[SOLID] OCP | 개방 폐쇄의 원칙 (Open Closed Principle)

[SOLID] OCP | 개방 폐쇄의 원칙 (Open Closed Principle) 개방 폐쇄의 원칙 : 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다 즉, "개방 폐쇄의 원칙의 핵심은 기존 코드를 건드리지 않는다는 것입니다." 어떻게 기존 코드를 수정하지 않고 확장할 수 있는 거지? OCP를 알지 못한 상태의 설계는 잘못 되어있을 가능성이 높습니다 따라서 개방 폐쇄의 원칙을 지키기는 어렵습니다 그러므로 코드의 "설계"부터 바꾸어야 합니다. 기존 설계 방식 기존의 설계 방식을 셰프가 요리를 내어주는 과정을 통해 기존의 설계 방식이 왜 잘못되었는 지를 알아봅시다. 기존에는 셰프가 음식을 요리하여 직접 손님에게 제공하였습니다. 이런 설계라면 손님이 많을 때는 셰프가 손님을 오래 기다리게..

Java/SOLID 2022.04.14

[SOLID] LSP | 리스코프 치환 원칙 (Liskov Substitution Principle)

[SOLID] LSP | 리스코프 치환 원칙 (Liskov Substitution Principle) 부모 클래스를 상속받은 자식 클래스로도 부모 클래스의 메소드들을 동작할 수 있어야 하는 원칙입니다. 다시 말해 부모 클래스로 짜인 코드를 자식 클래스로 변경하였을 때도 원활하게 프로그램이 동작할 수 있어야 합니다. 예시 예를 들어 부모와 자식이 있습니다. 부모는 자동차를 운전할 줄 압니다. 자식은 운전하는 방법을 부모로부터 습득(상속)합니다. 부모로부터 운전하는 방법을 습득한 자식은 부모 대신 운전을 할 수 있어야 합니다. 리스코프 치환 원칙에 대해 알아보기 위해, 원칙을 위반하는 동물/고양이 예제를 통해 알아봅시다. public class Animal { public String getName() { ..

Java/SOLID 2022.04.13

추상 클래스 vs 인터페이스

추상 클래스 vs 인터페이스 추상 클래스와 인터페이스의 차이점을 설명해주세요 이 글은 해당 질문의 대한 답을 하기 위해 작성되었습니다! 지금 이 글을 읽고 계신 여러분도 이에 대한 답을 알고싶다면 이 질문을 잘 기억하셨다가 글을 다 읽어보고 답을 내려보시면 좋겠습니다! 추상화란? 우선 추상 클래스를 알기 전 추상 클래스 앞에 붙어있는 추상에 대한 것부터 알아보죠 추상화 : 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것 이처럼 추상화는 구체적인 사물들간의 공통점을 취하고 차이점을 버리는 일반화를 사용하거나, 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거함으로써 간결하게 만듭니다. 요점은 불필요한 코드를 제거하고 중요한 부분을 살리는 것입니다. 예를들어 우리가 자동..

Java 2022.04.12