본문 바로가기
반응형

Develop/Java70

[Java] 입출력(I/O)과 버퍼(Buffer) 서론 ByteArrayOutputStream과 BufferedOutputStream의 차이점에 대한 질문을 받았다. 내가 Java의 입출력 시스템과 buffer에 대한 이해도가 떨어진다는 상태를 자각하게 되었다. 이를 공부하는 내용을 작성하려고 한다. 목차 stream이란? InputStream & OutputStream InputStreamReader & OutputStreamWriter buffer란? BufferedInputStream & BufferedOutputStream BufferedReader & BufferedWriter Java의 입출력 java에서의 입출력은 Stream을 통해 이루어진다. 1. stream이란? 데이터를 운반하는데 사용되는 연결 통로 stream 이름의 어원: 데이터.. 2022. 9. 5.
[Java] 날짜, 시간 API 😎 서론 최근 LocalDateTime과 같이 날짜나 시간과 관련한 로직을 작성할 일이 많았다. ZoneOffSet? Instant? 부끄럽게도 뭐가 뭔지 모르고 사용했던 것들이 많아 이를 알아보는 시간을 가지려 한다.🙂 😊 Java의 날짜와 시간 API 🔹 time 패키지 ISO 기반 (24시간 시계 시스템 hh:mm:ss) 불변 + thread-safe 🔹 LocalDate / LocalTime / LocalDateTime 시간대 (ZoneOffset, ZoneRegion)에 대한 정보 미포함 LocalDate: 날짜에 대한 정보 LocalTime: 시간에 대한 정보 LocalDateTime: 날짜 및 시간에 대한 정보 `Local... `는 ZoneOffset과 ZoneRegion를 포함하지 않음 .. 2022. 8. 30.
[Java] java.lang.ClassNotFoundException: javax.xml.bind.JAXBException 에러 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException 에러 🤔 상황 Java 8에서 Java 11로 버전 업그레이드 😱 원인 Java 8 -> Java 9 버전업 시 해당 모듈이 제거됨 Java SE 9: JAXB API를 Java EE API로 간주해 기본 클래스 경로에 포함하지 않음 Java 11: JAXV API를 JDK에서 아예 제거 🔻 Java EE란? 더보기 Java EE: Java Enterprise Edtion = 엔터프라이즈 에디션 자바 플랫폼 Java SE: Java Standard Edition = 표준 에디션의 자바 플랫폼 더 자세한 설명 👉 IBM 링크 💡 해결 Maven javax.xml.bind jaxb-api 2.3... 2022. 6. 20.
[Java] Duplicate key XXX 에러 java.lang.IllegalStateException: Duplicate key 'key로 저장하려는 값' (attempted merging values ~~) ❓ 에러 원인 Collectors.toMap() 호출 시 중복되는 key 값이 존재 💡 해결 방법 해결 방법은 크게 2가지가 있다. key가 중복되지 않는 데이터 사용 toMap(Function, Function) 대신 toMap(Function, Function, BinaryOperatior) 사용 👀 더 자세히 살펴보기 위와 같은 에러가 발생하는 예제 코드를 만들어봤다. name을 key로, User 객체 자체를 value로 넣으려고 한다. 헌데 name이 동일한 데이터가 2개 존재한다. key만 동일한 데이터가 존재하는 경우 @Test .. 2022. 5. 18.
[Java] 파라미터를 Optional로 받지 말자 'Optional' used as type for parameter '파라미터명' 경고 어쩌다보니 Optional 파라미터를 받는 메서드를 만들게 되었다. 노란줄이 쳐지며 경고가 떴다. 대체 왜? 🤔 private void test(Optional id) { // ... } 😭 1. 메서드에 조건부 로직을 유도한다. Optional 값을 바로 get()해서 사용하는 경우 노란 줄로 경고가 뜬다. null인지 체크하지 않고 바로 사용해서 뜨는 경고다. 'Optional.get()' without 'isPresent()' check 따라서 메서드 내부에 해당 Optional에 null값이 확인하는 로직인 'isPresent()'를 반드시 호출해야한다. isPresent가 true인 경우와 false인 경우를.. 2022. 5. 12.
[JDBC] JDBC가 등장한 이유 목차 1. JDBC 등장 배경 2. JDBC란 3. 표준화의 한계 4. JDBC와 최신 기술 👨‍💻 JDBC 등장 배경 애플리케이션을 개발할 때 중요한 데이터는 대부분 DB에 저장된다. 클라이언트가 DB를 호출하려면 아래와 같은 과정을 거친다. 여기서 Application Server에서 DB까지의 과정을 좀 더 살펴보자. 커넥션 연결: 주로 TCP/IP 사용 SQL 전달: 커넥션을 통해 DB에 SQL 전달 결과 응답: DB가 SQL 수행 후 결과 응답. application server는 응답 결과 활용 과거에는 DB마다 커넥션을 연결하는 방법, SQL 전달하는 방법, 결과를 응답 받는 방법이 모두 달랐다. 게다가 MySQL, Oracle DB, h2 등등등 DB의 종류는 정말 정말 많다. DB 종류에.. 2022. 4. 15.
[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.
반응형