전체 글

    [백준] 17070번 - 파이프 옮기기 1

    💡 깊이 우선 탐색 (DFS) 삼성 A형 기출문제라 해서 풀어봤는데, DFS로 손쉽게 풀 수 있는 알고리즘 문제였다. 먼저 파이프를 밀어 옮겨야하는 상황에서 파이프에 옮기는 방법은 가로 2가지, 세로 2가지, 대각선 3가지인데 DFS를 이용해 조건을 잘 맞추어 모든 상황을 고려해 만들어주면 된다. 가로인 경우 - (x,y+1), (x+1,y+1) 세로인 경우 - (x+1,y), (x+1,y+1) 대각선인 경우 - (x,y+1), (x+1,y), (x+1,y+1) 이때 주의할점은 옮겨야 할 곳이 1인 곳은 가지 못하도록 해줘야하는데 가로와 세로는 각각 (x+1, y)와 (x, y+1)만 고려해주면 되지만 대각선은 (x-1,y) (x,y-1) (x,y), 총 3가지를 고려해줘야 한다. ✏️ 구현 코드 #in..

    [Spring] XML을 이용한 DI 의존관계 설정정보

    지금까지 DI 의존관계 설정정보를 자바 코드를 이용해 만들어왔다. 스프링에서는 다양한 방법을 통해 DI 의존관계 설정정보를 만들 수 있는데, 대표적으로 XML이 있다. ✏️XML의 장점 단순한 텍스트 파일이기 때문에 다루기 쉽다. 쉽게 이해할 수 있으며 컴파일과 같은 별도의 빌드 작업이 없다 환경이 달라져서 오브젝트 관계가 바뀌는 경우에도 빠르게 변경사항을 반영 할 수 있다. 스키마나 DTD를 이용해서 정해진 포맷을 따라 작성됐는지 손쉽게 확인할 수 있다. ✏️ XML을 이용한 설정 애플리케이션 컨텍스트는 XML에 담긴 DI 정보를 활용 할 수 있다. XML 설정은 @Configuration과 @Bean이 붙은 자바 클래스로 만든 설정과 내용이 동일한데 아래와 같이 만들 수 있다. 자바 코드 설정정보 X..

    [Spring] 의존성 주입 - DI

    💡 의존성 주입이란? IoC라는 용어는 매우 느슨하게 정의돼서 폭 넓게 사용되는 용어입니다. 그렇기 때문에 몇몇 사람의 제안으로 스프링이 제공하는 IoC방식의 핵심을 짚어주는 명확히 드러나는 이름을 만드는데, 이를 의존관계 주입(Dependency Injection)이라고 합니다. 스프링 IoC 기능의 대표적인 동작원리는 주로 의존관계 주입이라고 불립니다. 따라서 IoC컨테이너를 지금은 의존관계 주입 컨테이너, DI 컨테이너라 더 많이 불리고 있습니다. ✏️ 의존관계란? 누가 누구에게 의존하는 관계에 있다. UML모델에서는 두 클래스의 의존관계를 아래와 같이 표현한다. 의존한다는 건 의존대상, B가 A에 영향을 미친다는 뜻인데, B의 기능이 추가되거나 변경되면 그 영향이 A로 전달된다는 것이다. 다시 말..

    [Spring] 싱글톤 레지스트리

    💡 싱글톤 패턴이란? 서버는 하나당 최대로 초당 수십에서 수백 번씩 요청을 받아 처리할 수 있는 높은 성능을 요구하며, 계층형구조로 이뤄진 경우가 대부분이고, 비즈니스 로직도 복잡한 경우가 많습니다. 이때 매번 요청이 올때마다 로직을 담당하는 오브젝트를 만든다면, 부하가 걸려 서버가 감당하기 힘들것입니다. (오브젝트의 동일성과 등등성 참고) 그래서 서비스 오브젝트라는 개념을 사용해 하나의 오브젝트만 만들어두고, 이를 공유해서 사용하는 방식을 택합니다. 이렇게 애플리케이션 안에 제한된 수, 대개 한 개의 오브젝트만 만들엇 사용하는 것이 싱글톤 패턴 원리입니다. ✏️ 싱글톤 패턴의 구현 방법 클래스 밖에서는 오브젝트 생성을 못하고, 생성자를 private로 만듭니다. 생성된 싱글톤 오브젝트를 저장할 수 있는..

    [JAVA] 오브젝트의 동일성과 동등성

    동일한 오브젝트 : 두 개의 오브젝트가 완전히 같은 오브젝트 동등한 오브젝트 : 동일한 정보를 담고 있는 오브젝트 비교하는 법 동일성 : == 연산자 동등성 : equals() 메소드 두개의 오브젝트가 동일하다면 사실은 하나의 오브젝트만 존재하는 것이고, 두 개의 오브젝트 레퍼런스 변수를 갖고 있을 뿐이다. 두개의 오브젝트가 동일하지는 않지만 동등한 경우에는 두개의 각긱 다른 오브젝트가 메모리상에 존재하는 것인데, 오브젝트의 동등성 기준에 따라 두 오브젝트의 정보가 동등하다고 판단하는 것일 뿐이다. 예) 스프링에서 오브젝트 팩토리 방식을 사용하면 다른 객체가 생성되어 동일성에 어긋나고 동등성에 만족하지만, IoC컨테이너(빈 팩토리) 방식을 사용하면 같은 객체가 생성되 동일성에 만족한다.

    [Spring] 스프링의 IoC

    👉 지금까지 대표적인 IoC 프레임워크인 스프링 없이도 IoC 개념을 적용했었는데, 이번에는 스프링 프레임워크를 사용해 IoC 스타일의 애플리케이션을 설계해보겠습니다. 스프링의 IoC 핵심은 빈 팩토리(Bean Factroy)와 애플리케이션 컨텍스트(Application Context)가 있습니다. 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리라 부릅니다. 그리고 이를 좀 더 확장한 것을 애플리케이션 컨텍스트라고 부릅니다. 이 둘의 차이점은 빈팩토리는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞췄고, 애플리케이션 컨텍스트는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC엔진입니다. 💡 빈(Bean)이란? 스프링이 제어권을 가지고..