[모각코] 2024 동계 모각코 2회차 내용
공부한 내용 [Java] JUnit5 사용법 알아보기 JUnit이란? 🔲 Java 개발자의 93%가 사용하는 단위 테스트 프레임워크 🔲 스프링 부트 2.2버전 이상부터 기본 제공한다. JUnit5는? 🔲 Platform : 테스트를 실행하게 해주는 런처를 제공한다. TestEngine API devrepo.tistory.com 소감 테스트에 관련된 연습을 많이 할 수 있어 좋았다.
공부한 내용 [Java] JUnit5 사용법 알아보기 JUnit이란? 🔲 Java 개발자의 93%가 사용하는 단위 테스트 프레임워크 🔲 스프링 부트 2.2버전 이상부터 기본 제공한다. JUnit5는? 🔲 Platform : 테스트를 실행하게 해주는 런처를 제공한다. TestEngine API devrepo.tistory.com 소감 테스트에 관련된 연습을 많이 할 수 있어 좋았다.
Dispatcher - Servlet이란? Dispatcher Servlet에 앞서, _Servlet_이란 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 뜻한다. 자바의 Servlet은 웹 서버의 성능을 향상시키기 위해서 사용되는데, 간단하게 생각하자면 클라이언트의 요청을 처리하고 결과를 반환하는 웹 프로그래밍 기술이다. _Dispatcher-Servlet_또한 _Servlet_의 일종으로 그 역할을 살펴보자면 Dispatcher의 의미를 찾아보면 된다. 이는 "급파자"라는 뜻으로 가장 먼저 요청을 받아 처리할 함수인 컨트롤러를 정해주는 역할을 가진다. 즉, _Dispatcher-Servlet_은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아서 적합한 컨트롤러..
클래스와 객체 흔히들 붕어빵과 붕어빵 틀, 설계도와 건물과 같은 식으로 클래스와 객체를 설명해왔다. 나 역시 비슷한 수준으로 클래스와 와 객체에 대해 이해하고 있을 뿐이었다. 다만, 그러한 수준으로 클래스와 객체의 관계와 그 자체를 이해하는 것은 정확하지 못하다. 클래스의 책임은 객체를 생성하고, 적절한 때에 파괴하는 것이다. 또한 클래스의 자식들이 어떤 모습이며 어떤 행동을 해야 하는 지 적어놓은 "계약"에 대해서 알고 있다. 객체는 계약에 대한 자격을 갖추기 위해 인터페이스를 구혐함으로써 이를 준수하게 된다. 물론 인터페이스는 추상화를 통해 다형성이 보장된 다는 점에서도 의미가 있긴하다. 객체는 생명체이다. 올바른 객체는 그 자체로 생명체이다. 현실 세계의 피조물의 대리자 그 자체이며, 생명주기와 행..
객체지향 생활 체조 9원칙 '소트윅스 앤솔러지'라는 책에서는 객체지향 프로그래밍을 보다 잘 하기 위해서 9가지 원칙을 제시한다. 지금까지 공부하고, 직접 사용해본 경험을 바탕으로 각 규칙을 왜 써야 하고 무엇이 좋은 지 작성해보고자 한다. 규칙 1. 한 메서드에 한 단계의 들여쓰기(indent)만 한다. 지금까지 코딩테스트를 포함하여 코드를 짤 때, 들여쓰기 따윈 신경쓰지 않았다. 남이 볼 코드라고는 전혀 생각하지 않아서였다. 하지만, 협업은 혼자서 하는 것이 아니다. 누가 보아도 알아볼 수 있는 코드여야 유지보수 측면에서 이점이 크다. 깊은 들여쓰기는 가독성을 좋지 못하게 만들기 때문에 가급적이면 줄이는 것이 좋다. 들여쓰기를 줄이는 것은 가독성 뿐만이 아니라, 재사용성과 디버깅에 있어서도 유리하다. ..
SOLID 원칙이란? 객체지향 프로그래밍에 있어 반드시 알아야 하는 SOLID 원칙은 자기 자신 클래스 내부의 응집도는 높이고, 타 클래스와의 결합도는 낮추는 것에 초점을 둔다. 이는 클래스에게 독립된 역할을 부여하기 위함이며 재사용성과 유지보수성이 높은 소프트웨어를 만들 수 있기 때문이다. 🔲 SRP(Single Responsibility Principle) : 단일 책임 원칙 - 클래스가 변경되는 이유가 단 한 가지여야 한다 🔲 OCP(Open Close Principle) : 개방/폐쇄 원칙 - 확장에는 열려있고, 수정에 대해서는 닫혀있어야 한다. 🔲 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 - 하위 타입을 상위 타입으로 대체할 수 있어야 한다 🔲 ISP..
일급 컬렉션이란(First Class Collection) 🔲 일급 컬렉션 : Collection을 Wrapping하면서, 그 외 다른 멤버 변수는 없는 상태를 말한다. public class GameRanking { private Map ranks; public GameRanking(Map ranks) { this.ranks = ranks; } } 일급 컬렉션의 장점 🔶 비즈니스에 종속적인 자료구조 일반적으로 MVC 패턴에서 Model은 데이터베이스와의 상호작용이나 비즈니스 로직을 처리한다. 이때 애플리케이션이 고도화됨에 따라 Model에서 Service 계층을 추가하여 비즈니스 로직을 관리하는데 여기서 문제가 발생할 수 있다. 애플리케이션의 비즈니스 로직을 담당하는 코드에서 특수한 자료구조를 가져야 ..
JUnit이란? 🔲 Java 개발자의 93%가 사용하는 단위 테스트 프레임워크 🔲 스프링 부트 2.2버전 이상부터 기본 제공한다. JUnit5는? 🔲 Platform : 테스트를 실행하게 해주는 런처를 제공한다. TestEngine API를 제공. 🔲 Jupiter : JUnit5를 지원하는 TestEngine API 구현체 🔲 Vintage : JUnit4와 3를 지원하는 TestEngine 구현체 JUnit5를 시작하는 방법 🔲 스프링부트 2.2버전 이상부터는 기본 탑재된다. 🔲 그 외에는 maven, 혹은 gradle 방식으로 추가할 수 있다. gradle test { useJUnitPlatform() } dependencies { testImplementation 'org.junit.jupiter..
공유자원과 임계영역 🔲 공유 자원 : 여러 스레드가 동시에 접근할 수 있는 자원 🔲 임계 영역 : 공유자원들 중 여러 스레드가 동시에 접근했을 때, 문제가 생길만한 부분 🔶경쟁 상태? 둘 이상의 스레드가 공유자원을 병행적으로 읽거나 쓸때, 타이밍이나 접근 순서에 따라 실행 순서가 달라지는 상황(race 현상) 🔶Read - Modify - Write @RestController @RequestMapping("/race-condition") public class RaceConditionCotroller { public static Integer studentCount = 0; @PostMapping("/1/increase") public ResponseEntity increaseCount() { stud..
백준 2309 🔲 내 풀이 #include using namespace std; int n = 9, k = 7; int a[9]; vector result(7); void combi(int start, vector b) { if (b.size() == k) { if (accumulate(b.begin(), b.end(), 0) == 100) { copy(b.begin(), b.end(), result.begin()); } return; } for (int i = start + 1; i > a[i]; } vect..
동기/비동기란? 🔶동기란(Synchronize)? 🔲 요청 작업에 대한 완료 여부를 따져 순서대로 처리하는 것을 말한다. 🔶비동기란(Asynchronize)? 🔲 요청 작업에 대해 완료 여부를 따지지 않아, 자신의 작업을 그대로 실행한다. 동기와 비동기의 큰 차이점 중 하나는 요청한 작업에 대해서 작업 순서가 지켜지냐, 지켜지지 않냐이다. 동기는 작업 순서가 지켜지기 때문에 A, B, C라는 Task에 대해 그 순서를 지키며 실행되지만, 비동기는 그렇지 않다. 무작위로 실행될 수 있는 것이다. 블럭킹/논블럭킹이란? 🔶 블럭킹이란? 🔲 다른 요청의 작업을 처리하기 위해 현재 작업을 Block(차단)하는 것 🔶 논블럭킹이란? 🔲 다른 요청의 작업을 처리하기 위해 현재 작업을 Block(차단)하지 않는 것 🤔..