분류 전체보기 378

[Java] Exception

예외 계층의 구조와 체크 예외, 언체크 예외의 차이와 활용에 대해서 알아보려고 합니다. Object: 예외도 객체이고, 모든 객체의 최상위 부모는 Object이므로, 예외의 최상의 부모 또한 Object 입니다. Throwable: 최상위 예외로서, Exception과 Error로 나눌 수 있습니다. Error: 메모리 부족, 시스템 오류와 같이 애플리케이션에 복구 불가능한 시스템 예외입니다. 이 예외를 잡아서는 안 됩니다. 상위 예외를 catch로 잡아버리면 하위 예외까지 같이 잡아버리는데, Throwable 예외를 잡게 되면, Error 예외도 함께 잡는 불상사가 일어날 수 있기 때문에 잡아서는 안됩니다. Error는 언체크 예외입니다. Exception: 체크 예외 애플리케이션 로직에서 사용할 수 ..

Java 2023.08.21

[Spring] Spring AOP

애플리케이션 로직은 큰 틀에서 핵심 기능, 부가 기능 2가지로 나눌 수 있습니다. 핵심 기능은 객체가 제공하는 비즈니스 로직이고, 부가 기능은 핵심 기능과 함께 사용되는 로그 추적 로직, 트랜잭션 기능과 같습니다. 부가 기능은 핵심 기능을 보조하기 위해 사용되는 기능입니다. 부가 기능은 여러 클래스에 걸쳐서 사용되는데 이를 횡단 관심사라고 하며, 하나의 부가기능이 여러 곳에서 동일하게 사용됨을 의미합니다. 하지만, 이러한 중복된 로직을 반복해서 사용하게 된다면 Refactoring에 있어서 많은 번거로움이 발생하게 됩니다. 즉, 이러한 문제점을 해결하기 위해 도입된 기술이 AOP 입니다. AOP가 생기면서 부가 기능을 핵심 기능에서 분리하고 한 곳에서 관리해 줄 수 있게 되었습니다. 그리고 이러한 기술을..

Java/Spring 2023.08.15

[Spring] Proxy Pattern, Decorator Pattern

Proxy Pattern, Decorator Pattern은 모두 Proxy 기술(클라이언트의 요청을 대신해서 처리해 주는 역할)이 적용됩니다. 이때, 서버와 프록시는 같은 인터페이스를 사용해야 하고, 의존관계를 서버에서 프록시로 변경해도 클라이언트 입장에서는 이러한 사실을 몰라야 합니다(프록시 체인). 앞서 설명드린 DI를 사용하면, 클라이언트의 코드 변경 없이 프록시를 주입할 수 있게 됩니다. 이제 이 둘의 차이와 역할에 대해 설명드리겠습니다. GOF 디자인 패턴에 따라 프록시의 역할은 2가지로 구분됩니다(intent에 의해 구분). 1. Proxy Pattern 권한에 따른 접근 차단, 캐싱, 지연로딩 2. Decorator Pattern 원래 서버가 제공하는 기능에 더해 부가 기능 수행 Proxy..

Java/Spring 2023.08.15

[CS] I/O 속도 개선을 위한 ios_base::sync_with_stdio(false), cin.tie(NULL), '\n'

백준에서 간단한 stack 문제를 푸는 도중 발생한 시간 초과 문제입니다. 모든 테스트케이스를 고려했었고, 100% 확신을 한 상태에서 제출을 했는데 다음과 같은 issue가 발생했습니다. 설마설마하고 ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL) 코드를 넣었는데 정답 처리가 되었습니다. 그래서 이러한 사례가 많았는데, 막연하게 시간초과 방지를 위해 코드를 달아주는 것 외에는 정확히 모르고 있었습니다. 그래서 이 코드들에 대해 무엇이고 어떠한 상황에 사용하는지 알아보려고 합니다. ios_base::sync_with_stdio(false): C/C++ 표준 스트림 간 동기화 비활성화 처리 장점 일반적으로 C++ 표준 스트림(cin + co..

CS 2023.08.15

2023 7월 회고록

늦게 쓰는 7월 회고록입니다. 방학 한 달 동안 정말 바쁘기도 하고 날씨 핑계로 공부 의욕이 약간 떨어졌습니다. Spring 핵심 원리에 대한 이론적인 지식을 공부하면서 개념을 다잡았습니다. 더불어 CS 중에서도 네트워크에 집중하여 공부했던 것 같습니다. 공부하면서도 실생활에서 쓰이는 wifi에 대해 알아봤는데 기대치보다 재밌었던 것 같습니다. 그리고 실무에서 자주 쓰이는 리눅스 마스터 1급을 취득하려고 시험 지원도 했습니다. 시험 비용이 55000원이라 1트에 붙어야 하는 압박감이 생겼네요.. 2023-2 계획 회사 실무 경험, 캡스톤디자인2 프로젝트 진행 Linux 공부 (출, 퇴근, 주말 자투리 시간 내서 공부 예정) CS 꾸준하게 공부하기 OPIC IH(희망사항) 회사에서 출퇴근하면서 캡디를 진행..

일상/회고록 2023.08.14

[PS] 백준 1167 트리의 지름 (c++)

https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 www.acmicpc.net 오랜만에 알고리즘 트리 문제를 풀어봤습니다. 이 문제는 트리에서 임의의 두 정점 사이의 가장 긴 거리를 출력하는 문제입니다. 입력의 경우 시작 정점(from)이 주어지고, 시작 정점과 연결된 정점(to)과 두 정점 사이의 거리(dist)를 입력으로 받습니다. 더불어 해당 정점에서 입력을 종료하려면 -1을 입력으로 받아야 합니다. 첫 번째로, 우선 임의의 정점에서 가장 거리가 먼 노..

[Spring] Template Method Pattern, Strategy Pattern, Template Callback Pattern

스프링에서 사용되는 디자인 패턴인 템플릿 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴에 대해 알아보려고 합니다. 이들을 적용하는 이유는 좋은 설계를 위해서입니다. 좋은 설계란 요구 부가 기능(핵심 기능의 보조 기능)을 변경하지 않고 핵심 기능만 변경하게 설계하는 것입니다.(중복된 로직을 변경하지 않고, 변하는 것(비즈니스 로직)만 순수하게 바꾸어주는 것) 우선 좋은 설계에 한 발짝 나아갈 수 있는 템플릿 메서드 패턴에 대해 설명드리고 이와 비슷한 기능을 하고 있지만, 템플릿 메서드 패턴의 단점을 보완할 수 있는 전략 패턴, 전략 패턴에서의 템플릿과 콜백 부분을 강조한 템플릿 콜백 패턴까지 설명드리려고 합니다. GOF 템플릿 메서드 패턴 정의 부모 클래스에서의 템플릿을 정의하고, 일부 변경되는 로직을 자식..

Java/Spring 2023.08.09

2023.08.04 성수동 여행일지

오늘은 향수를 구경하러 성수동에 방문했습니다. 예전에 친구 테싯 이솝향수를 써보고, 너무 향이 좋아서 저도 구매할 겸 겸사겸사 놀러 갔습니다. 날씨가 무지막지하게 더워서 갈 때 너무 힘들었습니다. 거리도 정말 멀고, 큰맘 먹고 갔던 거 같네요. 일단 저는 향수를 구매하러 왔기에, 다양한 향들을 맡아보았습니다. 테싯은 원래 인기가 많은 우디향이라고 직원분께서 설명해주시더라고요. 저는 지속성 측면에서는 테싯이 아쉽다고 설명드렸는데, 직원분이 이더시스가 테싯과 비슷하면서도 많은 사람들이 커스텀해서 사용한다고 말씀해 주셨습니다. 에레미아와 이더시스중에서 둘 중 어떤 걸 구매할지 말지 정말 많이 고민했었는데, 결국 이더시스 향수를 구매했습니다. 거리가 멀어 나중에 또 오기 힘들거 같고, 향수는 한 번 사면 오래 ..

일상/여행 2023.08.05

[Spring] DI, IoC 컨테이너

DI, IoC, 컨테이너와 같은 개념들은 Spring Framework의 가장 기본적인 특징입니다. 1. IoC(Inversion of Control, 제어의 역전) 프로그램의 제어 흐름을 프로그래머가 직접적으로 제어하는 것이 아니라, 외부에서 관리하는 것 프로그래머가 객체를 생성할 때, 직접 생성하는 것이 아니라 스프링 컨테이너에서 생성하고 등록된 객체(Bean)를 가져오는 것입니다. 즉, 제어권을 본인이 아닌, 프레임워크(Spring 컨테이너)에게 넘겨줬기 때문에 IoC라는 개념이 도입됐습니다. 2. DI(Dependency Injection, 의존관계 주입) 애플리케이션 실행 시점에 외부에서 실제 구현 객체를 생성하고, 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것 Sprin..

Java/Spring 2023.08.03

[Spring] SOLID 원칙에 대해 알아보자

SOLID 원칙이란 좋은 객체 지향 설계를 하기 위한 5가지 원칙입니다. SRP, OCP, LSP, ISP, DIP 총 5가지가 있는데, 이 원칙에 대해 알아보도록 하겠습니다. 1. SRP(Single Responsibility Principle, 단일 책임 원칙) 한 클래스는 하나의 책임을 가져야 하는 원칙 변경이 있을 때, 변경에 대한 파급효과가 적으면 SRP를 준수하고 있다는 것입니다. 2. OCP(Open/Closed Principle, 개방-폐쇄 원칙) 소프트웨어 요소는 확장에는 열려 있어야 되지만, 변경에는 닫혀 있어야 하는 원칙 (다형성) 다형성은 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있어야 하는 개념입니다. 클라리언트를 변경하지 않으면서, 서버의 구현 기능을 ..

Java/Spring 2023.08.03