전체 글 58

NamedParameterJdbcTemplate

JdbcTemplate의 문제점 JdbcTemplate을 사용함으로 인해 개발자들은 코드에서 높게 일어나는 중복 현상들을 제거해 주어 개발자에게 많은 도움을 주었습니다. 하지만 JdbcTemplate에서 종종 일어나는 문제들이 있습니다. Jdbctemplate은 순서 기반으로 파라미터들을 할당해줍니다. 그렇기 때문에 순서가 쿼리와 맞지 않게 뒤바뀐다면 큰 문제가 발생합니다. String sql = "update customer set customer_name = ?, age = ?, phone_number = ? where id = ?"; jdbcTemplate.update(sql, updateParam.getCustomerName(), updateParam.getAge(), updateParam.get..

Spring 2023.07.01

JdbcTemplate 사용 방법에 대해서

JdbcTemplate 소개 직접 Jdbc을 사용하려는 경우 데이터 베이스와의 커넥션 연결 및 에러 났을 때에는 어떻게 할 것인지 등등... 개발자가 고려해야 하는 상황들이 많아지며, 추가적으로 비즈니스 로직 외적으로 구현해야 하는 코드의 양이 늘어나는 문제점이 존재합니다. JdbcTemplate을 사용하면 비즈니스 로직 외적인 부분을 관리해 줍니다. 직접 SQL구문을 작성하는 경우 JdbcTemplate은 좋은 선택지가 될 수 있습니다. JdbcTemplate의 장점 및 단점 장점 설정의 편리함 JdbcTemplate은 spring-jdbc라이브러리에 포함되어 있습니다. 스프링으로 JDBC를 사용하는 경우 기본으로 사용되는 라이브러리이며, 별도의 복잡한 설정 없이 사용할 수 있습니다. 반복 문제 해결 ..

Spring 2023.07.01

[디자인 패턴] 추상팩토리 (Abstract Factory)

추상팩토리 패턴이란? 추상팩토리 패턴은 구체적인 클래스는 지정하지 않은 채, 관련된 객체들을 생성할 수 있는 디자인 패턴입니다. 이야기로 알아보는 추상팩토리 문제상황 가구점을 운영한다고 가정해 보겠습니다. 가구점에서는 크게 Art Deco, Victorian, Modern 테마로 가구를 만들고 있으며, 가구점에서는 의자, 소파, 커피테이블을 만듭니다. 각 가구들은 같은 테마로 구매를 해야 서로 잘 어울리는 느낌이 납니다. 다른 테마로 구매를 하면 서로 잘 어울리지 않아 고객들의 불만이 많습니다. 또한 새 제품 혹은 제품군을 프로그램에 추가 시 기존 코드를 변경하고 싶지 않을 것입니다. 이럴 때 적용 할 수 있는 디자인 패턴입니다. 해결책 1 우선적으로 의자의 경우 인터페이스로 두고, 각 테마마다 이 인터..

DesignPatterns 2023.06.27

[Java] Enum 전용 Map, Set이 있다?

백기선님의 Effective Java 강의를 듣는 도중 다음과 같은 질문이 있었습니다. enum을 key로 사용하는 Map을 정의하세요. enum을 담고 있는 Set을 만들어 보세요. 이 질문에 자신 당당히 HashMap, HashSet을 생각했습니다. 그런데 난생 처음 듣는 EnumMap, EnumSet이 정답이었습니다. EnumMap과 EnumSet은 HashMap, HashSet과는 어떠한 점이 차이가 있을까요? EnumMap EnumMap의 구조 public EnumMap(Class keyType) { this.keyType = keyType; keyUniverse = getKeyUniverse(keyType); vals = new Object[keyUniverse.length]; } EnumMa..

Java 2023.06.20

팩토리 메서드란? (Factory Method)

의도 팩터리 메서드는 생성과 관련된 디자인 패턴입니다. 팩터리 메서드는 상위 클래스에서 객체를 생성하기 위한 인터페이스를 제공하지만 생성될 객체의 유형은 하위 클래스가 변경을 할 수 있도록 허용하는 구조입니다. 문제 상황 예를 들어 어떠한 물건을 배달하는 코드가 있다고 가정해 보겠습니다. 처음에는 장사가 잘 되지 않아 오로지 트럭으로만 배달을 시작했습니다. 그런데 어느 순간 저희가 운영하는 앱의 사용자가 많아져 선박, 비행기로도 전송을 시작하려고 합니다. 사업적인 측면에서 너무 좋은 일입니다. 하지만 개발자인 저희는? 기존에 배달과 관련하여 Truck으로만 구현되어 있던 코드들을 수정해야 할 것입니다. 또 추후에 근거리 지역의 경우 개인 자가용으로 배달을 진행한다고 합니다. 이럴 때 개발자인 저희는? 기..

DesignPatterns 2023.06.15

[Java] final 키워드 그리고 effectively final

final이란? final은 클래스, 메서드, 변수에 사용될 수 있습니다. final 키워드가 붙으면 특정한 무엇인가를 제한한다는 의미를 공통적으로 가지는데, 이 부분에 대해서 알아보도록 하겠습니다. 변수 변수에 final이 붙는다면 이 변수는 수정할 수 없다 라는 의미를 갖습니다. primitive type의 경우 수정 자체가 불가능 하며, reference type 경우 가르키는 객체의 주소를 변경할 수 없습니다. (객체의 내부 값은 영향을 받지 않습니다.) public class Temporary { public static void main(String[] args) { final int int1 = 2; System.out.println("int1 = " + int1); // int1++; //..

Java 2023.06.13

[Java] Exception의 종류 및 처리 방법

들어가기에 앞서 개발을 하다 보면 다음과 같은 문구들을 자주 만나게 됩니다. 개발 공부를 처음 할 때에는 이런 문구들만 보면 갑자기 기분이 좋다가도 싫어지고, 뭔가 무섭고 그랬습니다. 하지만 예외라는 것은 개발자에게 무서운 것이 아닌 개발자에게 문제 상황을 알려주려고 하는 친근한 친구입니다. 이번 장에서는 Java에서 사용하는 예외에 대해서 알아보려고 합니다. Exception 종류 자바는 총 세 종류의 예외가 존재합니다. Error Runtime Exception (Unchecked Exception) Checked Exception [ Error ] Error란 자바 프로그램 밖에서 일어나는 예외를 말합니다. 서버의 디스크가 고장 났다던가, 메인보드가 제대로 동작을 하지 않는다던가와 같이 자바 내에서..

Java 2023.06.12

[Java] Object란 무엇인가요?

자바에서는 모든 클래스의 부모클래스가 있습니다. 보통 클래스를 상속받는 경우 implments를, 확장받는 경우는 extends를 사용합니다. 클래스에서 아무런 상속을 받지 않는다면 최상위 부모클래스인 Object를 확장합니다. Object 클래스를 상속받는 이유 Object 클래스에 있는 메서드를 통해 클래스의 기본적인 행동을 정의할 수 있습니다. Object가 제공하는 메소드는 크게 두가지로 나뉩니다. [객체를 처리하기 위한 메서드] clone : 객체의 복사본을 만들어 반환 equals : 현재 객체와 매개변수로 넘겨받은 객체가 같은 지 확인 finalize : 현재 객체가 더이상 쓸모 없어졌을 때 GC(가비지 컬렉터)에 의해 호출됨 getClass : 현재 객체의 클래스를 반환 hashCode :..

Java 2023.06.02

프론트 컨트롤러 패턴은 무엇인가요?

Definition of Wiki 위키피디아에서 설명하는 프론트 컨트롤러는 다음과 같습니다. Front Controller는 웹 애플리케이션 Workflow를 구현하는데 자주 사용되는 방식입니다. 꼭 필요한 것은 아니지만, 각 페이지에서 탐색 책임을 지는 것보다 Front Controller에서 페이지 탐색의 책임을 지는 것이 좋습니다. 그림으로 알아보는 Front Controller Front Controller 패턴 적용 전 다음 그림과 같이 클라이언트가 각각 다른 요청을 한다고 가정해보겠습니다. 각각의 요청에 대해서 공통되는 로직이 있을 것입니다. 로그인 여부 조회 권한 검증 화면 이동 그 외 필요한 검증 및 수행 기능 이러한 공통된 기능들을 각 Controller에서 매번 구현하는 것은 매우 귀찮..

Spring 2023.06.01

프로그래머스 데브코스 백엔드 - 그 시작

본문에 앞서 저는 백엔드 데브코스 4기 전형에 최종 합격한 참가자 중 한 명입니다. 앞으로의 시작 전에 현재 제 상황을 한번 돌아보고 제가 데브코스를 선택하게 된 이유에 대해 공유를 드리고자 이 글을 작성하게 되었습니다. 선배 기수분들 께서 각 단계마다 어떠한 문제가 나오는지에 대해 자세히 다뤄주셨기에 제 글에서는 간략히 설명드릴까 합니다. 대신 어떠한 기준을 가지고 해당 부트캠프를 선택하게 되었는지 그 결정 과정을 봐주시면 감사하겠습니다. 🙏 데브코스 지원 이전에 개발 경험이 있나요? 본론에 앞서 저는 작년 8월에 기존에 해오던 커리어를 그만두고 개발자가 되기위한 결심을 했었습니다. 커리어를 전환하려고 할 때 강원 이노베이션 캠프에서 무료로 강원 ICT 과정 항해99 부트캠프를 진행했었습니다. 해당 과..

데브코스 2023.05.27