| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- Google OAuth
- java
- synchronized
- Spring
- lombok
- builder
- factory
- 일급 객체
- 일급 컬렉션
- Dependency Injection
- Volatile
- spring security
- OAuth 2.0
- Today
- Total
목록분류 전체보기 (179)
HJW's IT Blog
문제 이해와 풀이 전략문제 규칙 요약상어는 1칸당 1초의 시간이 소요된다.자신의 크기보다 큰 물고기가 있는 칸은 이동할 수 없다.크기가 같은 물고기는 지나갈 수 있으나 먹지는 못한다.상어가 크기만큼의 물고기를 먹으면 크기가 1 증가한다.먹을 수 있는 물고기가 없으면 종료된다.먹을 수 있는 물고기가 여러 마리일 경우:가장 가까운 물고기위쪽에 위치한 물고기왼쪽에 위치한 물고기 순으로 먹는다.물고기를 먹으면 해당 칸은 빈칸이 된다.풀이 전략BFS를 통해 현재 상어가 도달할 수 있는 모든 칸을 탐색하며 먹을 수 있는 물고기를 리스트에 추가한다.먹을 수 있는 물고기 리스트를 문제 조건에 맞게 정렬한다.가장 가까운 물고기를 먹고, 상어의 위치를 갱신하며 크기를 체크한다.더 이상 먹을 수 있는 물고기가 없으면 종료한..
들어가며..이번 한달은 제 인생에서 가장 바빴던 한달이라 해도 과언이 아니다. 졸업 프로젝트, 시험, 논문, 프리코스까지... 정말 아침에 눈을 뜨며 컴퓨터 앞에서 시작해서 밥먹는 시작 빼곤 계속 앉아 있었던것 같다... 그렇기에 참 아쉬움도 많이 남는 프리코스 과정이었던 것 같다. 더 투자할 시간이 많았다면 좀 더 제대로 배우고, 제대로 된 코드를 구현할 수 있지 않았을까 라는 생각이 떠나지 않는다. 4주차 미션4주차 미션은 제공된 md 파일을 불러와 해당 내용을 바탕으로 간단한 편의점 프로그램을 만드는 것 이었는데, 그동안의 문제와 달리 고려해야 할 사항이 훨씬 많았고, 문제를 이해하는데에만 하루를 썼다. 그만큼 예외 혹은 처리해야 할 상황도 많았는데, 예를 들어 프로모션 상품이 md 파일에 있지만 ..
들어가며개발에 있어 일급 객체와 컬렉션은 OOP 와 함수형 프로그래밍 둘 다에서 매우 중요한 개념이다. 일급 객체/컬렉션은 단순히 기술적인 개념을 넘어, 코드의 가독성, 유지보수성, 확장성, 협업의 생산성 등을 높일 수 있다. 객체의 책임을 분리 하거나, SOLID 원칙 준수, 로직의 명확성 등의 유지 보수성이 향상될 수 있다.일급 객체란 무엇인가?일급 객체의 3가지 조건First-Class Citizen 은, 다음 3가지 특성을 가지는 객체를 말한다 :변수나 데이터 구조에 할당할 수 있어야 한다.함수의 매개변수로 전달할 수 있어야 한다함수의 반환값으로 사용할 수 있어야 한다.JAVA의 일급 객체JAVA에선 함수가 독립적인 일급 객체로 존재하지 않았었다. 이들은 메서드를 변수에 할당하거나 인자로 전달할 ..
Redis 란?Redis는 Remote Dictionary Server의 약자로, 데이터를 메모리(RAM)에 저장하여 빠른 데이터 액세스를 제공하는 오픈 소스 인메모리 데이터베이스이다. 다음과 같은 특징과 용도로 사용된다:Redis의 특징인메모리 데이터 저장데이터를 디스크가 아닌 메모리에 저장하여 매우 빠른 읽기/쓰기 속도를 제공한다.하지만 데이터가 메모리에 있기 때문에 서버가 종료되거나 전원이 꺼지면 데이터가 손실될 수 있다. 이를 방지하기 위해 **스냅샷(snapshot)**이나 **AOF(Append-Only File)**를 통해 데이터를 디스크에 백업할 수 있다.Key-Value 저장소Redis는 기본적으로 Key-Value 구조를 제공하며, 다양한 데이터 타입을 지원한다.String: 기본적인 ..
프로젝트의 마무리로 이제 AWS 에 호스팅을 해야 한다. AWS 에 대한 이해도를 올리고자 AWS 를 호스팅 서비스로 선택했다. RDS 를 사용할까 고민했지만, 시간 여건상 촉박할 것 같아 ec2 인스턴스에 직접 mysql 서버도 같이 띄우기로 했다. VPC 생성회고 : VPC 란 >> Virtual Private Cloud 로, 가상 네트워크이다. 다른 사용자와 격리된 사용자 전용 가상 네트워크 환경을 제공하며, IP 주소 범위 , 서브넷, 라우팅 등을 사용자가 직접 구성할 수 있다. VPC 생성 절차는 다음과 같다. 콘솔 접속 후 VPC 검색VPC 생성Name Tag 설정, IPv4 CIDR 블록 설정 (필자는 10.0.0.0/16) 사용 서브넷 생성회고: 서브넷이란 >> 큰 네트워크를 작은 네트..
시작하면서..우아한 테크코스 프리코스를 진행하던 중, TDD 라는 개념에 대해 알게 되었다. 그래서 이 방법으로 개발을 해보고자 2주차 과제에서 Test 를 먼저 작성하고 넘어가는 과정에서 이상한 점이 눈에 띄었다. Private 으로 선언된 메소드 들은 어떻게 테스트하지?TDD에 대한 이해도가 낮은 상태에서 적용시키려 하니 발생한 문제였다. 그래서 열심히 찾아본 결과, private 메소드에 대한 테스트를 하고 싶은 이유가 애초에 내가 TLD 방식으로 개발을 했기 때문이라는 결론에 다달았다. 그래서 이번 포스팅은 TDD를 제대로 짚고 넘어가고자 한다.TDDTDD란 무엇인가?Test Driven Development 란, 개발자가 기능 코드를 작성하기 전, 테스트 스크립트를 먼저 작성하는 개발 프로세스이..
Dependency Injection(DI) 이란?“Dependency injection is a programming technique that makes a class independent of its dependencies.” DI 란 객체간의 의존성을 외부에서 주입해주는 설계 패턴이다. 이를 통해 객체는 의존하는 객체들을 직접 생성하는 것이 아닌 외부에서 제공된 객체를 사용하게된다. 이를 통해 개발자는 SOLID 원칙의 의존성 역전 원칙 과 단일 책임 원칙을 달성할 수 있다.잠깐 의존성 역전 원칙과 단일 책임 원칙을 짚어보고 넘어가겠다. 의존성 역전 원칙 (Dependency Inversion Principle)DIP 란 무엇일까?DIP 란 상위 모듈이 하위 모듈에 의존하지 않아야 하며, 둘 ..
UnionFind란?Union Find 란 집합의 원소들이 어느 그룹에 속해 있는지를 빠르게 찾고 (Find) , 합치는 (Union) 연산을 효율적으로 처리하도록 설계된 자료구조이다.주로 서로소 집합(Disjoint Set) 문제를 해결되는데 사용되는데, 서로소 집합이란 공통된 원소가 없는 두 집합을 의미한다.기본 연산Union Find 는 이전에 말했듯이, Find 와 Union 연산을 지원해야 한다.Find : 주어진 원소가 속한 대표 를 찾는 연산이다.int[] find(int x, int y){ int[] root = this.parents[x][y]; if(root[0] == x && root[1] == y) return new int[]{x,y}; int..
Linked ListLinked List 특징이중 연결 리스트로, 각 요소는 이전 및 다음 요소에 대한 참조 를 가진다삽입 및 삭제 작업이 효율적이다요소들이 삽입된 순서대로 유지된다임의 접근 속도가 느리다 → 특정 인덱스 접근 시간 O(n)Queue 와 Deque를 지원메서드LinkedList list = new LinkedList();list.add(1); // 리스트 끝에 추가list.add(index, 1); // index 위치에 삽입list.addFirst(1) // 리스트의 첫번째에 삽입list.remove(); // 첫 요소 삭제list.remove(index); // index 위치 요소 제거list.removeLast()' // 마지막 요소 삭제list.get(index); // 특정 인..
GenericType 을 포괄적으로 일단 정의하겠다클래스나 메서드에서 타입을 미리 정하지 않고 외부에서 사용할 때 타입을 정하도록 하는 문법적 장치왜 사용하는가 → 어떠한 클래스를 만들었는데, 거의 똑같은 클래스를 또 만들어야 한다면 중복되는 부분이 많고 비효율적이다 → 중복을 최소화 하자!class Data{ int obj; Data(int obj){ this.obj = obj; } int getObj(){ return obj; } void printInfo(Integer obj){ System.out.println(obj.getClass().getName()); }}class Data2{ String obj; Data2(String ..