본문 바로가기

전체 글

(76)
[Spring] 예외의 종류와 특징 Exception Exception 클래스는 체크 예외와 언체크 예외로 구분되는데 체크 예외는 Exception 클래스의 서브클래스이면서 RuntimeException 클래스를 상속하지 않은 것들이고, 언체크 예외는 RuntimeException 클래스를 상속한 클래스들을 말한다. 체크 예외 일반적으로 예외라고 하면 RuntimeException 클래스를 상속 받지 않은 체크 예외를 의미하며 체크 예외가 발생할 수 있는 메소드를 사용할 경우 반드시 예외를 처리하는 코드를 함께 작성해 주어야 한다. 예외 처리를 해주지 않으면 컴파일 에러가 발생한다. 체크 예외의 예시 1. IOException - 파일 입출력시 파일이 없거나 다른 문제로 인해 파일이 읽히지가 않았을때 발생 2. SQLException - ..
[Spring] 제어의 역전(IoC)와 의존성 주입(DI) 제어의 역전(Inversion of Control)이란 프로그램의 제어 흐름 구조가 뒤바뀌는 것 일반적으로 프로그램의 흐름은 아래의 과정이 반복되는데 제어의 역전은 이런 제어 흐름의 개념을 거꾸로 뒤집는다. 즉 프로그램의 제어권이 개발자가 아닌 프레임워크에게 있는 것을 의미한다. 1. 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정 2. 결정한 오브젝트를 생성 3. 만들어진 오브젝트에 있는 메소드를 호출 4. 그 오브젝트 메소드 안에서 다음에 사용할 것을 결정하고 호출 의존성 주입(Dependency Injection)이란 스프링 IoC 기능의 대표적인 동작원리로 제어의 역전(IoC)는 이 DI를 통해서 일어난다. 객체를 직접 생성하지 않고 외부에서 생성하여 주입시켜주는 방식 의존성 주입을 이..
[Java, Python] SWEA 1226번 미로1 문제 아래 그림과 같은 미로가 있다. 16*16 행렬의 형태로 만들어진 미로에서 흰색 바탕은 길, 노란색 바탕은 벽을 나타낸다. 가장 좌상단에 있는 칸을 (0, 0)의 기준으로 하여, 가로방향을 x 방향, 세로방향을 y 방향이라고 할 때, 미로의 시작점은 (1, 1)이고 도착점은 (13, 13)이다. 주어진 미로의 출발점으로부터 도착지점까지 갈 수 있는 길이 있는지 판단하는 프로그램을 작성하라. 아래의 예시에서는 도달 가능하다. 아래의 예시에서는 출발점이 (1, 1)이고, 도착점이 (11, 11)이며 도달이 불가능하다. [입력] 각 테스트 케이스의 첫 번째 줄에는 테스트 케이스의 번호가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다. 총 10개의 테스트케이스가 주어진다. 테스트 케이스에서 1은 벽을..
[Java] 이것이 자바다 - IO 패키지 IO 패키지란? 프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번히 일어나는데 자바의 기본적인 데이터 입출력 API는 java.io 패키지에서 제공하고 있다. 이때 프로그램이 출발지냐 또는 도착지냐에 따라서 입출력 스트림의 종류가 결정되는데 프로그램이 데이터를 입력받을 때는 입력 스트림이라고 부르고 프로그램이 데이터를 보낼 때에는 출력 스트림이라고 부른다. java.io 패키지에서 제공하는 스트림의 종류는 크게 두 가지로 구분된다. 하나는 바이트 기반 스트림이고 다른하나는 문자 기반 스트림이다. 바이트 기반 스트림은 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 주고 받을 수 있으나 문자 기반 스트림은 오로지 문자만 주고 받을 수 있다. 바이트 기반 스트림과 문자 기반 스트림은 ..
[Java] 이것이 자바다 - 스트림(Stream) 스트림이란? 스트림(Stream)은 자바 8부터 추가된 문법으로 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. Stream이 추가 되기 전인 자바 7 버전까지는 List 컬렉션에서 요소를 순차적으로 처리하기 위해 아래와 같이 Iterator 반복자를 사용했었다. public class StreamTest { public static void main(String[] args) { List nameList = new ArrayList(); nameList.add("홍길동"); nameList.add("스프링"); nameList.add("스트림"); Iterator iterator = nameList.iterator(); while (iterator.hasNext()..
[Java] 이것이 자바다 - 제네릭 제네릭이란? 제네릭이란 자바의 타입 안정성을 맡고 있으며 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 해결할 수 있게 도와준다. 또한 비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미치는데 아래 예시와 같이 제네릭을 사용하면 List에 저장되는 요소를 String 타입으로 국한하기 때문에 타입 변환을 할 필요가 없어 프로그램 성능이 향상된다. // 제네릭을 사용하지 않을 경우 List list = new ArrayList(); list.add("hello"); String str = (String) list.get(0); // 제네릭을 사용할 경우 List list = new ArrayList(); list.add("hello"); Stirng str = list.g..
[Java] 이것이 자바다 - 멀티 프로세스, 멀티 스레드 운영체제 운영체제란 하드웨어와 소프트웨어를 관리하는 일꾼으로 아래와 같은 역할을 한다. CPU 스케줄링과 프로세스 관리: CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리 메모리 관리 : 한정된 메모리를 어떤 프로세스에 얼마큼 할당해야 하는지 관리 디스크 파일 관리 : 디스크 파일을 어떠한 방법으로 보관할지 관리 I/O 디바이스 관리 : 마우스, 키보드 같은 I/O 디바이스들과 컴퓨터 간에 데이터를 주고받는 것을 관리 멀티 프로세스란? 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 부른다. 멀티 프로세스는 애플리케이션 단위의 멀티 태스킹을..
[Java] 이것이 자바다 - 인터페이스 인터페이스란? 인터페이스는 보통 추상클래스와 많이 비교하는데 추상 클래스가 그 추상 클래스를 상속 받아서 추상 클래스에서 선언된 변수나 메소드를 실체 클래스에서 사용하고 확장시키는데 의의가 있다면 인터페이스는 인터페이스에서 선언한 추상 메소드를 자식클래스에서 구현을 강제함으로써 같은 동작을 보장하는데 의의가 있다. 만약 인터페이스에서 선언한 추상메소드를 구현 클래스에서 오버라이드 하지 않으면 컴파일 에러가 발생한다. 또한 인터페이스는 추상클래스와 달리 다중 상속이 가능하다. 인터페이스 구성 상수 필드(Constant Field) 인터페이스도 상수 필드 선언이 가능한데 이 상수는 인터페이스에 고정된 값으로 수정될 수 없다. 그러므로 상수를 선언할 때는 반드시 초기값을 대입해야 한다. 추상 메소드(Abstr..