일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- SSAFY
- 코딩테스트
- BFS
- 완탐
- JUnit
- Java
- 기본유형
- 알고리즘
- DP
- 그리디
- Union Find
- SWEA
- 부분수열의합2
- database
- 유니온파인드
- 트러블슈팅
- 완전탐색
- 싸피
- 그래프
- 자바
- 백준
- JPA
- 코딩테스트실력진단
- 코드트리
- 다익스트라
- 코테
- 다시보기
- DFS
- 알고리즘기본개념
- Spring
- Today
- Total
목록무엇을 합니다/기술이해 (66)
HwangHub
자바 서블릿 자바 서블릿은 웹 통신 간 요청에 따른 응답을 동적으로 생성하는 자바 기반의 웹 어플리케이션 기술로, 흔히 "서블릿"이라 줄여 부릅니다. 여기서 말하는 웹 통신 간의 응답은 동적인 웹 페이지가 될 수도 있고, HTTP 응답 메시지일 수도 있죠. 서블릿이 하는 일을 좀 더 열거하여 말해보자면, 서블릿은 비즈니스 로직 실행을 제외하고 TCP/IP 대기 및 소켓 연결부터 HTTP 요청 메시지 헤더/바디 파싱, 그리고 HTTP 응답 메시지를 생성하여 소켓으로 전송해주는 것 까지 전부 수행하는 녀석입니다. (굉장히 많은 일을 하고 있네요) @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extend..
배열은 자료형을 이용하는 가장 단순한 자료구조이다. 물리적으로 연속된 메모리 공간을 할당하여 여러 데이터를 한번에 저장하는 방식이다. 하나의 변수에 여러개의 공간을 할당하여 사용 같은 타입의 데이터만 저장할 수 있고, 공간은 idx 로 구분. idx는 0번 부터 시작. 배열은 reference 타입으로, 객체를 생성해야 사용할 수 있음. 배열 객체를 생성하면 기본 값으로 초기화된다. 배열의 접근은 0 ~ arr.length - 1까지 접근 가능하고, 범위를 벗어나면 "ArrayIndexOutOfBoundException" 발생 배열의 최대 사이즈는 ? 자바는 기본적으로 사용하는 정수 타입이 int라 배열의 사이즈도 21억까지만 생성 가능. 따라서 2GB 이상의 파일을 로드하기 위해선 NIO라는 걸 사용해..
Java에서는 초기화 블록(Initialization Block)이라는 특별한 구조를 제공합니다. 초기화 블록은 두 가지 종류가 있는데, 하나는 인스턴스 초기화 블록(Instance Initialization Block)이고, 다른 하나는 정적 초기화 블록(Static Initialization Block)입니다. 처음 봤을 때 잘못본건가 했는데, 알고나니 알아둬야 할 것 같아서 기록합니다. 1. 인스턴스 초기화 블록(Instance Initialization Block) 인스턴스 초기화 블록은 클래스 안에 직접 작성되는 블록으로, 중괄호 {}로 감싸져 있습니다. 이 블록은 객체가 생성될 때마다 실행되며, 생성자보다 먼저 실행됩니다. 여러 개의 생성자가 있고 각 생성자에서 공통으로 수행해야 하는 코드를 ..
자바는 객체를 파일에 저장하거나 네트워크를 통해 전송하기 위해 문자열과 같은 연속적인 데이터(byte stream; 자바는 기본적으로 byte stream으로 입출력 관리)로 변환하는 과정을 처리합니다. 이를 직렬화라 합니다. 당연히 직렬화된 데이터(byte stream)를 다시 객체화하는 것을 역 직렬화라고 합니다. 직렬화가 되기 위한 조건은 다음과 같습니다. 클래스와 그 모든 멤버가 Serializable 인터페이스를 구현해야 함 직렬화에서 제외하려는 멤버는 transient를 선언해야 함 class Member implements Serializable /* 직렬화 필수 조건 */{ private Long id; private String name; private Integer age; privat..
개발하다보면 "예외처리"는 필수죠. Java의 Exception은 크게 Checked Exception과 Unchecked Exception 두 가지로 나뉘는데, 각각이 무엇인지 알아봅시다. 1. Checked Exception Checked Exception은 컴파일러가 컴파일 시점에 체크하는 예외를 의미합니다. 이러한 예외들은 반드시 예외 처리를 해주어야 합니다. 예를 들어, FileNotFoundException, IOException 등이 있습니다. 이런 예외들은 파일을 읽거나 쓰는 과정에서 발생할 수 있는 예외를 대비하여 개발자가 미리 예외처리를 해두어야 합니다. try { // 예외가 발생할 가능성이 있는 코드 } catch (FileNotFoundException e) { // 예외 처리 코..
우리는 많은 경우에 습관적으로 데이터를 초기화하여 사용합니다. 하지만 경우에 따라 자바는 기본적으로 초기화를 해 주는 경우도 있는데요. 이를 분명하게 인지하고 사용하고자 해당 내용을 명확하게 정리해 보겠습니다. 지역 변수와 초기화 먼저, 지역 변수에 대해 알아보겠습니다. 지역 변수란 특정 영역 내에서만 사용되는 변수를 말합니다. 예를 들어, 메서드 또는 제어문 안에서 선언된 변수가 이에 해당합니다. 이렇게 선언되는 지역 변수는 반드시 초기화를 해 줘야 사용이 가능합니다. public class Main { public static void main(String[] args) { int a; System.out.println(a); } } 예시 코드를 보겠습니다. 위 코드에서 int a;는 main 메서드..
참조 변수(오브젝트) 다형성은 많이 다뤄지지만, 사실 기본형 데이터들도 다형성을 가집니다. byte => short / char => int => long => float => double 우리는 이걸 형변환이라고 알고 있죠. 하나의 타입이 여러 타입을 품을 수 있는 성질이 다형성이며, 이는 객체 간의 상속 관계 뿐만 아니라, 이와 같은 기본형의 형 변환이라는 현상도 만들어 냈습니다. (근데 중요하진 않으니 이쯤하고 넘어가죠.) 오늘 다룰 내용은 객체지향 원칙 A P.I.E 중 다형성에 대한 내용입니다. 다형성, 눈으로 확인하기 우리 모두 잘 알다시피, 참조 변수에서의 다형성은 상속 관계에서 많이 다뤄집니다. 이는 클래스 간 상속이나 인터페이스와 클래스 간의 관계에서 이용됩니다. 아래 예시를 통해 더 자..
아래 예시 코드와 함께 간단히 다뤄보자. 아래 코드에 3가지가 생략되어 있는데, 혹시 전부 캐치가 되는가? (더 있는진 모르겠는데, 일단 저는 3가지만 알고 있어요. 혹시 더 있다면 언제든 댓글 부탁드립니다.) package hwanghub.example; public class Person { public Person() { } } 가장 먼저 숨겨져 있는 건 import java.lang.*;이다. 자바에서 기본 자료형이나 Wrapper class, 그리고 큰 값 비교를 해주는 Math 클래스와 같은 기본 클래스들이 들어있다. 자바 프로그래밍의 모든 경우에 반드시 필요한 필수 클래스를 포함하여, 정말 자주 사용되는 클래스들이 java.lang패키지에 들어 있기 때문에 이를 default import라고..
JVM 메모리 영역(JVM runtime data area)은 meta space(method area), stack, heap, pc register, native method stack 다섯가지로 구분되어 구성된다. 자바는 멀티 스레드를 지원하는데, JVM 내에서 모든 쓰레드가 공유하는 메모리 영역(heap, meta-space)이 존재하고, thread 별로 구분되어 생성되는 영역이 존재한다. 개념적으로만 보면 복잡하니 자바에서 main 메서드를 생성하는 과정에서 JVM에 일어나는 일을 보면서 해당 구조를 이해해보자. public class Main { public static void main(String[] args) { Customer customer = new Customer(); custo..
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 현대 소프트웨어 개발 분야에서 중요한 패러다임으로 자리매김하고 있습니다. 그 이유는 객체지향 프로그래밍이 현실 세계의 다양한 문제를 효과적으로 표현하고, 유지보수를 쉽게 만들어주는 메커니즘이기 때문입니다. 객체지향이 등장하게 된 배경 객체지향 프로그래밍은 현실 세계에 사용되는 엔터프라이즈 서비스 개발을 어떻게 하면 더욱 효율적으로 해낼 수 있을까 하는 고민에서 시작된 "패러다임"입니다. 과거 어셈블리어로 코딩하던 시대를 넘어, 코볼과 포트란이 등장할 때 까지만 해도 자연어와 유사하다는 것에서 접근성이 높아 프로그래밍을 대중화하는 데에 기여했을 것입니다. 하지만 이는 절차적 프로그래밍의 초기 언어였기에 처음 프로그램을 만들 ..