young0105의 등록된 링크

키자드에 등록된 총 271개의 포스트를 확인하실 수 있습니다.

Tistory

[SQL] 서브 쿼리

서브 쿼리 (내부 쿼리) - 쿼리 내에 존재하는 또 다른 쿼리 - 반드시 괄호로 감싸주어야 함 # 종류 1) 중첩 서브 쿼리 (Nested Sub Query) : WHERE 절에 사용하는 서브 쿼리 2) 인라인 뷰 (Inline View) : FROM 절에 사용하는 서브 쿼리 · 반드시 AS로 테이블 이름을 설정해주어야 함 3) 스칼라 서브 쿼리 (Scalar Sub Query) : SELECT 절에 사용하는 서브 쿼리 → 성능 저하 문제 때문에 사용을 권장하지 않음 # 장점 - 쿼리를 구조화함 → 쿼리의 각 부분을 명확히 구분할 수 있게 함 (가독성 UP) - 복잡한 JOIN, UNION 대신 사용할 수 있음 - 읽기 편리함

Tistory

[개발 일지] 전자 도서관 Web 개발 프로젝트 - 결과 정리

# 깃허브 주소 https://github.com/seoyounglee0105/Library_Web_Project # 설명 PPT # 주요 기능 시연 영상 # 일차별 개발일지 https://young0105.tistory.com/category/My%20Project/Library%20Web%20Project

Tistory

[JSP] 쿼리 파라미터 방식 (쿼리 스트링)

쿼리 파라미터 방식 (쿼리 스트링) - HTTP 메세지 시작 줄에 데이터를 추가해서 서버에 보내는 방식 → 이 방식을 이용하면 바디가 없는 GET 방식도 데이터를 전송할 수 있음 - &로 연결하면 여러 key-value를 보낼 수 있음 - 헤더에 담는 부분이라 용량이 적음 HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스

Tistory

[개발 일지] 전자 도서관 Web 개발 프로젝트 7일차 (04/04) ~ 종료

7일차 # 메인 화면 (index.jsp) - 대여량이 높은 순서대로 정렬하고, 15위 안에 드는 도서들을 랜덤으로 4개 뽑아 메인 화면에 보이게 함 # 에러 페이지 피드백 - UX를 더 신경쓰자. 1) 홈 버튼을 상단에 배치 (자리가 애매해져서 사용자명은 보이지 않게 함) 2) 리뷰 작성 버튼이 잘 보이도록 아이콘을 함께 배치

Tistory

[JSP] 필터 (Filter)

필터 (Filter) - 매번 요청 들어오는 값들을 확인하고자 할 때 사용함 · 브라우저에서 웹 서버로 요청되기 전에 검사 · 웹 서버에서 브라우저로 응답되기 전에 검사 - 필요한 경우에만 사용해도 됨 · 유용한 예시 : request.setCharacterEncoding("UTF-8");를 필터에서 설정해주면 서블릿에서 반복하지 않아도 됨 # Filter Life-Cycle - init() : 처음 생성되는 과정 - doFilter() : 일하는 단계 - destroy() : 종료하는 단계 ⇒ 생성자 → init()은 처음 연결되었을 때만 실행됨 doFilter()는 연결될 때마다 실행됨 destroy()는 메모리가 해제되면 실행됨 필터 생성 방법 1. Filter 인터페이스의 구현 클래스 생성 HTM..

Tistory

[JSP Code] 외부 라이브러리 없이 파일 업로드하기

코드 # JSP - form HTML 삽입 미리보기할 수 없는 소스 # 서블릿 HTML 삽입 미리보기할 수 없는 소스 - getPart() 메서드는 멀티 파트 폼 데이터를 처리하기 위해 사용됨 → 멀티 파트 폼 데이터 : HTTP 요청 메시지의 body에 있는 여러 개의 파트로 구성된 데이터

Tistory

[JSP Code] 파일 업로드 및 조회

# 관련 포스팅 - 파일 업로드 : https://young0105.tistory.com/178 오늘 배운 파일 업로드 방법을 복습할 겸 전자 도서관 프로젝트에 이미지 리뷰 기능을 추가했다. # 이미지를 포함한 리뷰 작성 더보기 Controller HTML 삽입 미리보기할 수 없는 소스 DAO HTML 삽입 미리보기할 수 없는 소스 # 이미지 리뷰 조회 더보기 리뷰 조회 (이미지 포함 리뷰, 미포함 리뷰 구분) HTML 삽입 미리보기할 수 없는 소스 DAO HTML 삽입 미리보기할 수 없는 소스 ReviewImage 테이블을 따로 만들어서, review_id를 외래키로 받아 기본키로 사용하고 기존 파일명과 UUID가 포함된 파일명을 각각 테이블에 저장했다.

Tistory

[개발 일지] 전자 도서관 Web 개발 프로젝트 3일차 (03/31)

3일차 - 검색 기능 보완 · 기존에는 스페이스를 한 번 누르고 검색을 실행하면 공백이 포함된 모든 책들이 검색됨 · 조건문을 사용해서, 공백만 입력되었을 때는 검색되지 않도록 함 - 선택된 카테고리가 표시되도록 폰트 색 지정 - 정렬 기능 추가 : 가나다순, 최신 등록 순, 인기순 - 책 상세 페이지 · 나중에 리뷰 작성 및 조회 기능을 추가할 예정 · 대여 가능 여부가 true일 때에만 대여하기 버튼이 보이도록 함

Tistory

[개발 일지] 전자 도서관 Web 개발 프로젝트 4일차 (04/01)

4일차 - 대여 기능 추가 · 로그인되지 않았거나, 대여 가능 여부가 '불가능'일 때에는 대여하기 버튼이 보이지 않음 · 대여하면 book 테이블에서 해당 도서의 총 대여량이 +1되고, 대여 가능 여부가 불가능으로 변경됨 - 마이페이지 틀 · 메인 화면 · 회원 정보 수정 (+ 회원 탈퇴) · 내 서재 (대여 중인 도서, 대여 기록) · 리뷰 관리 (리뷰 작성하기, 내가 작성한 리뷰 조회하기)

Tistory

[개발 일지] 전자 도서관 Web 개발 프로젝트 5일차 (04/02)

5일차 # 마이페이지 - 메인 화면 - 회원 정보 (아이디, 이름, 전화번호, 이메일) · 전화번호 뒷 자리는 보이지 않도록 함 - 대여 중인 도서가 몇 권인지 · '대여 중인 도서'를 클릭하면 '내 서재' 탭으로 이동함 - 리뷰 작성 가능한 도서가 몇 권인지 · 6일차에 리뷰 기능 추가 후 연동할 예정 # 마이페이지 - 회원 정보 수정 - 비밀번호를 확인받은 후 진입 가능 - 아이디는 수정할 수 없음 - 이메일을 입력하지 않으면 null로 수정됨 - 전화번호가 중복되었거나 형식이 틀렸을 경우에는 실행되지 않으며, 메시지를 출력함 # 마이페이지 - 회원 탈퇴 - 탈퇴 시, 회원이 아직 반납하지 않은 책들의 대여 가능 여부를 true로 변경함 # 마이페이지 - 내 서재 - 반납하지 않은, 대여 중인 도서 ..

Tistory

[개발 일지] 전자 도서관 Web 개발 프로젝트 6일차 (04/03)

6일차 # 리뷰 작성 - 대여한 기록이 있으면서, 리뷰를 작성한 기록이 없는 도서에 대해서만 리뷰 작성 가능 - 리뷰 작성 가능한 도서가 있는 경우, 마이페이지에서 '리뷰 작성'을 클릭해서 작성 가능 # 도서별 리뷰 조회 - 리뷰 별점의 평균이 보이게 함 - 리뷰가 없다면 별 0개 (평가 없음) - 리뷰가 있다면 리뷰 개수가 출력되며, 클릭하면 리뷰 페이지로 이동함 → 리뷰 제목을 클릭하면 리뷰 상세 페이지로 이동함 # 리뷰 관리 - 해당 회원이 작성한 리뷰 목록 - 도서명을 클릭하면 해당 도서의 상세 페이지로 이동함 - 리뷰 제목을 클릭하면 해당 리뷰 페이지로 이동함 - 삭제하기를 누르면 리뷰가 삭제됨 앞으로 해야 할 것 - 메인 화면 - 오류 페이지 (7일차에 마무리 예정)

Tistory

[JSP] JSTL (JSP Standard Tag Library)

사용하기 1. https://mvnrepository.com/artifact/javax.servlet/jstl 에서 jar 파일 다운받기 2. [webapp] - [WEB-INF] - [lib]에 jar 파일 복사해서 넣기 3. 프로젝트의 [Properties] - [Java Build Path] - [Libraries] - [Modulepath]에 jar 파일 넣기 4. JSTL을 사용할 JSP 파일의 상단부에 아래 코드 붙여 넣기 JSTL (JSP Standard Tag Library) - JSP 개발을 단순화하기 위한 태그 라이브러리 ex) → ${student} - RequestDispatcher를 이용해서 보낸 데이터를 더 쉽게 받아서 사용할 수 있음 HTML 삽입 미리보기할 수 없는 소스 # ..

Tistory

[JSP Code] Java web으로 SQL CRUD 구현하기

코드 # DB 연동 더보기 HTML 삽입 미리보기할 수 없는 소스 # TodoDTO 더보기 HTML 삽입 미리보기할 수 없는 소스 # TodoDAO 더보기 HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스 # Servlet 더보기 HTML 삽입 미리보기할 수 없는 소스 실행 - css는 부트스트랩 4 사용

Tistory

[개발 일지] 전자 도서관 Web 개발 프로젝트 1일차 (03/29)

개인 프로젝트 주제 도서관 서적 정보 및 대여 기능을 제공하는 전자 도서관을 웹 사이트로 구현하기 프로젝트 기간 03/29 ~ 04/04 깃허브 주소 https://github.com/seoyounglee0105/Library_web_project 개발 계획 1. 회원가입 2. 로그인 (세션 활용해서 로그인 정보 기억하기) - 로그인 전과 로그인 후의 header가 다르게 보이도록 설정하기 · 로그인 전 : 로그인 페이지, 회원가입 페이지 · 로그인 후 : 사용자명, 로그아웃 버튼, 마이페이지 3. 도서 카테고리 4. 도서 리스트 페이지 - 카테고리별 - 정렬 기능 (등록순, 인기순, 가나다순) · 인기순은 대여량 컬럼 값을 이용해서 정렬 5. 도서 상세 정보 페이지 - 제목, 표지 이미지, 저자, 출판..

Tistory

[개발 일지] 전자 도서관 Web 개발 프로젝트 2일차 (03/30)

2일차 - 회원가입 보완 : 전화번호 형식 확인 - 로그인 기능 & 로그아웃 기능 → 상태에 따라 상단 메뉴가 바뀜 - 전체 조회 및 카테고리 조회 구현 → 이후 사진 or 제목을 클릭하면 상세 페이지로 넘어가게 구현할 예정 - 검색 조회 구현 → 스페이스 입력 시 검색이 작동하지 않도록 보완 필요

Tistory

[JSP] web.xml 파일 & JSP 내장 객체 2 (config, application)

web.xml 파일 - Java 웹 애플리케이션에서 사용하는 배치 지시자 파일 - 웹 애플리케이션이 서버에 배포되는 시점의 설정 정보를 담고 있는 XML 파일 - 기본 설정을 하나의 프로젝트마다 재정의할 수 있음 - 웹 서버가 시작될 때 단 한 번만 로딩됨 → 서버가 시작된 후에는 수정해도 수정 사항이 적용되지 않음 → 설정을 변경하려면 해당 애플리케이션을 다시 배포해야 함 welcome-file : 처음 서버에 접속했을 때 표시하는 파일 · 순서대로 확인해서 가장 처음 발견된 파일을 표시함 · 파일 경로를 포함하지 않고 root context(프로젝트명)까지만 작성해도 그 파일로 들어가짐 HTML 삽입 미리보기할 수 없는 소스 config 객체 - 현재 JSP 페이지의 환경 정보(서블릿 설정 정보 ..

Tistory

[JSP] JSP 내장 객체 3 (exception) & 에러 페이지

exception 객체 - JSP 페이지에서 발생한 예외 정보를 다루는 객체 HTML 삽입 미리보기할 수 없는 소스 - 에러 메시지에는 코드 내용이 포함되기 때문에 에러 메시지는 거의 띄우지 않음 → 보안 상의 이유 때문에 사용자에게 코드를 보여주지 않는 것이 좋기 때문임 에러 발생 시, 에러 전용 페이지로 이동시키기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[JSP] 쿠키와 세션

# 관련 포스팅 - 쿠키와 세션 개념 : https://young0105.tistory.com/160 쿠키 (Cookie) - 쿠키(Cookie)는 JSP 내장 객체가 아니므로, 생성자로 생성해서 사용해야 함 - 서버에 최초로 접근하는 사용자에게는 addCookies 메서드를 사용해서 쿠키를 생성해 보냄 - 사용자가 서버에 다시 요청할 때, getCookies 메서드를 이용해서 쿠키 정보를 확인함 - setMaxAge 메서드를 이용해서 쿠키의 유효 시간을 설정할 수 있음 HTML 삽입 미리보기할 수 없는 소스 세션 (Session) - 세션(session)은 JSP 내장 객체이므로, 생성하지 않아도 사용할 수 있음 HTML 삽입 미리보기할 수 없는 소스

Tistory

[JSP] RequestDispatcher

RequestDispatcher - JSP와 Servlet 사이에서 request와 response를 전달하는 기능을 제공 · Servlet에서 JSP로 or JSP에서 Servlet으로 · 데이터를 공유하면서 같이 사용할 수 있음 - 사용 목적 · 웹 애플리케이션의 모듈화 · 재사용성 향상 - 요청 주소는 여전히 기존 주소로 유지됨 (비교 : sendRedirect 메서드는 주소도 바뀜) → 클라이언트는 전달받은 Servlet or JSP의 정확한 주소를 알지 못함 → 보안 good # 방식 1) forward() 메서드 사용 - 서버 내부에서만 작동함 - request와 response를 그대로 넘김 HTML 삽입 미리보기할 수 없는 소스 # 방식 2) include() 메서드 사용 - 다른 Serv..

Tistory

[Java] 디자인 패턴 정리

디자인 패턴 - 공통적으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴 - 장점 · 개발자 간에 원활한 소통 가능 · 소프트웨어 구조 파악 용이 · 재사용성 UP → 개발 시간 단축 · 설계 변경 요청에 대한 유연한 처리 - 단점 · 객체 지향 설계/구현에 대한 지식이 필요함 · 초기 투자 비용에 대한 부담 생성 패턴 - 객체를 생성하는 것과 관련된 패턴 # 싱글톤 패턴 (Singleton) - https://young0105.tistory.com/186 # 빌더 패턴 (Builder) - https://young0105.tistory.com/159 # 그 외 : Factory Method, Abstract Factory 구조 패턴 - 프로그램 내의 자료 구조 or 인터페이스 구조 등을 설..

Tistory

[Java] 어댑터 패턴 (Adapter pattern)

어댑터 패턴 (Adapter pattern) - 호환되지 않는 클래스들을 함께 이용할 수 있도록 타 클래스의 인터페이스를 기존 인터페이스에 덧씌움 - 기존의 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 생성함 ⇒ 인터페이스를 이용하면 코드를 좀 더 유연하게 설계할 수 있음 HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스

Tistory

[HTTP] MIME 타입

MIME 타입 - 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘 - 웹에서 파일의 확장자는 큰 의미가 없음 → 각 문서와 함께 올바른 MIME 타입을 전송하도록 정확히 설정해야 함 # 대표적인 MIME 타입 - text/plain (기본값), text/html, text/css, text/javascript - application/json - application/x-www-form-urlencoded : form 태그의 MIME 타입

Tistory

[JSP] JSP 내장 객체 1 (request, response, session, out)

JSP 내장 객체 - JSP 페이지에서 자동으로 생성되어 사용할 수 있는 객체 - JSP 컨테이너가 JSP 페이지를 실행하는 동안에 자동으로 생성됨 - JSP 페이지에서 명시적으로 선언하지 않아도 사용 가능 request 객체 - HTTP 요청 정보를 다루는 객체 HTML 삽입 미리보기할 수 없는 소스 - GET 방식에서는 request 사용 시에 UTF-8로 처리되어 들어오기 때문에, 따로 인코딩 표준을 지정하지 않아도 됨 - POST 방식에서는 인코딩 표준을 지정해주어야 함 response 객체 - HTTP 응답 정보를 다루는 객체 - MIME 타입 : https://young0105.tistory.com/156 HTML 삽입 미리보기할 수 없는 소스 session 객체 - 세션 정보를 다루는 객체 ..

Tistory

[JSP] JSP 스크립트

JSP 스크립트 요소 - JSP 페이지에서 Java 코드를 사용할 수 있도록 하는 요소 - JSP 페이지에서 동적으로 HTML을 생성하거나, DB와 연동해서 데이터 처리 가능 # 스크립트릿 (ScriptLet) - JSP 페이지에서 Java 코드를 실행할 수 있음 - JSP 페이지 어디든지 작성할 수 있음 - HTML과 Java 코드를 혼합해서 사용할 수 있음 - 출력 결과를 지정하면 출력할 수 있음 # 표현식 (Expression) - JSP 페이지에서 Java 코드의 결과 값을 출력할 수 있음 - HTML 태그 내부에서만 작성할 수 있음 - 출력할 값이 null인 경우, 빈 문자열이 출력됨 - 표현식 안에 아무것도 작성하지 않으면 오류 # 선언 (Declaration) - JSP 페이지에서 전역변수,..

Tistory

[Java] 빌더 패턴 (Builder pattern)

빌더 패턴 (Builder pattern) - 객체를 생성하는 클래스와 객체를 표현하는 클래스를 분리하는 디자인 패턴 - '생성' 디자인 패턴 - 생성자의 매개변수로 값을 받아 멤버 변수에 대입할 때에는 실수가 발생할 수 있음 (매개변수가 많을수록 포지셔널을 지키기 어려워짐) → Builder 패턴은 set 메서드의 대상이 되는 멤버 변수 이름이 명확하게 제시되므로, 실수 방지 HTML 삽입 미리보기할 수 없는 소스

Tistory

[HTTP] 클라이언트의 인증 정보 (쿠키, 세션)

HTTP 프로토콜의 특징 ① Connectionless (↔ 소켓 통신의 커넥션 풀) - 하나의 요청(request)에 대한 하나의 반응(response)을 한 후, 연결을 종료함 → 새 요청이 있을 때마다 항상 새로운 연결을 맺음 ② Stateless - 통신이 끝난 후 상태 정보를 저장하지 않음 → 이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없음 ⇒ 웹 서버는 클라이언트를 기억할 수 없음 (쿠키 or 세션 필요) 쿠키 (Cookie) - Key와 Value로 이뤄진 일종의 단위 - 서버에서 생성되어 클라이언트의 브라우저에 저장됨 → 클라이언트가 다시 서버에 요청을 보낼 때 HTTP 메시지 헤더에 포함되는 정보 # 작동 방식 1. 서버가 클라이언트에게 쿠키를 발급함 2. 클라이언트는 서버에..

Tistory

[HTTP] 웹 브라우저와 웹 렌더링

웹 브라우저 (Web Browser) - 사용자와 웹 서버 간의 HTTP 통신을 중개하며, 서버로부터 수신한 리소스를 시각화하는 소프트웨어 - 뛰어난 사용자 경험(UX) 제공 : 사용자는 브라우저 내부에서 어떠한 연산이 일어나는지 알지 못하며, 알 필요가 없음 # 웹 브라우저의 기본 동작 1. URL 분석 : 웹 브라우저의 주소 창에 입력된 주소 해석 2. DNS 요청 : 입력된 주소 탐색 DNS (Domain Name Server) : Host의 도메인 이름을 IP로 변환하거나, IP를 도메인 이름으로 변환함 3. HTTP를 통해 해당 서버에 요청 4. 서버의 HTTP 응답 수신 5. 리소스 다운로드 및 웹 렌더링 (HTML, CSS, JavaScript) 웹 렌더링 (Web Rendering) -..

Tistory

[JSP] Java Web 개발 환경 세팅

톰캣 (Tomcat) - Java Servlet과 JSP를 실행하기 위한 웹 애플리케이션 서버(WAS) 내에 존재하는 웹 컨테이너 - 클라이언트 요청에 대해 정적인/동적인 웹 페이지를 생성하여 제공함 - HTTP 프로토콜 사용 Eclipse EE 버전 다운로드 - Eclipse IDE for Enterprise Java and Web Developers # 다운 받은 후 설정 1) 상단 메뉴 [Windows] → [Preferences] → 'encoding' 검색 → 전부 'UTF-8'로 설정 2) 상단 메뉴 [Help] → [Eclipse Markgetplace] → 'web developer' 검색 → 'Eclipse Enterprise Java and Web Developer tool' 설치 톰캣..

Tistory

[HTTP] Web Server & WAS (Web Application Server)

웹 서버 (Web Server) - 클라이언트(웹 브라우저)에서 전송된 HTTP 메시지를 핸들함 - 정적 리소스만 처리할 수 있음 - 동적 리소스 제공이 필요한 경우, HTTP Request 객체를 WAS에게 전달함 ex) Apache 웹 애플리케이션 서버 (WAS, Web Application Server) - 비즈니스 로직을 처리하여 동적 컨텐츠를 제공하는 서버 - 정적 리소스도 처리할 수 있고, 동적 리소스도 처리할 수 있음 - WAS 컨테이너 안에는 Service, Controller 등의 객체가 포함되어 있음 ex) tomcat # 웹 프로그램 - 인터넷 서비스를 이용해서 서로 다른 구성요소들이 통신할 수 있는 프로그램 웹 프로그램의 동작 원리 1) 정적 리소스 (.html, .css, .j..

Tistory

[JSP] JSP와 Servlet(서블릿)

JSP (Java Server Pages) - 서버 측에서 동적인 웹 페이지를 생성하기 위한 기술 (Java + HTML) - 템플릿 엔진 - HTML 문서 안에 자바 코드를 포함시킬 수 있는 자바 기반의 서버 사이드 스크립트 언어 (서버 사이드 스크립트 언어 : 웹 서버 옆에서 작동하는 언어) # 동작 과정 1. 클라이언트가 웹 브라우저를 통해 JSP 페이지에 접속함 2. JSP 컨테이너(Tomcat)는 JSP 파일을 읽어 Java 코드로 변환하고, 컴파일해서 Servlet 클래스 파일 생성 3. 생성된 Servlet 클래스 파일을 실행해서 동적인 HTML 문서 생성해서 클라이언트에게 전송 Servlet (서블릿) - 웹 컨테이너 안에 있는 각각의 클래스(객체) - 웹 컨테이너 안에 실제 동작하는 객체..

Tistory

[JSP] URL Mapping

URL Mapping - 외부에서 요청하기 쉽도록 특정 문자를 이용해서 접근을 쉽게 할 수 있도록 하는 기술 # 과정 - 해당 요청에 맞는 적절한 java 파일을 선택함 → 동적 컴파일 : 실행 시점에 .class 파일을 만듦 → .obj 파일로 변환 → response Servlet의 URL Mapping - 클라이언트의 HTTP 요청을 처리할 서블릿을 선택하는 방법을 지정함 # 방법 1 : web.xml 파일에서 설정 HTML 삽입 미리보기할 수 없는 소스 # 방법 2 : 어노테이션으로 설정 (간편함) HTML 삽입 미리보기할 수 없는 소스

Tistory

[HTTP] 인코딩과 포트

인코딩 표준 # 인코딩 - 문자를 컴퓨터가 인식할 수 있는 숫자로 변환하는 과정 # 아스키코드 (ASCII) - 7비트 데이터에 대한 인코딩 표준 - 알파벳과 특수문자 등을 표현할 수 있음 - 초기에는 각 문자권마다 고유한 인코딩 표준을 사용함 → 이러한 방식은 인코딩 호환성이 좋지 않음 ex) 한글이 뛝씷낅 or 이런 식으로 깨지는 것은 인코딩이 호환되지 않아 발생하는 문제 → 해결 : 유니코드 # 유니코드 (Unicode) - 목표 : 모든 언어의 문자를 하나의 표준에 담음 - 하나의 문자를 최대 32개의 비트로 표현할 수 있음 포트 - 클라이언트가 서버의 포트(항구)에 접근해서 데이터를 내려 놓음 → 서버가 클라이언트에 보낼 데이터를 싣고 돌려보냄 # 네트워크 포트 (Network Port)..

Tistory

[HTTP] 통신 프로토콜 - HTTP와 HTTPS

# 요청(Request)과 응답(Response) - 클라이언트는 웹 서버에게 특정 리소스를 지정해서 제공해달라고 '요청' - 서버가 해당 요청에 대응되는 동작을 통해 클라이언트에서 리소스를 반환하며 '응답' → 프로토콜 : 이러한 규격화된 상호작용에 적용되는 '평등한' 약속(규약) (비교 : 인터페이스는 '강제성이 있는' 약속) ex) TCP/IP : 네트워크 통신의 기초가 되는 프로토콜 HTTP : 웹 애플리케이션이 사용하는 프로토콜 FTP : 파일을 주고받을 때 사용하는 프로토콜 HTTP (Hyper Text Transfer Protocol) - 서버와 클라이언트의 데이터 교환을 요청과 응답 형식으로 정의한 프로토콜 # 기본 메커니즘 - 클라이언트가 서버에게 요청하면 서버가 응답하는 것 : 웹 서버..

Tistory

[HTTP] 웹 서비스와 웹 리소스 (URI & URL)

웹 (Web) - 인터넷을 기반으로 구현된 서비스 중 HTTP를 이용하여 정보를 공유하는 서비스 - 인터넷 통신망을 활용하여 구현된 전 지구적 정보 공간 - HTTP : 웹 상에서 서로 통신을 하기 위해 정해둔 일종의 규칙 1) 웹 서버 (Web Server) : 웹에서 정보를 제공하는 주체 2) 웹 클라이언트 (Web Client) : 웹에서 정보를 요구하여 제공받는 이용자 웹 서비스 - 웹 상에서 제공되는 서비스 - 이용자의 요청을 해석/가공하여 필요한 정보/기능을 제공하는 능동형 서비스 1) 프론트엔드 (Front-end) : 이용자의 요청을 받는 부분 · 이용자에게 직접 보여지는 부분 · '웹 리소스'로 구성됨 : 페이지가 보여주는 정보들은 모두 웹 리소스에 명시되어 있음 ex) 글 내용, 텍스트..

Tistory

[Java] 래퍼 클래스 (Wrapper class)

# 관련 포스팅 - 기본 자료형 : https://young0105.tistory.com/7 래퍼 클래스 (Wrapper class) - 기본 자료형을 객체로 다루기 위해서 사용하는 클래스 기본 자료형 래퍼 클래스 byte Byte char Character int Integer float Float double Double boolean Boolean long Long short Short 박싱 (Boxing) - 기본 자료형 → 래퍼 클래스 변환 HTML 삽입 미리보기할 수 없는 소스 언박싱 (UnBoxing) - 래퍼 클래스 → 기본 자료형 변환 HTML 삽입 미리보기할 수 없는 소스 문자열을 다른 자료형으로 변환하기 HTML 삽입 미리보기할 수 없는 소스

Tistory

[Java] 람다 표현식 (Lambda expression)

함수형 프로그래밍 방식 (FP, Functional Programming) - 함수를 기반으로 하는 프로그래밍 입력 방식 - 매개변수로 전달받는 입력 외에는 외부 자료를 사용하지 않음 → 여러 자료가 동시에 수행되는 '병렬 처리' 가능 - 순수 함수를 구현하고 호출함 → 외부 자료에 부수적인 영향(side-effect)을 주지 않도록 구현함 - 컴파일러는 데이터 타입을 추론할 수 있음 → 코드를 간소화해서 사용하는 '람다 표현식' 등장 람다 표현식 (Lambda expression) HTML 삽입 미리보기할 수 없는 소스 # 람다식을 사용하기 위한 선행 조건 : 하나의 추상 메서드만 존재하는 인터페이스가 먼저 생성되어 있어야 함 (함수형 인터페이스) → 오류를 막기 위해 인터페이스에 @Functional..

Tistory

[HTTP] REST API 방식

확장 프로그램 Talend - https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm/related?hl=ko API - Application : 운영체제를 제외한 모든 프로그램 - Programming : 코드를 통해서 프로그램을 만드는 과정 - Interface : 표준, 규칙, 강제성이 있는 약속 REST API - 기존 : GET, POST 방식만 사용함 → POST는 추가/수정/삭제가 가능한데, 이를 컴퓨터가 구분할 수 있도록 하기 번거로워서 REST API 등장 ① GET : 정보 요청 (서버 자원 요청) · HTTP 메시지 body 부분에 데이터 X · 정보를 전송한 ..

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 7일차 (03/17)

7일차 # 상품 상세 페이지 - 상품 목록에서 사진을 누르면 상세 페이지 프레임 생성 → 나중에 판매량, 리뷰도 출력할 예정 # 장바구니 - 상세 페이지에서 구매 수량을 정해서 장바구니에 추가 가능 → 해당 상품이 이미 장바구니에 존재할 경우, 수량을 더 추가할 것인지 묻고 처리함 - 장바구니에는 최대 10 종류의 상품을 넣을 수 있음 - 오른쪽 상단의 '장바구니'를 누르면 해당 회원의 장바구니 조회 가능 → 해당 상품 옆에 있는 x 버튼을 누르면 장바구니에서 제거됨 # 주문하기 - 장바구니에서 '주문하기'를 누르면 현재 장바구니에 담겨 있는 물품들에 대한 주문 페이지 프레임 생성 - 현재 회원이 가진 적립금 사용 가능

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 8일차 (03/18)

8일차 # 주문하기 - 해당 회원의 총 주문 금액에 따라 회원 등급 변경 · 500,000원 이상 → Gold · 100,000원 이상 → Silver · 그 외 → Bronze (기본값) · 회원 등급에 따라 프레임의 왼쪽 상단 아이콘도 변함 - 주문될 때마다 해당 상품의 판매량(sales 컬럼) 갱신 → ProductListPanel에 해당 상품의 판매량도 표시하게 함 # 상품 검색 기능 추가 # 상품 상세 페이지 편의성 개선 - 수량 조정 버튼 추가

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 9일차 (03/19)

9일차 # 리뷰 작성 - 회원이 리뷰를 작성하려면 해당 상품에 대한 주문 이력이 있어야 하며, 이전에 리뷰를 작성한 이력이 없어야 함 - 작성 취소 버튼을 누르면 마이페이지로 되돌아감 - 왼쪽 상단의 상품 이름 콤보박스에는 리뷰를 작성할 수 있는 상품들의 이름만 표시됨 → 리뷰를 작성할 상품이 존재하지 않으면 자동으로 마이페이지로 되돌아감 - 리뷰 작성 완료 시, 상품 가격의 5%만큼의 적립금을 지급함 - 별점은 가장 오른쪽 별점 버튼을 누르면 거기까지 채워지며, 채워진 별 5개는 5점, 4개는 4점, ... 이런 식으로 반영됨 # 리뷰 조회 - 상품 상세 페이지에서 리뷰 별점/제목 확인 가능 (본문 조회는 아직 기능 구현 X) # 코드 리팩토링 - 각 패널/프레임에서 로그인된 memberDTO의 정보를..

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 10일차 (03/20) ~ 종료

10일차 # 리뷰 내용 조회 - 사진이 있는 리뷰와 없는 리뷰의 레이아웃을 다르게 설정함 - 상품 상세 페이지에서 최근 작성된 리뷰 7개까지 조회 가능 # 마이페이지 - 회원 등급 정보 - 회원 적립금 정보 - 주문 내역 조회 구현하고 싶었던 것들이 더 있었는데 (찜 목록 등) 이번 주부터 배우는 웹 개발 공부에 집중해야 할 것 같아서 10일차로 프로젝트를 마무리했다. 깃허브 주소 https://github.com/seoyounglee0105/ShopDB_GUI_Project

Tistory

[Java Code] Gson 클래스를 활용한 JSON Phasing

준비물 1) Gson 1. https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.9에서 jar 다운받기 2. 해당 프로젝트의 [Properties]로 들어가서 [Libraries] 탭 → [Modulepath] 선택 3. 오른쪽의 [Add External JARs...] → jar 파일 선택 4. 해당 프로젝트의 'module-info.java' 파일로 들어가서 아래 코드 입력 HTML 삽입 미리보기할 수 없는 소스 2) Json 연습용 데이터 사이트 : https://jsonplaceholder.typicode.com/users 사이트에서 데이터 읽어오기 HTML 삽입 미리보기할 수 없는 소스 JSON 데이터를 담을 클래스 설계 - JSON..

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 5일차 (03/15)

5일차 - ShopFrame의 좌측에 카테고리 메뉴 패널 생성 - 프로그램을 완전히 종료하는 Exit 버튼 생성 - Product 테이블 설계 + Category 테이블 설계 - Product 테이블의 DTO, DAO, IDAO, Service, Controller 클래스 설계 - Product 테이블과 ShopFrame 연결 · 한 페이지에 총 6개까지의 상품이 보이도록 함 (6일차부터는 7개 이상의 상품을 조회할 때 페이지가 나뉘도록 구현할 것) - mainPanel과 productListPanel 간의 전환은 setVisible 메서드를 활용함 실행

Tistory

[Java Code] 웹 페이지의 JSON을 가져와 DB 테이블에 삽입하기

album 테이블 더보기 HTML 삽입 미리보기할 수 없는 소스 DBHelper 더보기 HTML 삽입 미리보기할 수 없는 소스 AlbumDao 더보기 HTML 삽입 미리보기할 수 없는 소스 AlbumService 더보기 HTML 삽입 미리보기할 수 없는 소스 AlbumController 더보기 HTML 삽입 미리보기할 수 없는 소스 Main 더보기 HTML 삽입 미리보기할 수 없는 소스 실행 후 SQL 테이블 확인

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 6일차 (03/16)

6일차 - product 데이터 총 57개 삽입 - 선택된 카테고리/정렬기준에 폰트 색을 적용해서 가시성 UP - 조회 데이터가 7개 이상인 경우 다른 페이지가 생성되며, ▷ 버튼을 누르면 다음 페이지를 볼 수 있게 함 - 정렬 기능 추가 (가나다순, 신상품순, 판매량순) → 현재 판매량 컬럼은 모두 0인 상태라서 판매량순은 아직 의미있는 결과 X 실행

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 2일차 (03/12)

2일차 - 비밀번호 찾기 기능 구현 MemberDAO - 비밀번호 찾기 기능 더보기 // 비밀번호 찾기 기능 @Override public String memberPwFind(String id, String phoneNumber) { String resultPw = null; String sql = " SELECT * FROM member WHERE id = ? AND phone_number = ? "; try { pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); pstmt.setString(2, phoneNumber); rs = pstmt.executeQuery(); // 행이 존재한다면 while문으로 들어감 while (rs.next()) {..

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 3일차 (03/13)

3일차 - id 형식 힌트 추가 (글자 수 제한) → phoneNumber와 id의 힌트가 그대로 남아 있으면 회원 가입 실행 X - member 테이블의 phone_number를 UNIQUE 컬럼으로 변경 & 중복 확인 기능 추가 - 회원 가입 시 phoneNumber 형식 확인 → 처음 '-'의 위치는 인덱스 3번, 마지막 '-'의 위치는 인덱스 8번, 문자열 길이는 13 - id나 전화번호가 중복되었을 때에는 회원 가입 실행 X - 코드 리팩토링 · memberSignUp 메서드의 매개변수를 MemberDTO 객체로 변경 · memberLogin 메서드의 반환 값을 MemberDTO 객체로 변경 → 로그인 시 다음 프레임에 MemberDTO 객체를 전달할 예정 (비밀번호는 민감한 정보이므로 제외하고..

Tistory

[SQL] DCL - 사용자 생성과 권한 설정 (GRANT)

사용자 생성 CREATE USER '사용자명'@'호스트명' IDENTIFIED BY '비밀번호'; -- 홈에서 해당 사용자명으로 사용자 생성 가능 -- Username 항목에 사용자명 입력 - 사용자명 : 생성할 계정의 이름 - 호스트명 : 해당 계정이 접근 가능한 호스트 이름 (% : 모든 호스트) - 비밀번호 : 해당 계정의 비밀번호 사용자 호스트 정보 조회 USE mysql; SELECT user, host FROM user; - host : localhost → 현재 IP 주소에서만 접근 가능 - host : % → 모든 IP 주소에서 접근 가능 사용자 상세 권한 조회 -- N (기본값) : 해당 권한이 없음 -- Y : 해당 권한이 있음 USE mysql; SELECT * FROM user WH..

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 4일차 (03/14)

4일차 - MemberDAO 리팩토링 · 기존 : selectById, selectByPhoneNumber, selectByIdAndPassword, selectByIdAndPhoneNumber · 개선 : 메서드 오버로딩 → select (조건 1개), select (조건 2개) · 매개변수로 컬럼명(String)과 값을 받음 → 오타 방지를 위해 MemberService에 member 테이블의 컬럼명들을 String[]로 정의해둠 - LoginFrame 편의성 개선 · idTextField에서 Enter 키를 누르면 pwField로 포커스가 옮겨짐 · pwField에서 Enter 키를 누르면 loginButton이 눌러짐 - shopFrame 상단 패널 설계 · 로그인한 회원의 DTO 객체 정보를 받..

Tistory

[Java] JSON

JSON (JavaScript Object Notation, 제이슨) - Key-Value 쌍 or 배열 형태의 데이터를 텍스트(문자열) 형식으로 표현하는 것 → Java에서 JSON은 '특정한 구조(약속)가 있는 문자열' - 경량의 데이터 교환 형식 → 서버와 클라이언트 간의 교류에서 자주 사용됨 - 사람과 기계 모두 이해하기 쉬우며 용량이 적음 → JSON이 XML을 대체해서 데이터 전송에 많이 사용됨 - JSON 문서 형식은 자바스크립트 객체의 형식을 기반으로 만들어짐 → 자바스크립트를 이용해서 JSON 형식의 문서를 쉽게 자바스크립트 객체로 변환할 수 있음 - Key에는 항상 쌍따옴표("")를 사용함 # JSON 데이터 타입 - String - number - boolean - object (객체..

Tistory

[SQL] DML - 데이터 조회 (SELECT) & 집계 함수

데이터 조회 : SELECT 문 SELECT [DISTINCT] 컬럼명1 [AS 별칭], 컬럼명2, ... -- 전체 조회 : SELECT * FROM 테이블명 [AS 별칭] [JOIN 구문] [WHERE 조건] -- 조건에 맞는 데이터만 그룹화 [GROUP BY 컬럼명1, 컬럼명2, ...] [HAVING 그룹조건] [ORDER BY 컬럼명1 [ASC | DESC], 컬럼명2, ...] [LIMIT 숫자] | [LIMIT 숫자a 숫자b]; -- 여러 테이블 조회 시, '테이블명.컬럼명'으로 입력해야 정확함 # [DISTINCT] - 선택한 컬럼들에 대해서 중복되는 값을 가진 레코드들을 제거함 # [WHERE] - WHERE 조건절 설명 : https://young0105.tistory.com/117 #..

Tistory

[Java] Statement와 PreparedStatemet

- 문자열들을 SQL로 변경하거나, SQL 문을 실행시켜주는 인터페이스 - SQL 문 실행 시 · SELECT 문은 executeQuery 메서드 사용 → ResultSet(결과 집합) 반환 · DML 문은 executeUpdate 메서드 사용 → int(변경이 적용된 레코드 수) 반환 - DB와 Java 연동 코드 : https://young0105.tistory.com/126 Statement // 쿼리문 작성 (마지막에 공백을 하나 입력해야 오류 위험 감소) String sqlFormat = "SELECT * FROM 테이블명 WHERE 컬럼명1 = '%S' "; String sql = String.format(sqlFormat, targetValue)); // conn : Connection 객체..

Tistory

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 1일차 (03/10)

개인 프로젝트 주제 Swing을 이용하여 반려동물 용품 쇼핑몰 DB 접근 프로그램을 GUI로 구현하기 프로젝트 기간 시간이 날 때마다 비정기적으로 진행할 예정 깃허브 주소 https://github.com/seoyounglee0105/ShopDB_GUI_Project 개발 계획 1. 로그인 프레임 - 회원가입 버튼 - 비밀번호 찾기 버튼 2. 회원가입 프레임 - 아이디 중복 확인 기능 - 항목 형식 힌트 (글자 수 제한 등) - member 테이블에 회원 정보를 INSERT하는 기능 - 필수 값 중 입력되지 않은 값이 있으면 회원가입 거부 3. 비밀번호 찾기 프레임 4. 마이페이지 프레임 - 정보 수정 버튼 (비밀번호를 다시 입력받아서 본인 확인) - 주문 내역 - 쿠폰함 - 장바구니 5. 쇼핑몰 홈 프..

Tistory

[Java Swing] getText()를 사용할 수 없는 JPasswordField에서 값 가져오기

# JPasswordField는 다른 텍스트 박스와 달리, getText()로 문자열을 가져올 수 없음 - JPasswordFied의 getPassword() 메서드는 char[] 값을 반환함 → String 타입으로 변환해주어야 함 char[] pwChar = pwField.getPassword(); String pw = new String(pwChar); // 코드 간소화 String pw = new String(pwField.getPassword());

Tistory

[SQL] 함수 (숫자, 문자열, 날짜/시간)

숫자 함수 함수 기능 CEIL(숫자, [n]) n이 명시되지 않았다면 정수 자리까지 올림 n이 명시되었다면 소수점 n번째 자리까지 올림 ROUND(숫자, [n]) n이 명시되지 않았다면 정수 자리까지 반올림 n이 명시되었다면 소수점 n번째 자리까지 반올림 FLOOR(숫자, [n]) n이 명시되지 않았다면 정수 자리까지 내림 n이 명시되었다면 소수점 n번째 자리까지 내림 ABS(숫자) 절댓값으로 변환 FORMAT(실수, n) 실수를 소수점 n번째 자리까지만 출력 SIGN(숫자) 음수면 -1 반환 0이면 0 반환 양수면 1 반환 - 집계 함수 : https://young0105.tistory.com/127 문자열 함수 함수 기능 CHAR_LENGTH('문자열') 문자열 길이 (공백 포함) LENGTH('문자..

Tistory

[Java] 명칭 표기법 (카멜, 파스칼, 스네이크, 헝가리안)

# 카멜 표기법 (Camel Case) - 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫 글자는 대문자로 지정함 - Java에서 변수명을 표기할 때 주로 사용됨 ex) inputFunction # 파스칼 표기법 (Pascal Case) - 식별자 표기 시에 여러 단어가 이어지면 각 단어의 첫 글자를 대문자로 지정함 - Java에서 클래스명을 표기할 때 주로 사용됨 ex) InputFunction # 스네이크 표기법 (Snake Case) - 식별자 표기 시에 여러 단어가 이어지면 단어 사이에 언더바(‘_’)를 넣음 - Java에서 상수명을 표기할 때 주로 사용됨 (+ SQL에서는 변수명 표기 시 사용) ex) input_function # 헝가리안 표기법 (Hungarian Ca..

Tistory

[Java Code] Java와 MySQL 데이터베이스 연결하기

# 사전 준비 1. https://dev.mysql.com/downloads/file/?id=515796 에서 파일 다운받기 2. 프로젝트 우클릭 → [Properties] 3. 아래 경로로 들어가서 다운받은 파일 내에 있는 .jar 파일을 추가하기 # 필요한 정보 1) MySQL 계정 이름, 비밀번호 2) URL 주소 (포트번호, DB명 필요) # 사용된 인터페이스 1) Connection 2) Statement 3) ResultSet 코드 # DB와 연결하는 클래스 설계 - format 메서드 사용법 : https://young0105.tistory.com/64 public class DBClient { // 변하지 않는 정보들은 상수로 선언 private static final String DB_H..

Tistory

[Java] DTO/VO, DAO

DTO & VO # DTO (Data Transfer Object, 데이터 전송 객체) - 계층 간 데이터 교환을 하기 위해 사용하는 객체 - request와 response에서 주고받는 객체 - 로직을 가지지 않음 (getter & setter 메서드, 멤버변수, 생성자만 가짐) - 가변 - DB의 각 컬럼을 DTO의 각 멤버변수로 매핑함 # VO (Value Object, 값 객체) - 데이터 전송과 저장을 목적으로 사용되는 객체 - 불변 (setter 메서드 X) - read-only (읽기만 가능) DAO (Data Access Object) - 데이터에 접근하기 위한 객체

Tistory

[Java Code] Java로 SQL CRUD 구현하기

- DTO, DAO 설명 : https://young0105.tistory.com/125 # 사용된 인터페이스 1) Connection 2) Statement 3) ResultSet 코드 # DTO public class BuyDTO { // 테이블 구조 확인하고 멤버변수 선언하기 private String userName; private String productName; private int price; private int amount; // 생성자 public BuyDTO(String userName, String productName, int price, int amount) { this.userName = userName; this.productName = productName; this.pr..

Tistory

[SQL] 집계 함수

집계 함수 - GROUP BY가 지정되지 않았을 경우, 조회되는 모든 데이터에 대한 결과를 출력함 - GROUP BY가 지정되어 있을 경우, 그룹에 대한 결과를 출력함 - NULL 값을 가진 레코드를 제외하고 수행함 - 컬럼명에 'DISTINCT'를 설정하면 중복되지 않은 레코드에 대해서만 수행함 집계 함수 설명 COUNT(*) COUNT([DISTINCT] 컬럼명) 레코드 수 (* 또는 NOT NULL 컬럼에 대해서 사용하는 것을 권장) SUM(*) SUM([DISTINCT] 컬럼명) 합계 AVG(*) AVG([DISTINCT] 컬럼명) 평균 MAX(*) MAX([DISTINCT] 컬럼명) 최댓값 MIN(*) MIN([DISTINCT] 컬럼명) 최솟값 STD(*) STD([DISTINCT] 컬럼명) 표..

Tistory

[SQL] DML - 데이터 삽입/변경/삭제 (INSERT, UPDATE, DELETE)

DML (데이터 조작어, Data Manipulation Language) - SELECT, INSERT, UPDATE, DELETE 데이터 삽입 : INSERT 문 - 포지셔널 : 컬럼명과 삽입할 값의 순서를 동일하게 할 것 - 컬럼명과 값은 일대일 대응해야 함 → 컬럼 수보다 값을 적게 설정하면 오류 # 기본 형식 INSERT INTO 테이블명(컬럼명1, 컬럼명2, ..., 컬럼명n) VALUES (값1, 값2, ..., 값n); -- VALUE도 무관 - 제약조건이 NOT NULL이 아니라면, 해당 컬럼을 제외하고 작성 가능 - 값 부분에 DEFAULT를 입력하면 해당 컬럼에 저장된 DEFAULT 값으로 입력됨 - DEFAULT가 설정되어 있는 컬럼은 선언 시 생략하면 자동으로 DEFAULT 값이 ..

Tistory

[SQL] WHERE 조건절 & 연산자

WHERE 조건절 SELECT * FROM 테이블명 WHERE 조건식; - SELECT, UPDATE, DELETE 구문의 대상이 되는 조건을 지정함 - 구성 1) 연산자 2) 피연산자 : 컬럼명, 상수값, 서브쿼리 등 - 논리 연산자를 이용해서 여러 조건식을 조합해서 사용할 수 있음 비교 연산자 A = B A와 B는 같다 A != B 또는 A B A와 B는 다르다 A < B A는 B보다 작다 A B A는 B보다 크다 A >= B A가 B보다 크거나, A와 B가 같다 논리 연산자 (조건식1) AND (조건식2) 조건식 둘 다 TRUE면 TRUE 반환 (조건식1) OR (조건식2) 조건식 하나 이상이 TRUE면 TRUE 반환 NOT (조건식) BOOLEAN 값이 조건식 결과와 반대로 반환 SQL 연산자 컬..

Tistory

[SQL] 인덱스

인덱스 (Index, 색인) - DB에서 데이터 검색 속도를 향상시키기 위해 사용하는 구조 - PRIMARY KEY, UNIQUE 선언 시 자동으로 인덱스가 생성됨 # 장점 - 특정 컬럼에 대해 정렬된 값을 가짐 → 해당 컬럼의 값을 이용하여 검색을 수행할 때, 빠르게 검색 가능 - 대량의 데이터를 처리할 때 효율적임 (인덱스가 없다면 풀 스캔 : 하나하나 스캔하며 검색해서 시간이 오래 걸림) # 단점 - DB 내에 별도로 저장되어 있음 → 추가적인 디스크 공간을 필요로 함 - 인덱스를 생성할 때 데이터를 정렬하는 작업을 필요로 함 → 인덱스 생성/수정 시 시간이 소요될 수 있음 ⇒ 필요한 경우에만 적절하게 설계해서 사용할 것 테이블 생성 시점에 인덱스 추가 CREATE TABLE 테이블명 ( 컬럼명1 ..

Tistory

[SQL] 기본키(PK)와 외래키(FK)

키 (Key, 식별자) - 레코드를 검색/정렬할 때, 다른 레코드들과 구별할 수 있는 기준이 되는 속성 # 키의 특성 1) 유일성 : 식별자에 의해 모든 레코드들이 유일하게 구분됨 2) 최소성 : 꼭 필요로 하는 최소한의 속성만으로 식별자가 구성됨 키의 종류 # 기본키 (PK, Primary Key) - 테이블의 각 레코드들을 고유하게 식별하는 컬럼 (or 컬럼 집합) - NULL 값을 허용하지 않음 → 자동으로 NOT NULL로 설정됨 - 기본키에 대한 인덱스는 자동으로 추가됨 - CREATE 문에서 설정하기 : https://young0105.tistory.com/114 # 후보키 (Candidate Key) - 테이블에서 각 레코드들을 구별하는 데 기준이 될 수 있는 컬럼 - 유일성과 최소성을 만족..

Tistory

[SQL] 관계 차수

관계 차수 # 1:1 관계 - 두 개의 테이블 간에 각각 하나의 레코드만 매칭되는 관계 - 주로 기본키와 외래키를 연결해서 관계 설정 - 두 테이블 중 하나의 테이블에서만 외래키를 가질 수 있음 - 1:1 관계를 보조적인 테이블로 활용할 수 있음 - 1:1 관계를 사용하는 상황 1) 테이블의 컬럼 중 일부가 NULL 값을 가지는 경우 2) 특정 컬럼 값이 자주 변경되지 않는 경우 → 1:1 관계를 사용하면 테이블의 정규화를 유지하면서도 데이터를 보다 효율적으로 관리 가능 # 정규화 (추후 따로 포스팅 예정) : 데이터베이스 설계에서, 가능한 중복을 제거하고 데이터를 구조화하는 프로세스 → 데이터의 일관성 & 유지보수성 & 검색 속도 개선 # 1:N 관계 (= N:1 관계) - 한 테이블의 레코드가 다른 ..

Tistory

[SQL] 조인 (JOIN)

조인 (JOIN) - 두 개의 테이블을 연결하여 데이터를 검색하는 방법 # 다중 조인 SELECT * FROM 테이블1 LEFT JOIN 테이블2 ON 테이블1.Key = 테이블2.Key LEFT JOIN 테이블3 ON 테이블1.Key = 테이블3.Key; 내부 조인 (자연 조인) - 두 테이블에서 일치하는 레코드만을 출력함 (교집합) SELECT * FROM 기준테이블 AS 'a' -- 'a'라는 별칭 지정 INNER JOIN 대상테이블 AS 'b' -- 'b'라는 별칭 지정 ON a.Key = b.Key -- 주로 기본키, 외래키로 연결함 [WHERE 조건]; 외부 조인 # LEFT JOIN - FROM 절의 테이블에 있는 모든 데이터 + JOIN 절의 테이블에 있는 동일한 데이터 SELECT * F..

Tistory

[SQL] 자료형 (Data type)

숫자형 # 정수 - INT - BIGINT # 실수 - FLOAT(n) : 길이가 n인 부동 소수점 실수 - DOUBLE - DECIMAL(a, b) : 전체 자릿수가 a이고, 그 중 소수점 자릿수가 b인 실수 → 정수 자릿수가 (a-b)보다 큰 데이터를 삽입하면 오류 발생 문자형 # 길이 제한 O - VARCHAR(n) : 0 ~ n 크기의 가변 길이 문자열 → n보다 짧은 길이로 입력하면, 그만큼의 메모리 공간만 차지함 - CHAR(n) : n 크기의 고정 길이 문자열 → n보다 짧은 길이로 입력할 경우, 공백으로 채워짐 → 항상 n만큼의 메모리 공간을 차지함 # 길이 제한 X - TEXT - BLOB 날짜/시간형 · 날짜와 관련된 연산 수행 가능 # 날짜만 - DATE · 다양한 형식 가능 (연도는..

Tistory

[SQL] MySQL 단축키

- 해당 코드 실행 - [Ctrl] + [Enter] - 전체 코드 실행 - [Ctrl] + [Shift] + [Enter] - 코드 삭제 - [Ctrl] + [L] - 코드 복사 - [Ctrl] + [D] - 코드 힌트 - [Ctrl] + [Space] - 주석 처리 - [Ctrl] + [/] - 코드 자동 정렬 - [Ctrl] + [B]

Tistory

[SQL] MySQL 초기 설정 (안전 모드 해제, 코드 힌트 대문자로 설정)

안전 모드 해제 - 미설정 시, DELETE나 UPDATE 등의 구문이 미작동할 수 있음 - 체크 해제하기 코드 힌트 대문자로 설정 - 미설정 시, 예약어의 코드 힌트가 소문자로 뜸 (SQL 예약어는 대문자로 작성하는 것이 권장됨) - 체크하기

Tistory

[SQL] 기본 명령어 (DB 생성 및 삭제, 테이블 구조 조회 등)

# 데이터베이스 생성 - 생성된 DB는 MySQL 서버에 저장됨 - DB 내에서 테이블을 생성하고 데이터를 저장할 수 있음 - DB 이름이 중복될 경우 오류 발생 CREATE DATABASE DB명; # 데이터베이스 선택 - 해당 DB를 사용하겠다고 명시하는 것 USE DB명; -- 또는 스키마에서 해당 DB를 더블 클릭 # 데이터베이스 삭제 DROP DATABASE DB명; # 데이터베이스 목록 조회 SHOW DATABASES; # 테이블 목록 조회 SHOW TABLES; # 테이블 구조 조회 (컬럼별 제약조건 확인) DESC 테이블명; - Field : 컬럼명 - Type : 자료형 - Null 1) YES (NULL 가능) 2) NO (NULL 불가능 == NOT NULL) - Key 1) PRI ..

Tistory

[SQL] DDL - 테이블 생성 (CREATE)

DDL (데이터 정의어, Data Definition Language) - 테이블 등 데이터 구조를 정의하는 데 사용하는 명령어 - CREATE, ALTER, DROP, RENAME 테이블 생성 HTML 삽입 미리보기할 수 없는 소스 # [NOT NULL] - 해당 컬럼에서 NULL 값을 허용하지 않음 # [DEFAULT 기본값] - 레코드 삽입 시 해당 컬럼의 값을 입력하지 않았을 때 적용되는 기본값을 지정함 - 컬럼의 자료형에 맞게 기본값을 입력할 것 ex) VARCHAR(n) → '미정' - 자동으로 현재 날짜/시간이 삽입되도록 하기 : 컬럼명 TIMESTAMP DEFAULT CURRENT_TIMESTAMP # [PRIMARY KEY (컬럼명)] - 해당 컬럼 (or 컬럼 조합)을 각 레코드를 식별..

Tistory

[SQL] DDL - 테이블 변경/삭제 (ALTER, RENAME, DROP, TRUNCATE)

테이블 구조 변경 : ALTER 문 # 기본키 추가 ALTER TABLE 테이블명 ADD PRIMARY KEY(컬럼명); # 기존 컬럼에 대한 정의 변경 (제약조건 변경) ALTER TABLE 테이블명 MODIFY [COLUMN] 컬럼명 자료형 [제약조건1] [제약조건2] ...; # 기존 컬럼의 자료형 변경 ALTER TABLE 테이블명 MODIFY [COLUMN] 컬럼명 새_자료형; # 기존 컬럼의 이름 변경 ALTER TABLE 테이블명 RENAME COLUMN 기존_컬럼명 TO 새_컬럼명; # 새로운 컬럼 추가 -- 테이블의 마지막 컬럼으로 추가됨 ALTER TABLE 테이블명 ADD [COLUMN] 컬럼명 자료형 [제약조건]; # 기존 컬럼 삭제 ALTER TABLE 테이블명 DROP [COLU..

Tistory

[Java Code] 입출력 스트림 - 예제 모음

엔터 키를 누를 때까지 반복해서 값을 입력받기 // 엔터 키를 누를 때까지 반복해서 값을 입력받기 (엔터 키 = '\n') int i; while ( (i = System.in.read()) != '\n' ) { System.out.print((char) i); } 특정 파일의 모든 글자 읽어오기 // 특정 txt 파일의 모든 글자 읽기 (엔터 키, 공백도 포함) FileInputStream fis변수명 = null; try { // 여기 입력하는 파일은 이미 존재하는 파일 fis변수명 = new FileInputStream("경로/파일명.txt"); // 한글이 포함되었을 경우, 문자 스트림 FileReader 활용 int i; // i는 데이터를 1byte씩 가져올 임의의 변수명 while ( (i ..

Tistory

[Java] 입출력 스트림 (I/O Stream)

I/O Stream (입출력 스트림) - I/O : 데이터를 읽고 쓰는 작업 - 스트림 : 네트워크에서의 자료 흐름이 물의 흐름과 같다는 비유에서 유래 - 다양한 입출력 장치에 독립적으로 일관성 있는 입출력을 제공함 - 입출력 장치 ex) 파일 디스크, 키보드, 마우스, 네트워크, 메모리 등 - 한 방향으로만 움직임 입출력 스트림의 구분 # 대상 기준 1) 입력 스트림 (InputStream, Reader, ...) 2) 출력 스트림 (OutputStream, Writer, ...) # 자료의 종류 기준 1) 바이트 단위 스트림 (InputStream, OutputStream, ...) 2) 문자 단위 스트림 (Reader, Writer, ...) # 기능 기준 1) 기반 스트림 2) 보조 스트림 (Bu..

Tistory

[Java] 소켓 통신

소켓 통신 - 양 끝단에 포트 번호를 달아서, 통신을 통해 데이터를 주고 받는 것 - 커넥션 풀 (connection pool) : 소켓은 한 번 연결되면 지속적으로 연결되어 있음 → 인증 정보가 필요하지 않음 - 서버 측과 클라이언트 측은 코드로 연결된 것이 아니라, 통신을 통해 연결되는 것 - 양방향 통신 예제 : https://young0105.tistory.com/107 # 서버 - 서비스를 제공하는 자 - 소켓 2개를 필요로 함 1) ServerSocket : 클라이언트의 연결만 받는 소켓 (데이터 주고 받기 X) 2) Socket : 실제로 통신하며 데이터를 주고 받는 소켓 # 클라이언트 - 서비스를 요청하는 자 - 소켓 1개를 필요로 함 1) Socket : 실제로 통신하며 데이터를 주고 받..

Tistory

[Java Code] 소켓 양방향 통신 구현

- 서버와 클라이언트는 서로 키보드로 입력한 메세지를 주고 받을 수 있음 서버 측 코드 public class ServerTest { // 클라이언트를 연결받는 소켓 ServerSocket serverSocket; // 실제 통신을 담당할 소켓 Socket socket; // 키보드 담당 입력 스트림 BufferedReader keyboardReader; // 소켓 담당 입력 스트림 BufferedReader socketReader; // 소켓 담당 출력 스트림 BufferedWriter socketWriter; public ServerTest() { initData(); } private void initData() { try { System.out.println("서버 실행"); // 서버 소켓 생성..

Tistory

[SQL] 개요

데이터베이스 관리 시스템 (DBMS) - 데이터베이스를 관리/운영하는 소프트웨어 - 하나의 DBMS에는 여러 개의 DB가 존재할 수 있음 ex) MySQL, Oracle, MariaDB, ... # 데이터베이스 (DB) - 대용량의 데이터 집합을 체계적으로 구성한 것 - 하나의 DB에는 여러 개의 테이블이 존재할 수 있음 DBMS의 특징 1) 데이터 무결성 - 동일한 내용에 대해 서로 다른 데이터가 저장되는 것을 허용하지 않는 성질 - 데이터의 오류 X 2) 데이터 독립성 - DB 크기나 데이터 파일의 저장소를 변경하더라도 기존에 작성된 응용프로그램에는 영향 X → 의존적 관계가 아닌 독립적 관계 3) 보안 - DB 내 데이터에는 접근이 허가된 사람만 접근할 수 있어야 함 - 접근할 때에도 사용자의 계정..

Tistory

[개발 일지] Strikers 1945 게임 구현 프로젝트 2일차 (02/24)

2일차에 구현한 것 1. Enemy 클래스를 상속받는 EnemyUnit1 ~ 4 클래스 생성 (내가 맡은 건 3 ~ 4번) 2. 적군을 소환하는 패턴 각각을 메서드로 구현 중 3. Timer 클래스를 이용해 지연시간 후에 메서드를 호출하는 방법과, 일정 주기로 메서드를 반복해서 호출하는 방법을 익힘 - 나중에 이걸 활용해서 프레임 생성자에 적군 소환 흐름을 만들 예정

Tistory

[개발 일지] Strikers 1945 게임 구현 프로젝트 3일차 (02/25)

3일차에 구현한 것 1. 유닛 종류별로 이동 가능한 범위 조정 2. 유닛 종류별로 총알을 맞는 범위 조정 3. 유닛 종류별로 총알을 쏘는 위치 조정 4. 유닛 종류별로 적군과 플레이어가 접촉했다고 판단하는 범위 조정 (접촉하면 대미지를 입음) 5. 타이머를 시간 기록 대신 제한 시간 형식으로 (00:00이 되면 게임오버 되게끔 할 것) 별거는 아닌데 하나하나 보느라 시간이 오래 걸렸다. 다음은 게임 오버 화면이랑 게임 클리어 문구를 간단하게라도 만들어야 할 것 같다. 그리고 이제 만든 유닛들을 메인 프레임에 합치고 호환 가능하게 다른 파일들도 수정해야 한다.

Tistory

[개발 일지] Strikers 1945 게임 구현 프로젝트 4일차 (02/26)

4일차의 목표 - 생성된 적군들을 메인 프레임의 리스트에 추가하는 방식으로 관리 - 다른 클래스들도 그에 호환되도록 코드 전부 수정 4일차에 구현한 것 1. 메인 프레임의 멤버 변수 추가 ArrayList enemyList = new ArrayList(); // 아이템도 적군이 생성될 때마다 생성되므로 똑같이 리스트로 정의해둠 ArrayList itemList = new ArrayList(); 2. Enemy 객체들이 각각 자신이 enemyList에 생성된 순서 인덱스를 멤버 변수로 갖도록 함 // 부모 클래스의 멤버 변수 protected static int enemyCount; // 생성된 적군의 총 숫자 protected int myIndex // 자신이 생성된 순서 // 자식 클래스의 생성자 pu..

Tistory

[개발 일지] Strikers 1945 게임 구현 프로젝트 5일차 (02/27) ~ 종료

5일차에 구현한 것 앞선 일차들에서 밑작업은 모두 끝내 두었다. 그래서 5일차에 Timer와 TimerTask를 이용해서 지연시간 후에 적군 소환 메서드가 호출되게끔 하면 게임을 완성할 수 있었다. 1. 적군 소환 흐름 구현 // 적군 소환 흐름 public void createEnemy() { // 1번째 적군 소환 unit2ArrayLeftMove(); Timer timer1 = new Timer(); long delay1 = 3000L; // 2번째 적군 소환 TimerTask task1 = new TimerTask() { @Override public void run() { unit3OneMove(); } }; timer1.schedule(task1, delay1); // 3번째 적군 소환 lon..

Tistory

[Java] 자료 구조

자료 구조 (Data Structure) - 프로그램에서 사용할 많은 데이터를 메모리 상에서 관리하는 여러 구현 방법 - 성능 좋은 알고리즘의 기반 : 효율적인 자료 구조 - 자료의 효율적인 관리는 프로그램의 수행 속도와 밀접한 관련이 있음 - 프로그램에 맞는 최적의 자료 구조를 활용해야 함 → 여러 자료 구조에 대한 이해 중요 선형 자료 구조 - 한 줄로 자료를 관리하는 자료 구조 # 배열 (Array) - 정해진 크기의 메모리를 먼저 할당받아 사용해야 함 : 값자료형[] 배열명 = new 값자료형[크기]; - 자료의 물리적 위치와 논리적 위치가 같음 # 연결 리스트 (LinkedList) - 자료가 추가될 때마다 메모리를 할당받음 - 자료는 링크로 연결됨 - 배열과의 차이점 : 자료의 물리적 위치와 ..

Tistory

[Java] 컬렉션 프레임워크 (List, Set, Map)

컬렉션 프레임워크 (Collection Framework) - 프로그램 구현에 필요한 자료 구조를 구현해 놓은 JDK 라이브러리 - 개발에 소요된 시간을 절약하면서 최적화된 알고리즘을 사용할 수 있음 List 계열 인터페이스 - 객체를 순서에 따라 저장함 (인덱스로 접근 가능) - 중복 값 가능 ArrayList 클래스 // 타입 미설정 시 (Object로 선언) ArrayList 리스트명 = new ArrayList(); // 타입 설정 시 (제네릭 사용) ArrayList 리스트명 = new ArrayList(); // ex) 정수 자료형이 들어가는 ArrayList // ArrayList list = new ArrayList(); // 선언과 동시에 값 추가 ArrayList 리스트명 = new A..

Tistory

[Java Code] Map - 전화번호부 프로그램 구현

코드 # 기능 정의 파일 public class PhoneBook { // 이름 전화번호 HashMap phoneBook = new HashMap(); static Scanner scanner = new Scanner(System.in); public void sampleData() { phoneBook.put("김철수", "010-1234-1234"); phoneBook.put("이영수", "010-5678-5678"); phoneBook.put("박민수", "010-9876-9876"); } // 저장 기능 public void save() { String phoneName = null; // 입력받을 이름 String phoneNumber = null; // 입력받을 전화번호 System.out.p..

Tistory

[개발 일지] Strikers 1945 게임 구현 프로젝트 0일차 (02/22)

팀 프로젝트 주제 Swing을 이용하여 Strikers 1945 게임 구현하기 프로젝트 기간 2023/02/23 ~ 2023/02/27 첫 팀 프로젝트를 진행하게 되었다. 주제는 Java Swing을 이용해 GUI 게임을 구현하는 것이다. 우리 팀은 Strikers 1945라는 비행기 게임을 만들게 되었다. 원래 프로젝트 기간은 23일부터인데, 주제를 일찍 정해서 남는 시간동안 클래스 틀을 조금 만들어보기로 했다. 우선 주요 클래스는 AirlineFrame (메인프레임), Player, Enemy, Item, Bullet 정도. 나는 적군(Enemy) 클래스를 중점적으로 맡아서 설계하기로 했다. 적군 비행기의 종류에 따라 스텟을 다르게 설정하기, 적군을 한 번에 여러 개씩 생성하기 등등 고려할 것이 많았..

Tistory

[개발 일지] Strikers 1945 게임 구현 프로젝트 1일차 (02/23)

1일차에 구현한 것 1. enemy[] 배열을 만들어서 여러 객체를 한 번에 소환하기 - 성공했으나, 일단 EnemyUnit 각 클래스들을 만들기 전까지는 1개만 소환해서 테스트 - 컬렉션 프레임워크에서 List는 배열과 다르게 크기를 지정하지 않아도 되니까 배열 말고 List를 사용하는 게 나을 수도? 2. Timer 클래스를 활용해서 오른쪽 위에 게임 진행 시간을 보이게 함 - 로딩 화면에서는 시간이 흐르지 않고, 게임 진행 중에만 시간이 흐름 (메인 프레임 클래스의 static 변수인 'gameState'의 값에 따라) - 나중에 게임 종료 화면을 만들면 시간 기록을 보이게 할 예정 - 타이머 디자인 바꾸기 3. up(), down() 메서드 사용 - 기본적으로 down()하면서 양옆으로 움직이며,..

Tistory

[Java Code] 윤년 계산기 구현

- 4의 배수인 해는 윤년임 - 4의 배수이면서 100의 배수인 해는 윤년이 아님 → 4의 배수이면서 100의 배수가 아니어야 윤년임 - 100의 배수이면서 400의 배수인 해는 윤년임 코드 # 윤년 계산 기능 파일 public class LeapYear { // 메서드 public boolean isLeapYear(int year) { // 아래 if 문의 조건에 걸리지 않는다면 false로 유지됨 boolean result = false; if (year % 4 == 0) { if (year % 100 != 0) { result = true; // year % 4 == 0이고 year % 100 == 0인 값은 else로 빠짐 } else { if (year % 400 == 0) { result = ..

Tistory

[Java] 쓰레드 (Thread)

쓰레드 (Thread) - 하나의 프로세스 안에서 실제 작업을 수행하는 작업 단위 (작업자) - 각각 자신만의 작업 공간을 가짐 (Context 영역) - 코드를 실행할 때 사용하는 main 함수는 '메인 쓰레드'임 - 쓰레드별로 작업 시간이 다를 수 있음 # 프로세스 (Process) - 프로그램이 실행되면 운영체제로부터 메모리를 할당받아, '프로세스 상태'가 됨 - 주기억장치에 올라간 상태 - 하나의 프로세스는 여러 개의 쓰레드를 가질 수 있음 Thread의 상태 변화 - 작업을 잠깐 쉬면 'Not Runnable' 상태가 됨 - 작업이 완전히 종료되면 'Dead' 상태가 됨 Thread의 기본 명령어 # 쓰레드에게 작업을 시작하도록 명령 - 쓰레드명.start(); - 작업을 시작하면 쓰레드는 ru..

Tistory

[Java] Thread - 은행 계좌 입출금에 대한 동기화 기능 구현

코드 # 클래스 파일 public class BankAccount { int money = 100_000; public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } // 입금 // synchronized 메서드 public synchronized void saveMoney(int money) { int currentMoney = getMoney(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } setMoney(currentMoney + money); System.out.println("입..

Tistory

[Java] 로또 게임 구현 중 NullPointerException 발생

에러 발생 코드 public class LottoFrameError extends JFrame implements ActionListener { JButton button; int[] lotto; // 중략 // @Override public void actionPerformed(ActionEvent e) { System.out.println("게임 시작 ~"); LottoRandomNumberBefore lottoRandomNumber = new LottoRandomNumberBefore(); // 객체 생성 lottoRandomNumber.lottoNumber(); // 번호 생성 lotto = lottoRandomNumber.getLotto(); // 로또 번호 멤버 변수 가져오기 // 콘솔에 번호..

Tistory

[Java Code] 로또 게임 구현

- 1 ~ 45 범위의 랜덤한 정수 6개 코드 # 랜덤 정수 추출 기능 파일 public class LottoRandomNumber { public int[] lottoNumber() { // 메서드에서 리턴할 것이므로 멤버변수로 선언하지 않아도 됨 int[] lotto = new int[6]; // 한 곳에서만 사용된다면 지역변수로 선언 Random r = new Random(); for (int i = 0; i < lotto.length; i++) { // 1 ~ 45 범위의 정수 난수를 생성해서 배열에 넣기 lotto[i] = r.nextInt(45) + 1; // 중복 제거 for (int j = 0; j < i; j++) { if (lotto[i] == lotto[j]) { i--; // 이번 ..

Tistory

[Java] 제네릭 (Generic)

제네릭 프로그래밍 - 다양한 자료형이 적용될 수 있는 클래스를 만드는 것 - 선언 시 클래스의 자료형을 명시하지 않음 → 추후 해당 클래스를 인스턴스화(new)할 때 자료형이 정해짐 (.class 파일도 이 시점에 생성됨) ⇒ 변수의 이름과 기능이 동일하면서, 자료형만 달라지는 변수들을 사용할 때 고려 - 컬렉션 프레임워크에서 많이 사용됨 : 알고리즘을 활용해서 보다 빠르게 자료 구조를 검색하고, 데이터를 삽입할 수 있는 프레임워크 # 장점 - 인스턴스화할 때, 다이아몬드 연산자(< >) 사이에 자료형을 명시함 → 가독성을 높임 - 자료형을 잘못 사용했을 때, 컴파일 시점 오류가 발생함 → 자료형의 변환이 컴파일러에 의해 검증되므로, 안정성이 높음 - java 파일의 수를 줄일 수 있음 ex) doubl..

Tistory

[Java Code] ActionListener - 배경 색 변경하기

- 버튼을 누르면 패널의 배경이 지정된 색으로 변경되도록 함 - 배열을 사용해서 코드 간소화 코드 public class ChangeRainbow extends JFrame implements ActionListener { // 버튼을 배치할 패널 private JPanel panel1; // 배경 색을 변경할 패널 private JPanel panel2; // 버튼 배열 private JButton[] buttons = new JButton[5]; // 배경 색 배열 private Color[] colors = {Color.red, Color.orange, Color.yellow, Color.green, Color.blue}; public ChangeRainbow() { initData(); setIn..

Tistory

[Java Code] MouseListener - 컴포넌트 이동시키기

- 마우스를 클릭하면 해당 위치로 컴포넌트가 이동하도록 함 코드 public class MouseEventListener1 extends JFrame{ private JLabel labelText; private int labelTextX; private int labelTextY; public MouseEventListener1() { initData(); setInitLayout(); addEventListener(); } private void initData() { setTitle("클릭으로 문자열 이동시키기"); setSize(500, 500); setDefaultCloseOperation(3); // 초깃값 세팅 labelTextX = 200; labelTextY = 200; labelText..

Tistory

[Java Code] KeyListener - 이미지 움직이기

- 키보드 방향키로 움직이되, 이미지가 창 밖으로 나가지 않도록 함 코드 // 인터페이스 파일 // public interface Moveable { void left(); void right(); void up(); void down(); } ------------------------------------ // 클래스 파일 // public class MoveLabelFrame3 extends JFrame implements Moveable { private JLabel label; private int labelX; private int labelY; private final int SIZE_X = 800; private final int SIZE_Y = 800; public MoveLabelFra..

Tistory

[Java Code] 이미지 삽입하기

코드 public class MyImageFrame extends JFrame { ImagePanel imagePanel; // 내부 클래스를 멤버 변수로 선언 public MyImageFrame() { initData(); setInitLayout(); } private void initData() { setTitle("이미지 연습"); setSize(400, 400); setDefaultCloseOperation(3); imagePanel = new ImagePanel(); } private void setInitLayout() { add(imagePanel); setVisible(true); } // 내부 클래스 이용해보기 class ImagePanel extends JPanel { private ..

Tistory

[Java] 오류와 예외 처리

프로그램에서의 오류 ① 컴파일 오류 (Compile error) - 프로그램 코드 작성 중 발생하는 문법적 오류 ② 실행 오류 (Runtime error) - 실행 중인 프로그램이 의도하지 않은 bug를 만나거나, 프로그램이 중지되는 오류 - 비정상 종료를 일으켜 시스템의 심각한 장애를 유발할 수 있음 오류와 예외 ① 시스템 오류 (Error) - 프로그래머가 처리할 수 없는 오류 - 가상 머신에서 발생함 ex) 동적 메모리가 없는 경우, 스택 메모리 오버 플로우 등 ② 예외 (Exception) - 프로그램에서 제어할 수 있는 오류 - 언어의 안전성을 위해, 문법적으로 '예외 처리'가 필요함 ex) 읽으려는 파일이 존재하지 않는 경우, 네트워크/DB 연결이 되지 않는 경우 등 예외 클래스 - 자바에서는..

Tistory

[Java Swing] JLabel 클래스 : 이미지 관련

이미지 삽입 및 중첩 // 이미지1 위에 이미지2를 중첩시키기 private JLabel 이미지1; private JLabel 이미지2; // 생성자 public 클래스명() { initData(); setInitLayout(); } // 생성자에 사용할 메서드 private void initData() // 창 제목, 크기 등 설정 ... // 이미지1 가져오기 이미지1 = new JLabel(new ImageIcon("경로/파일명1.확장자")); 이미지1.setSize(너비, 높이); // 이미지2 가져오기 이미지2 = new JLabel(new ImageIcon("경로/파일명2.확장자")); 이미지2.setSize(너비, 높이); } // 생성자에 사용할 메서드 private void setInit..

Tistory

[Java] 내부 클래스와 익명 클래스

내부 클래스 (Inner class, 중첩 클래스) - 클래스 내부에서 선언한 다른 클래스 → 해당 클래스를 감싸고 있는 '외부 클래스'와 밀접한 연관이 있는 경우가 많음 - 다른 외부 클래스에서 사용할 일이 없는 경우에는 내부 클래스로 선언하는 것을 고려할 수 있음 → 장점 : 내부 클래스에서 외부 클래스의 멤버 변수에 접근하기 쉬움 (코드의 복잡성을 줄임) // 외부 클래스의 인스턴스화 외부클래스 참조변수 = new 외부클래스(); // 내부 클래스의 인스턴스화 (내부 클래스에 private 선언 시 사용 불가) 외부클래스.내부클래스 참조변수 = 외부클래스.new 내부클래스(); # 인스턴스 내부 클래스 - 내부적으로 사용한 클래스 (private 권장) - 정적 내부 클래스와의 차이점 : 외부 클래..

Tistory

[Java Swing] 이벤트 리스너 (Event Listener)

이벤트 리스너 (Event Listener, 이벤트 핸들러) - 이벤트의 발생을 감지하고, 이벤트에 대한 처리를 담당하는 객체 - 실행의 흐름을 만들 수 있음 - implements 키워드로 인터페이스를 받지 않고, 구현 클래스를 이용할 수도 있음 · 구현 클래스 관련 설명 : https://young0105.tistory.com/82 ActionListener 인터페이스 - 버튼을 눌렀을 때 이벤트가 발생함 - 해당 클래스는 'ActionListener' 인터페이스가 적용됨 → 다형성 : 자기 자신의 자료형으로 사용할 수도 있고, ActionListener 타입으로 사용할 수도 있음 - 인터페이스를 불러오면 'actionPerformed' 메서드가 자동으로 호출됨 → 해당 메서드를 재정의해서, 이벤트 ..

1 2 3