본문 바로가기
반응형

Develop/Java+Kotlin63

[Java] 사라진 SQLException 😏 서론 이번에 과제를 진행하면서 PreparedStatement를 이용해 DB 데이터를 가져왔다. 코드를 작성하다보니 자연스럽게 try - catch를 통해 SQLException를 처리하는 코드가 필수적으로 추가되었다. 여기서 한가지 의문점이 들었던 건, 예전에 만들었던 프로젝트들에서도 DB와 연동하는 프로젝트들은 정말 많았으나, SQLException을 따로 처리한 기억이 없었다. 어떤 차이가 있는가... SQLException은 어디서 처리됐는지, 왜 사라졌는지에 대한 이야기를 다뤄보려고 한다. 🤩 SQLException이란? 데이터베이스 접근 또는 다른 에러에 대한 정보를 제공하는 예외 Checked Exception 🔻 Checked Exception vs Unchecked Exception .. 2022. 4. 7.
[Java] java.sql.SQLException: Parameter index out of range ❗ java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). 오류 💥 문제 상황 PreparedStatement를 이용해 쿼리문을 실행시키려고 함 // 파라미터에는 ?가 들어가야 한다. String sql1 = "update board set turn = {1} where id = {2}"; // 문자열이어도 '를 쓸 필요가 없다. - setString을 해주니까 String sql2 = "update board set turn = '?' where id = ?"; try (PreparedStatement preparedStatement = connection.prepareStatement(sql1.. 2022. 4. 4.
[Java] 반환 타입은 스트림보다 컬렉션을 사용하자. 일련의 원소를 반환하는 메서드 반환 타입으로 Collection, Set, List, Iterable, Array 등 다양하게 사용 가능하다. Java8에서 Stream 등장으로 복잡한 일이 발생하기 시작했다. 반복(iteration)을 지원하지 않는 Stream ❗ stream만 반환하는 API 여기서 의미하는 for-each는 stream().forEach()가 아니다. for(String l : list) { ... } 를 의미합니다. ❓ Stream과 Iterable Stream 인터페이스는 Iterable 인터페이스가 정의한 추상 메서드를 전부 포함한다. 이들은 Iterable 인터페이스가 정의한 방식대로 동작한다. 그럼에도 for-each가 불가능한건 Stream이 Iterable을 확장(ex.. 2022. 4. 3.
[Java] 인터페이스를 사용하자! 자바는 다중 구현을 위해 인터페이스, 추상 클래스 기능을 제공한다. 그러면 어느 것을 사용하는게 더 좋을지 한번 고민해보자! 🤗 인터페이스의 장점 ❗ 자유로운 추가 자바는 단일 상속이 조건이다. 이러한 관점에서 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약이다. 예를 들어 개발 도구는 컴퓨터, 안드로이드 개발자에게는 삼성폰, IOS 개발자에게는 아이폰 등으로 나눌 수 있다. 그렇다면 'Computer ⊂ DevelopmentTool'로 표현할 수 있다. 이번에는 게임기를 생각해보자. 게임기에는 컴퓨터, 스위치, 닌텐도, 플스 등등 여러가지가 있다. 그렇다면 'Computer ⊂ GameMachine'로 볼 수도 있겠다. 그런데 위에서 말했다시피 자바는 단일 상속이 조건이라 아래와 같은 표현이.. 2022. 3. 18.
[Java] Inheritance(상속) vs Composition(조합) 목차 상속; Inheritance 조합; Composition 질문 사항 상속보다는 컴포지션을 써야한다? 상속 설계 시 hook을 주의하자. 상속용 클래스의 생성자에서 재정의 가능한 메서드 호출 금지 Cloneable과 Serializable 인터페이스를 조심해라? 상속을 금지하는 방법 도우미 메소드 활용하기 ✨ 상속; Inheritance 먼저 상속에 대해서 알아보겠다. 상속은 코드 재사용을 쉽게 해주지만 잘못 사용하면 오류나기 쉽상이다. 또한 메소드 호출과 달리 캡슐화를 깨뜨린다. 상위 클래스의 변경이 하위 클래스까지 영향을 줄 수 있기 때문이다. 상속용 클래스는 재정의 가능한 메소드들을 내부적으로 어떻게 이용하는지, 어떠한 상황에서 호출할 수 있는지 등을 문서로 남겨야 한다. 🔻 API 문서에 대해.. 2022. 3. 14.
[Java] 중첩 클래스의 종류 (feat. 멤버 클래스는 static으로!) 😏 서론 지난 번 클래스와 멤버의 접근 권한을 최소화해야 하는 이유에 대해 공부해보았다. 한 클래스에서만 사용하는 클래스는 private static으로 중첩시키라는 말이 있었는데 이 이유에 대해 자세히 알아보자. ❓ 중첩 클래스란? : 다른 클래스 안에 정의된 클래스 자신을 감싼 바깥 클래스에서만 사용되어야 함 (그 외 쓰임새가 생기면 톱 레벨 클래스로 생성) 컴파일 시 바깥클래스$중첩클래스.class 형태로 컴파일 됨 public class Animal { // 바깥 클래스, 가장 바깥에 있으므로 톱 레벨 클래스 // ... public class Kinds { // 중첩 클래스 // ... } } 📚 중첩 클래스의 종류 정적 멤버 클래스 비정적 멤버 클래스 익명 클래스 지역 클래스 정적 멤버 클래스.. 2022. 3. 14.
[Java] 접근 권한을 최소화해야 하는 이유 이 포스팅에 들어가기 앞서 잘 설계된 컴포넌트란 무엇인가?에 대해서 생각해보도록 하자. 우리가 컴포넌트를 설계할 때 중요한 것이 뭘까? 어떤 컴포넌트를 잘 설계되었다고 표현할까? ✨ 잘 설계된 컴포넌트 클래스 내부 데이터와 구현 정보를 외부로부터 잘 숨긴 컴포넌트 서로의 내부 동작 방식을 모른채 API를 통해 다른 컴포넌트와 소통 👉 결국은 정보 은닉, 캡슐화가 중요한 포인트라고 볼 수 있다. 🔻 정보 은닉이란? 더보기 : 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통해 접근을 허용하는 것 정보 은닉으로 인한 장점 여러 컴포넌트를 병렬로 개발 가능 👉 시스템 개발 속도↑ 각 컴포넌트를 더 빨리 파악할 수 있고 교체 부담도 적음 👉 시스템 관리 비용 ↓ 성능 최적화에 도움 소프트웨어의 재사용성 ↑.. 2022. 3. 6.
[Java] Predicate란? 🤔 서론 우테코 오늘자 강의에서 BiPredicate라는 개념을 처음 들어보았다. Predicate란 무엇인지, 언제 사용하는 것인지 그리고 내 코드에 적용하는 과정까지를 담아본다. 생각보다 어렵지 않다. 설명 안읽고 예제 코드만 봐도 바로 이해할 수 있을듯 📚 Predicate란? argument를 받아 boolean 값을 반환하는 함수형 인터페이스 functional method: test() 🔻 함수형 인터페이스란? 더보기 = SAM interface; Single Abstract Method Interface : 1개의 추상 메소드를 갖고 있는 인터페이스 ➕ default나 static 메소드의 제한 X @FunctionalInterface 어노테이션 사용 ➕ 없어도 동작하지만 함수형 인터페이스 .. 2022. 3. 4.
[JUnit5] 중복되는 테스트 코드 줄이기 목차 서론 @ParameterizedTest란? 예제 코드 -@ValueSource 파라미터를 여러개 받고 싶다면? - @CsvSource 사용자 정의 클래스를 파라미터로 넣고 싶다면? - @MethodSource 테스트 코드에 설명 덧붙이기 👀 서론 테스트 코드를 작성하다 보면 코드가 반복되는게 느껴질 때가 있다. 개인적으로 나는 객체가 잘 생성되는지 확인할 때도 경계값 중간값까지 최소 3번은 테스트하는 편이다. 값이 바뀔때마다 코드를 복붙하는게 불필요하게 느껴져서 테스트 코드 내부에 메소드를 따로 만들기도 했었는데... 우테코를 통해 @ParameterizedTest라는 어노테이션을 알게 되었다. 💡 @ParameterizedTest란? 다양한 인수로 테스트를 여러번 실행할 수 있도록 해주는 어노테이.. 2022. 3. 2.
반응형