분류 전체보기 212

백준 1475번 - C++ 방 번호

[문제] https://www.acmicpc.net/problem/1475 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net [분류] 배열 [코드] #include using namespace std; int arr[10]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int sum = 1; int first = 0; while(n > 0){ int k = n%10; if(k == 6 || k == 9){ if(arr[6] >= arr[9]) { arr[9]++; } else arr[6]++; } else { arr[k]++; } n/..

[Spring Security] 스프링 시큐리티 용어 및 구조

스프링 시큐리티 - 어플리케이션의 보안(인증 및 권한)을 담당하는 프레임워크 - 스프링 시큐리티를 적용하면 redirect를 자동으로 설정 가능(로그인 완료시 다음 화면으로 넘어가기) 특징 - 필터 기반으로 동작 - bean으로 설정 가능 용어 1. Principal(인증 주체): 유저 2. Authenticate(인증): 현재 유저가 누구인지 확인(로그인) 3. Authorize(인가): 현재 유저의 권한 검사 4. 권한: 인증 주체가 어플리케이션의 동작을 수행할 수 있도록 허락 되었는지 확인 - 권한 승인이 필요한 부분으로 접근하려면 인증(로그인)을 통해 증명되어야 함 인증(로그인)을 거치게 되면 인증 주체에 대한 정보는 Principal에 담긴다. (Principal은 UserDetailsServi..

06 스프링이 사랑한 디자인 패턴

어댑터 패턴(Adapter Pattern) 서로 다른 두 인터페이스 사이에 통신이 가능하도록 하는 것 스프링의 예시) JDBC/ODBC, 자바의 플랫폼별 JRE 어댑터 패턴은 합성 즉, 객체를 속성으로 만들어서 참조하는 디자인 패턴으로, 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴 프록시 패턴(Proxy Pattern) 프록시 패턴의 경우 실제 서비스 객체가 가진 메서드와 같은 이름의 메서드를 사용하는데, 이를 위해 인터페이스를 사용한다. 인터페이스를 사용하면 서비스 객체가 들어갈 자리에 대리자 객체를 대신 투입하는 방식 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스 사용 대리자는 실제 서비스에 대한 참조 변수를 갖는다. 대리자는 ..

05 객체 지향 설계 원칙 - SOLID

SOLID 원칙 SRP: 단일 책임 원칙 OCP: 개방 폐쇄 원칙 LSP: 리스코프 치환 원칙 ISP: 인터페이스 분리 원칙 DIP: 의존 역전 원칙 SRP - 단일 책임 원칙 하나의 클래스에 다수의 역할과 책임이 몰려 있는 것 보다, 클래스를 역할과 책임에 따라 분리해서 각각 하나의 역할과 책임만 갖게 하는 것. 단일 책임 원칙과 가장 관계가 깊은 것은 모델링 과정을 담당하는 추상화를 통해 클래스를 선별하고 속성과 메서드를 설계할 때 단일 책임 원칙을 고려해야 함. OCP - 개방 폐쇄 원칙 자신의 확장에는 열려 있고, 주변의 변화에는 닫혀 있어야 함. 상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신의 확장에는 개방하고, 주변 변화는 폐쇄되어야 함. LSP - 리스코프 치환 원칙 하위 클래스의 인..

TIL - 2022/04/02 스프링

[한 것] 모아모아 사이드 프로젝트 소셜 로그인 리팩토링 [배운 것] 스프링 시큐리티의 구조를 공부하였음. https://twer.tistory.com/entry/Security-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0%EC%9D%98-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EA%B5%AC%EC%A1%B0-%EB%B0%8F-%ED%9D%90%EB%A6%84 [Security] 스프링 시큐리티의 아키텍처(구조) 및 흐름 Spring Security 스프링 시큐리티리란? 어플리케이션의 보안(인증 및 권한)을 담당하는 프레임워크 Spring Security를 사용하지 않으면 자체적으로 세션을 체크해야 한다. ..

💻 Backend/TIL 2022.04.03

스프링으로 AOP 구현해보기 - 4가지 구현 관점

스프링에서는 4가지 보조 업무가 존재한다. Before Advice: 앞에만 필요한 경우 After returnning Advice: 뒤에만 필요한 경우 After throwing Advice: 예외를 처리하는 경우 Around Advice: 앞뒤 둘다 필요한 경우 public class Program { public static void main(string[] args) { Exam exam = new NewlecExam(1,1,1,1); Exam proxy = (Exam)Proxy.newProxyInstance(newlecExam.class, new Class[] {Exam.class}, new InvocationHandler() { @Override public Object invoke(Objec..

04 자바가 확장한 객체 지향

abstract 키워드 - 추상 메서드와 추상 클래스 추상 클래스는 인스턴스, 즉 객체를 만들 수 없다. 즉 new를 사용할 수 없다. 추상 메서드는 하위 클래스에게 메서드의 구현을 강제한다. 오버라이딩 강제 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다. 생성자 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다. 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다. 클래스 생성 시의 실행 블록, static 블록 클래스 생성자는 존재하지 않는다. 클래스 정보는 해당 클래스가 코드에서 맨 처음 사용될 때 T 메모리의 스태틱 영역에 로딩되며, 이때 단 한번 해당 클래스의 static 블록이 실행된다. 왜 프로그램이 실행될..

03 자바와 객체 지향

객체 지향의 4대 특성 캡 - 캡슐화: 정보 은닉 상 - 상속: 재사용 추 - 추상화: 모델링 다 - 다형성: 사용 편의 클래스와 객체 클래스는 분류에 대한 개념이지 실체가 아니다. 객체는 실체다. 추상화: 모델링 객체: 세상에 존재하는 유일무이한 사물 클래스: 분류, 집합, 같은 속성과 기능을 가진 객체를 총칭하는 개념 객체는 유일무이한(unique)한 사물이다. 클래스는 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념이다. 속성: 명사로 표현되는 특성, 값을 가질 수 있음. 메서드: 기능/행위 추상화란 구체적인 것을 분해해서 관심 영역(Application Boundary)에 있는 특성만 가지고 재조합 하는 것 자바는 객체 지향의 추상화를 어떻게 지원하고 있을까? 바로 class 키워드를 통해 지..

자바 AOP 예제 정리 - 순수 자바로 AOP 구현해보기

https://www.youtube.com/watch?v=pr2dwdf_03k public class NewlecExam implements Exam { @Override public int total() { int result = a1+a2+a3+a4; return result; } @Override public float avg() { float result = total() / 4.0f; return result; } } Exam.class를 상속받은 newlecExam.class public class Program { public static void main(string[] args) { Exam exam = new NewlecExam(1,1,1,1); System.out.printf("tot..

스프링 AOP 정리 - 스프링 핵심 원리 - 고급편

1.1 핵심 기능과 부가 기능 비지니스 로직은 크게 핵심 기능과 부가 기능으로 구분 가능 핵심 기능은 해당 객체가 제공하는 고유의 기능이고 부가 기능은 핵심 기능을 보조하기 위해 제공하는 기능 부가 기능의 대표적인 예시는 트랜잭션 기능, 로그 추적 기능이 있음. 이들은 공통으로 사용되며 여러 곳에서 동일하게 사용되기 때문 -> 횡단 관심사(cross-cutting concerns)라고 함. 옛날에는 주 업무가 진행되는 과정에서 내가 로그를 처리하겠다면, 직접 코드를 열어서 위 아래에 코드 입력하고, 주석 처리하고 실제 코드를 손대야 함. -> 그래서 소스코드가 존재해야 수정 가능 코드에 대해 알 수 있는 사람만 cross cutting이 가능하다. 관점에 해당하는 코드를 꽂아 놓지 않고 주 업무만 만들고..