<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java | 정진영의 포트폴리오</title><link>https://wjdwlsdud.github.io/tags/java/</link><atom:link href="https://wjdwlsdud.github.io/tags/java/index.xml" rel="self" type="application/rss+xml"/><description>Java</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>ko</language><lastBuildDate>Sun, 12 Oct 2025 00:00:00 +0000</lastBuildDate><image><url>https://wjdwlsdud.github.io/media/sharing.jpg</url><title>Java</title><link>https://wjdwlsdud.github.io/tags/java/</link></image><item><title>JAVA</title><link>https://wjdwlsdud.github.io/studying/java/</link><pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate><guid>https://wjdwlsdud.github.io/studying/java/</guid><description>&lt;p&gt;자바의 문법과 기능을 단순히 알기만 하는 것이 아니라, 그 기능이 왜 필요하고 어떻게 실무에 적용할 수 있는지에 대해 깊이 있게 탐구하기 위해 공부를 시작하였다.&lt;/p&gt;
&lt;p&gt;지금까지 공부한 내용은 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Object 클래스&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Object 클래스는 모든 클래스의 최상위 부모이다.
Object 클래스가 필요한 이유와 Object 클래스가 제공하는 기능과 equals()를 통해 자바의 동일성과 동등성 개념도 함께 공부하였다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;불변 객체&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;한번 생성하면 그 이후로 변하지 않는 객체를 불변 객체라 합니다.
String, 래퍼, 날짜와 시간을 포함해서 자바가 제공하는 많은 객체들은 불변 객체로 제공된다. 불변 객체가 왜 필요한지, 그리고 어떻게 불변 객체를 만드는지 공부하였다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;String 클래스&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;String 클래스는 자바에서 문자열을 다룰 때 사용되는 클래스이다.
String 객체의 기본 기능 뿐만 아니라, StringBuilder와 String의 기능과 성능 차이, 또한 자바가 String 클래스를 어떻게 최적화하는지 공부하였다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;래퍼, Class 클래스&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;자바 기본형의 한계를 알아보고 그 한계를 극복하기 위한 래퍼 클래스를 공부하였다.
추가로 클래스의 정보를 나타내는 Class 클래스, 시스템의 정보를 제공하는 System 클래스, 자주 사용하는 Math, Random 같은 클래스도 함께 공부하였다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;열거형 - ENUM&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;열거형은 높은 타입 안전성을 제공하는 훌륭한 기능이다.
단순히 열거형의 문법을 배우는 것이 아니라 본질적으로 열거형이 왜 필요한지 공부하였다. 그리고 열거형이 없던 시절 직접 구현했던 타입 안전 열거형 패턴도 구현해보았다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;중첩 클래스, 내부 클래스&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;클래스 내부에 클래스를 두는 것을 중첩 클래스 또는 내부 클래스라 한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;예외 처리&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;자바에서 예외 처리 문법은 단순하지만 예외 처리가 왜 필요한지 공부하였다.&lt;/p&gt;</description></item><item><title>Spring MVC</title><link>https://wjdwlsdud.github.io/studying/spring/</link><pubDate>Sun, 12 Oct 2025 00:00:00 +0000</pubDate><guid>https://wjdwlsdud.github.io/studying/spring/</guid><description>&lt;h2 id="서블릿에서-스프링-mvc까지-java-웹-개발의-흐름을-배우다"&gt;서블릿에서 스프링 MVC까지: Java 웹 개발의 흐름을 배우다&lt;/h2&gt;
&lt;p&gt;이번에는 Java 백엔드 개발의 핵심 기술이라 할 수 있는 웹 애플리케이션의 발전 과정을 되짚어보는 시간을 가졌습니다.&lt;/p&gt;
&lt;p&gt;왜 웹 애플리케이션인가?
현대의 애플리케이션은 대부분 웹 환경에서 동작합니다. 우리가 매일 사용하는 수많은 서비스가 바로 웹 애플리케이션이죠. Java 백엔드 개발자는 이러한 웹 애플리케이션의 서버 측 로직을 개발하는 중요한 역할을 담당하며, 이때 가장 강력한 도구로 사용되는 것이 바로 스프링 프레임워크, 특히 스프링 MVC입니다.&lt;/p&gt;
&lt;p&gt;이번 학습을 통해 복잡한 웹 애플리케이션을 쉽고 빠르게 개발할 수 있도록 도와주는 스프링 MVC를 깊이 이해하기 위해, 그 뿌리가 되는 기술부터 차근차근 공부했습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Java 웹 기술의 시작, 서블릿(Servlet)
모든 것은 서블릿에서 시작되었습니다. 서블릿은 클라이언트의 요청을 받고, 비즈니스 로직을 처리한 후, 동적인 HTML 응답을 생성하는 순수 Java 코드입니다. 하지만 서블릿 코드 안에 HTML 코드를 문자열(out.println(&amp;quot;&lt;html&gt;&amp;hellip;&amp;quot;)) 형태로 작성해야 했기 때문에, 화면을 수정하기가 매우 번거롭고 가독성이 떨어지는 단점이 있었습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;화면을 분리하다, JSP(JavaServer Pages)
이러한 서블릿의 단점을 보완하기 위해 등장한 것이 JSP입니다. JSP는 HTML 문서 안에 Java 코드를 삽입하는 방식으로, 디자이너와 개발자의 협업을 더 쉽게 만들었습니다. 덕분에 화면(View)을 표현하는 작업이 훨씬 수월해졌습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;하지만 JSP만으로는 부족했습니다. 비즈니스 로직과 화면을 보여주는 코드가 하나의 파일에 뒤섞여, 프로젝트 규모가 커질수록 유지보수가 어려워지는 &amp;lsquo;스파게티 코드&amp;rsquo; 문제가 발생하기 시작했습니다.&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;역할 분담의 시작, MVC 패턴
이 문제를 해결하기 위해 MVC(Model-View-Controller) 패턴이라는 설계 사상이 등장했습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Model: 데이터와 비즈니스 로직을 담당합니다.&lt;/p&gt;
&lt;p&gt;View: 사용자에게 보여지는 화면(UI)을 담당합니다. (JSP)&lt;/p&gt;
&lt;p&gt;Controller: 사용자의 요청을 받아 Model과 View를 연결해주는 중간 다리 역할을 합니다. (Servlet)&lt;/p&gt;
&lt;p&gt;이렇게 각자의 역할을 명확히 분리함으로써, 코드는 훨씬 더 체계적이고 재사용하기 쉬워졌습니다.&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;스프링 MVC의 탄생과 실무 활용
MVC 패턴을 직접 구현하는 것은 여전히 반복적이고 번거로운 작업이 많았습니다. 개발자들은 이러한 MVC 패턴을 더 쉽고 편리하게 사용할 수 있도록 도와주는 MVC 프레임워크를 만들기 시작했고, 그중 가장 성공적이고 압도적인 인기를 얻게 된 것이 바로 스프링 MVC입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;스프링 MVC는 MVC 패턴 구현에 필요한 복잡한 처리 과정을 대신해주어, 개발자가 오직 비즈니스 로직에만 집중할 수 있는 환경을 제공합니다. 이번 학습을 통해 스프링 MVC의 탄생 배경부터 실무에서 주로 사용하는 최신 기술까지 익히며, 왜 수많은 기업이 스프링을 선택하는지 몸소 깨달을 수 있었습니다.&lt;/p&gt;
&lt;p&gt;앞으로 이 기술들을 활용하여 직접 프로젝트를 진행하며 겪는 경험들도 꾸준히 공유해 나가겠습니다. 감사합니다!&lt;/p&gt;
&lt;p&gt;위의 첨부된 링크에서 제가 지금까지 공부한 코드들을 확인 해볼 수 있습니다!&lt;/p&gt;</description></item><item><title>전화번호부 애플리케이션</title><link>https://wjdwlsdud.github.io/projects/mobile/</link><pubDate>Fri, 20 Dec 2024 00:00:00 +0000</pubDate><guid>https://wjdwlsdud.github.io/projects/mobile/</guid><description>&lt;p&gt;2024년 2학기 모바일프로그래밍 수업에서 만든 간단한 모바일 앱입니다.&lt;/p&gt;
&lt;p&gt;이 프로젝트는 안드로이드의 기본 기능과 데이터베이스를 활용한 전화번호부 관리 앱입니다.&lt;/p&gt;
&lt;p&gt;먼저, phoneDB라는 이름의 데이터베이스와 phoneTBL 테이블을 설계했습니다. 이 테이블은 **이름(문자형 20)**과 **전화번호(문자형 20)**를 저장하며, 이름은 중복될 수 없도록 UNIQUE 제약 조건을 설정했습니다. &amp;lsquo;홍길동&amp;rsquo;과 제 연락처를 초기 데이터 2개로 포함시켰습니다.&lt;/p&gt;
&lt;p&gt;제가 구현한 주요 기능은 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;메인 화면 (데이터 조회): 앱 실행 시, 데이터베이스에 저장된 모든 사용자의 이름을 리스트(ListView)로 불러와 보여줍니다. 하단에는 &amp;lsquo;추가&amp;rsquo; 버튼과 옵션 메뉴를 배치했습니다.&lt;/p&gt;
&lt;p&gt;연락처 추가 (Create): &amp;lsquo;추가&amp;rsquo; 버튼을 누르면, 별도의 Activity가 열려 이름과 전화번호를 입력받습니다. 입력 완료 후, 이 정보를 메인 Activity로 전달하여 데이터베이스에 저장하고 리스트를 즉시 갱신하도록 구현했습니다.&lt;/p&gt;
&lt;p&gt;데이터베이스 초기화 (Delete All): 옵션 메뉴에서 &amp;lsquo;초기화&amp;rsquo;를 선택하면, 대화상자를 띄워 사용자에게 정말 초기화할 것인지 확인을 받습니다. &amp;lsquo;확인&amp;rsquo;을 누르면 데이터베이스의 모든 내용을 삭제하고 리스트도 새로고침합니다.&lt;/p&gt;
&lt;p&gt;데이터 백업 (Export): 옵션 메뉴의 &amp;lsquo;백업&amp;rsquo; 기능을 통해, 데이터베이스에 저장된 모든 이름과 전화번호를 SD카드(_sdcard) 경로에 제학번.txt 파일로 저장하는 기능을 구현했습니다.&lt;/p&gt;
&lt;p&gt;전화 앱 연동 (Intent): 리스트의 특정 항목을 클릭하면, 해당 항목의 전화번호를 가져와 안드로이드의 기본 전화 앱으로 즉시 연결(Intent)되도록 했습니다.&lt;/p&gt;
&lt;p&gt;수정 및 삭제 (Update/Delete): 리스트 항목을 길게 누르면(Long Click), 선택한 항목을 수정하거나 삭제할 수 있는 별도의 Activity로 이동합니다. 각 작업 시 대화상자를 통해 사용자 확인을 받도록 했으며, 완료 시 메인 Activity의 데이터베이스와 리스트에 변경 사항이 실시간으로 반영되도록 구현했습니다.&lt;/p&gt;</description></item></channel></rss>