전체 글

    프림 알고리즘 (Prim Algorithm)

    👉 크루스칼 알고리즘과 같은 원리로 동작하는 또 다른 스패닝 트리 알고리즘이다. 💡 크루스칼 알고리즘이란? 참고 : https://withseungryu.tistory.com/70?category=753127 크루스칼 알고리즘 (Kruskal Algorithm) 👉 크루스칼 알고리즘은 MST(최소 스패닝 트리) 찾는 알고리즘들 중 하나입니다. (나머지 하나는 Prim 알고리즘) 💡 MST란? 그래프의 연결성을 그대로 유지하는 가장 '저렴한' 그래프를 찾는 문제 � withseungryu.tistory.com 프림 알고리즘과 크루스칼 알고리즘의 큰 차이는 진행 방식입니다. 크루스칼 알고리즘은 여기저기서 산발적으로 만들어진 트리의 조각들을 합쳐 스피닝 트리를 만드는 방법이고, 프림 알고리즘은 하나의 시작점으..

    크루스칼 알고리즘 (Kruskal Algorithm)

    👉 크루스칼 알고리즘은 MST(최소 스패닝 트리) 찾는 알고리즘들 중 하나입니다. (나머지 하나는 Prim 알고리즘) 💡 MST란? 그래프의 연결성을 그대로 유지하는 가장 '저렴한' 그래프를 찾는 문제 크루스칼 알고리즘은 그래프의 모든 간선을 가중치의 오름차순으로 정렬한 뒤, 스패닝 트리에 하나씩 추가해 가는 방식으로 동작합니다. 하지만, 가중치가 작다고 해서 무조건 간선을 트리에 더하는 것이 아닌, 사이클이 생기는 간선을 고려해 제외 해줍니다. 👉 동작하는 과정 위 그래프를 보면 가중치가 1인 간선, 2인 간선, 3.. 순서대로 선택해 가고 있습니다. 이때 4번째에서 5번째를 보면 가중치가 3인 간선들이 남아 있는데도 불구하고, 4인 (c,d) 간선이 추가됩니다. 그 이유는 3인 간선들이 추가되면 트리..

    [Spring] 오브젝트 팩토리

    👉 클라이언트인 UserDaoTest에서 ConnectionMaker 구현 클래스를 사용할지를 결정하는 기능을 갖고 있습니다. 하지만 UserDaoTest는 UserDao의 기능이 잘 동작하는지 테스트를 위한 클래스입니다. 그렇기 때문에 UserDaoTest에 있는 Connection Maker 구현 부분을 분리해야합니다. 💡 팩토리 분리시킬 기능을 담당할 클래스를 만들기 위해, 이 클래스는 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 것인데, 이 클래스를 팩토리라고 부릅니다. 주의해야할 점은 추상 팩토리 패턴이나 팩토리 메소드 패턴과는 다르다는 것을 인지해야합니다. 이제 팩토리 클래스의 역할을 하는 DaoFactory 클래스를 만들어보겠습니다. DaoFactory 클래스 public..

    [Spring] 객체지향적 DAO - 확장 (전략 패턴)

    객체지향 세계에서 모든 오브젝트는 변한다고 했는데, 모든 오브젝트가 다 동일한 방식으로 변하진 않습니다. 이전 글에서, 상속을 통해 DAO를 분리해봤습니다. 하지만 상속에는 여러 가지 문제점이 있습니다. 참고: https://withseungryu.tistory.com/67 [Spring] 객체지향적 DAO 만들기 - 분리 👉 객체지향의 세계에서는 모든것이 변하는데, 쉽게 말하면 객체에 대한 설계와 이를 구현한 코드가 변한다는 것입니다. 그렇기 때문에 개발자는 객체를 설계할 때 바로 미래의 변화를 어떻게 withseungryu.tistory.com 이러한 문제들이 있기 때문에, 이번에는 상속 관계과 아닌 독립적인 클래스로 만들어보겠습니다. 즉, DB Connection 부분을 서브클래스가 아닌, 별도의 ..

    [Spring] 객체지향적 DAO - 분리 (템플릿 메소드 패턴)

    👉 객체지향의 세계에서는 모든것이 변하는데, 쉽게 말하면 객체에 대한 설계와 이를 구현한 코드가 변한다는 것입니다. 그렇기 때문에 개발자는 객체를 설계할 때 바로 미래의 변화를 어떻게 대비할 것인가 염두해 둬야 합니다. 객체지향 기술(언어)는 이러한 객체지향 세계의 변화에 효과적으로 대처할 수 있습니다. How? 변화의 폭을 분리를 통해 최소한으로 줄여줘야 합니다. 🧐 분리란? 프로그래밍의 기초 개념 중 관심사의 분리라는 게 있는데, 이를 객체지향에 적용해보면, 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 할 수 있고, 관심이 다른 것은 가능한 한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것입니다. 관심사의 분리를 적용해보면, DB connection 부분을 다른 것과 영향을..

    [Spring] DAO 기본 구조 만들기

    🧐 DAO란? DAO(Data Access Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트 🧐 DAO 기본 구조 먼저 사용자 정보를 쉽게 저장하기 위한 객체를 위해 User 클래스를 만들어줍니다. User Class public class User { String id; String name; String password; public String getId(){ return id; } public void setId(String id){ this.id = id; } public String getName(){ return name; } public void setName(String name){ this.name = name; } public String ge..