포스트

LG CNS 부트캠프 학습일지 18일차

학습 내용

  • 파일 입출력
  • 스프링 기본 구조

파일 입출력

try with resource 구문을 활용하면 좋다. 이 구문을 지원하지 않는 자바 버전을 사용한다면 finally문 안에서 다시 try catch 구문을 열어서 예외를 처리해주어야 한다. 구문이 중첩되다보니 코드가 더러워진다. try with resource 구문이 추가되서 다행이라고 생각했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class FileStreamTutorial {
	public readFile() {
		try (ObjectInputStream stream = new ObjectInputStream(...)) {
			MyObject myObject = (MyObject) stream.readObject();
			
		} catch (IOException | ClassNotFoundException e) {
			...
		}
	}

	public writeFile() {
		try (ObjectOutputStream stream = new ObjectOutputStream(...)) {
			stream.writeObject(new MyObject(...));
			
		} catch (IOException e) {
			...
		}
	}
}

try with resource 구문을 사용할 수 있는 경우는 그 안에 들어가는 객체가 AutoCloseable 인터페이스를 상속할 때이다. 실무에서는 어떤지 모르겠지만 스스로 AutoCloseable 인터페이스를 상속하는 클래스를 정의한 적은 없다. 아무튼 사용할 때 유의해야겠다.

스프링 기본 구조

아직 스프링을 배우기 전이라 스프링이 어떻다고 이야기하기엔 조금 이른 감이 있다. 하지만 도서관에서 빌려 본 책과 수업시간에 들었던 내용을 토대로 정리하면 이 프레임워크는 빈(Bean)이라는 것이 있는데, 프레임워크가 관리하는 객체를 부르는 이름이다. 객체를 우리가 만들어서 사용하지 않고 스프링 프레임워크가 만들어주는 객체를 개발자가 받아서 사용한다. 이를 제어의 역전 (Inversion of Control) 기법을 활용했다고 한다.

스프링은 프레젠테이션 레이어, 서비스 레이어 그리고 퍼시스턴스 레이어 이렇게 세 가지로 구분한다. 프론트엔드는 임의의 레이어와 통신하는 것이 아니라 백엔드의 프레젠테이션 레이어를 통해서만 데이터를 주고받는다. 프레젠테이션 레이어는 서비스레이어와만 통신하고, 서비스 레이어는 퍼시스턴스 레이어와 통신한다. 일단 이렇게만 이해하면 프레젠테이션 레이어는 퍼시스턴스 레이어와 왜 직접 통신하지 않는지 의문이 든다. 스프링을 처음 배우는 사람 입장에서는 그 질문에 답을 하기가 쉽지 않고, 그 이유를 안다고 해도 그 관행에 따를 수 밖에 없다. 그렇게 하는 것이 복잡한 웹 어플리케이션을 만들 때 일반적으로 더 좋았다라고 생각할 수 있을 것 같다.

기억에 남는 부분은 서비스 (Service) 클래스들이 하나만 만들어지도록 설계되었다는 것이다. 수업을 따라가면서 블로그 앱을 만들 때 각 컨트롤러가 서비스 객체를 만들어 가지고 있게 했었다. 하지만 스프링은 내부적으로 여러 컨트롤러가 하나의 서버스 객체를 상대하게 설계되었다고 배웠다. 사실 여러 서비스 객체가 존재할 이유는 없을 것이고, 하나의 서비스 객체만 가지고 있는 것이 메모리 효율성이 더 좋을 것이기 때문에 스프링이 왜 그렇게 설계되었는지 납득할 수 있었다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

Comments powered by Disqus.