web/JAVA & Spring

web/JAVA & Spring

Autowired

의존성 주입을 할때 사용하는 Annotation으로 의존 객체의 타입에 해당하는 bean을 찾아서 주입하는 역할을 합니다. Autowired는 기본적으로 3가지 위치에서 사용합니다. 1️⃣ 생성자 (Autowired 생략 가능) 2️⃣ setter 3️⃣ 필드 하지만 필드의 경우를 본다면 우리가 뭔가 많이 본듯한 형태입니다. 저는 private final BoardRepository boardRepository와 같은 방식으로만 의존성을 주입해왔는데 필드 주입 방식을 사용할수도 있는데 왜 굳이 생성자 주입과 같은 형태로 의존성을 주입했을까 라는 의문이 들었습니다. 그렇다면 왜 우리는 지금까지 Autowired를 사용하지 않았는지 그리고 왜 사용하지 않았는지를 알게 된다면 왜 final을 썼는지도 알게 됩..

web/JAVA & Spring

싱글톤패턴

싱글톤 패턴이란 객체의 인스턴스를 한개만 생성되게 하는 패턴 입니다. 이러한 패턴은 주로 프로그램 내에서 하나로 공유를 해야하는 객체가 존재할 때 해당 객체를 싱글톤으로 구현하여 모든 유저 또는 프로그램들이 해당 객체를 공유하며 사용하도록 할 때 사용됩니다. 이를 잘 표현해주는 예시가 있는데 바로 회사내의 프린터기입니다. 보통 new를 이용해서 public생성자를 통해 객체를 생성할때는 사진의 오른쪽과 같은 경우가 많습니다. 하지만 현실적으로 생각해봐도 한사람 당 하나의 프린터기를 가지고 있는 것은 낭비입니다. 위 사진처럼 1대의 프린터기를 공용으로 사용하는 회사의 경우 싱글톤 패턴을 적용할 수 있습니다. 이렇게 많은 프린터객체를 생성하는게 아닌 하나의 static프린터 객체를 공유함으로써 메모리 측면에..

web/JAVA & Spring

리스코프 치환 법칙

리스코프 치환 법칙이란 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 작동해야한다 라는 것을 의미합니다. 즉 부모 타입인 객체 A는 자식 타입인 B로 치환해도 작동에 문제가 없어야 한다는 것이 리스코프 치환 원칙입니다 두 사진으로 예를 들어 본다면 첫번째 사진은 상위 객체인 아버지는 할아버지를 대체할 수 없고 아들은 아버지를 대체 할 수 없습니다. 반면 두번째 사진에서는 하위에 존재하는 객체들은 상위의 객체들의 역할을 하는데 문제가 없습니다. 이처럼 하위의 개념이 상위개념의 역할을 할 수 있을때 리스코프 치환 원칙을 위배하지 않았다고 볼 수 있습니다. 그렇다면 이 규칙을 지키지 않는다면 무조껀 리스코프 치환 원칙을 위배한다고 볼 수 있을까요? 리스코프 치환 원..

web/JAVA & Spring

캡슐화

캡슐화 정보은닉 캡슐화는 객체의 속성을 보호하기 위해서 사용합니다 정보은닉이라는 개념으로도 부를 수 있는데 자바의 접근 제어자를 통해 객체의 내부 구현체를 숨김으로써 실제 구현 내용을 감추는 것에 있습니다 이는 모두 객체의 속성을 보호하기 위함입니다 이 캡슐화라는 하나로 뭉치는 특징과 정보은닉이라는 특징은 응집도와 독립성을 높임으로써 객체의 모듈화를 지향합니다. 객체의 모듈화가 잘 이루어져 있을 경우 모듈의 재사용성이 증가하고 유지보수에 용이하게 되는 객체지향의 특징을 가지게 됩니다 여기서 말하는 응집도란 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타내는데 모듈 내의 요소들이 하나의 목적을 위해 밀착해있다면 그것은 높은 응집도를 가졌다하고 서로 다른 목적을 추구한다면 그것은 낮은 응집도를 가졌다..

web/JAVA & Spring

스태틱 / 스택 / 힙

Stack LIFO 순서로 동작하면서 원시타입의 데이터가 저장되면 stack에 직접 저장이 되고 참조타입의 데이터가 저장되면 heap의 위치를 가르키는 주소값이 저장됩니다. 여기서 LIFO는 Last In First Out의 약자로 후입선출이라고도 부릅니다 우리들이 흔히 쓰던 ctrl + Z 가 전형적인 후입선출의 예라고 볼 수 있습니다 Heap 참조타입의 객체들이 이 영역에 직접 저장이 됩니다. 이 메모리를 할당 받는 객체들이 많아지면 많아질수록 프로그램에 부하를 주게되는데 자바에는 이러한 메모리를 지워주는 라이브러리를 제공하지 않고 있습니다 이유는 heap 영역의 값은 참조하는 변수가 없다면 의미 없는 개체가 되어서 메모리를 낭비하게 되므로 JVM garbage Collector에 의해서 자동으로 삭..

web/JAVA & Spring

예외처리

프로그램 에러 프로그램이 실행중 오작동하거나 비정상적으로 종료되는 경우를 발생시점에 따라 세가지로 분류할 수 있습니다. 1. 컴파일 에러 : 컴파일시 발생하는 에러 컴파일에러는 우리가 프로그램을 실행할때 소스코드를 컴파일하게 되고 오타나 자료형 등등을 체크하고 오류가 없는지 체크를 한 뒤 오류가 없다면 .class파일을 생성하게 됩니다. 2. 런타임 에러 : 실행 시에 발생하는 에러 아래에 후술하겠습니다. 3. 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 int a = 8; int b = 4; int c = a + b / 2; // 우리가 원하는 c의 결과값 : 6; // 실제 실행시 c의 결과값 : 10; 논리적 에러는 컴파일과 실행은 정상적으로 진행되지만 사실 99%의 경우라면 우리는 ..

web/JAVA & Spring

Static / Stack / Heap

Stack LIFO 순서로 동작하면서 원시타입의 데이터가 저장되면 stack에 직접 저장이 되고 참조타입의 데이터가 저장되면 heap의 위치를 가르키는 주소값이 저장됩니다. 여기서 LIFO는 Last In First Out의 약자로 후입선출이라고도 부릅니다 우리들이 흔히 쓰던 ctrl + Z 가 전형적인 후입선출의 예라고 볼 수 있습니다 Heap 참조타입의 객체들이 이 영역에 직접 저장이 됩니다. 이 메모리를 할당 받는 객체들이 많아지면 많아질수록 프로그램에 부하를 주게되는데 자바에는 이러한 메모리를 지워주는 라이브러리를 제공하지 않고 있습니다 이유는 heap 영역의 값은 참조하는 변수가 없다면 의미 없는 개체가 되어서 메모리를 낭비하게 되므로 JVM garbage Collector에 의해서 자동으로 삭..

web/JAVA & Spring

객체지향의 4대 특성

프로그래밍 언어는 지속적으로 발전해왔다. 0과 1밖에 모르는 컴퓨터를 위해 진공관을 이용해 기계어로 프로그램을 작성하기도 했고 이후 기계어와 일상 용어를 일대일로 매칭하는 어셈블리어가 나오기도 했고 이후에도 많은 언어들이 나오면서 현재 우리가 배우는 객체지향 프로그래밍이라는 개념이 나오게 되었는데 이 모든 이유는 인간의 편의를 위해서기도 하지만 생산성을 위해서도 있다. 이러한 객체지향 프로그래밍에는 생산성을 높이기위한 4대 특성이 있다. 1. 캡슐화 각각의 용도별로 클래스를 나눠서 사용하는 자바 객체지향 프로그래밍의 특성상 중요한 정보는 자바에서 제공하는 접근제어자를 통해서 외부에서 접근을 못하도록 제한 할 수 있다. 이를 정보 은닉의 개념이라고 한다. 또한 선언된 변수들과 메소드들을 하나로 묶어 객체의..

3hoon
'web/JAVA & Spring' 카테고리의 글 목록