캡슐화 정보은닉 캡슐화는 객체의 속성을 보호하기 위해서 사용합니다 정보은닉이라는 개념으로도 부를 수 있는데 자바의 접근 제어자를 통해 객체의 내부 구현체를 숨김으로써 실제 구현 내용을 감추는 것에 있습니다 이는 모두 객체의 속성을 보호하기 위함입니다 이 캡슐화라는 하나로 뭉치는 특징과 정보은닉이라는 특징은 응집도와 독립성을 높임으로써 객체의 모듈화를 지향합니다. 객체의 모듈화가 잘 이루어져 있을 경우 모듈의 재사용성이 증가하고 유지보수에 용이하게 되는 객체지향의 특징을 가지게 됩니다 여기서 말하는 응집도란 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타내는데 모듈 내의 요소들이 하나의 목적을 위해 밀착해있다면 그것은 높은 응집도를 가졌다하고 서로 다른 목적을 추구한다면 그것은 낮은 응집도를 가졌다..
Stack LIFO 순서로 동작하면서 원시타입의 데이터가 저장되면 stack에 직접 저장이 되고 참조타입의 데이터가 저장되면 heap의 위치를 가르키는 주소값이 저장됩니다. 여기서 LIFO는 Last In First Out의 약자로 후입선출이라고도 부릅니다 우리들이 흔히 쓰던 ctrl + Z 가 전형적인 후입선출의 예라고 볼 수 있습니다 Heap 참조타입의 객체들이 이 영역에 직접 저장이 됩니다. 이 메모리를 할당 받는 객체들이 많아지면 많아질수록 프로그램에 부하를 주게되는데 자바에는 이러한 메모리를 지워주는 라이브러리를 제공하지 않고 있습니다 이유는 heap 영역의 값은 참조하는 변수가 없다면 의미 없는 개체가 되어서 메모리를 낭비하게 되므로 JVM garbage Collector에 의해서 자동으로 삭..
프로그램 에러 프로그램이 실행중 오작동하거나 비정상적으로 종료되는 경우를 발생시점에 따라 세가지로 분류할 수 있습니다. 1. 컴파일 에러 : 컴파일시 발생하는 에러 컴파일에러는 우리가 프로그램을 실행할때 소스코드를 컴파일하게 되고 오타나 자료형 등등을 체크하고 오류가 없는지 체크를 한 뒤 오류가 없다면 .class파일을 생성하게 됩니다. 2. 런타임 에러 : 실행 시에 발생하는 에러 아래에 후술하겠습니다. 3. 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 int a = 8; int b = 4; int c = a + b / 2; // 우리가 원하는 c의 결과값 : 6; // 실제 실행시 c의 결과값 : 10; 논리적 에러는 컴파일과 실행은 정상적으로 진행되지만 사실 99%의 경우라면 우리는 ..
영속성 전이가 골치아프게 자꾸 헷갈리는데 나중에도 가면 갈수록 이 영속성 전이가 필수적으로 중요한 개념이라고 생각되서 내 생각을 정리하고자 블로그를 쓴다. 아 일단 영속성 전이는 spring의 연관관계와는 상관이 없다. 연관관계가 아닌 오로지 주종관계를 중요시하므로 주종관계를 정확히 나눠야한다. CascadeType.ALL: 모든 Cascade를 적용 CascadeType.PERSIST: 엔티티를 영속화할 때, 연관된 엔티티도 함께 유지 CascadeType.MERGE: 엔티티 상태를 병합(Merge)할 때, 연관된 엔티티도 모두 병합 CascadeType.REMOVE: 엔티티를 제거할 때, 연관된 엔티티도 모두 제거 CascadeType.DETACH: 부모 엔티티를 detach() 수행하면, 연관 엔티..
브랜치 전략 중에 git - flow 전략과 github - flow라는 방식이 있는데 저번주부터 github로 협업을 하면서 막막하기만 했던 github 협업이 어느정도 자리를 잡아가는것 같은 느낌을 받아서 블로그를 적는다. 두가지 모두 확실히 딱 사용했다 나는 이제 잘안다 라고 할 순 없겠지만 어느정도 묘사는 해봤기에 각각의 장단점에 대해서 잘 알 수 있을것만 같다. git - flow 전략 총 5가지의 브랜치로 구성되며 master : 제품으로 출시될 수 있는 브랜치 develop : 다음 출시 버전을 개발하는 브랜치 feature : 기능을 개발하는 브랜치 release : 이번 출시 버전을 준비하는 브랜치 hotfix : 출시 버전에서 발생한 버그를 수정 하는 브랜치 와 같은 각각의 역할을 가지..
Stack LIFO 순서로 동작하면서 원시타입의 데이터가 저장되면 stack에 직접 저장이 되고 참조타입의 데이터가 저장되면 heap의 위치를 가르키는 주소값이 저장됩니다. 여기서 LIFO는 Last In First Out의 약자로 후입선출이라고도 부릅니다 우리들이 흔히 쓰던 ctrl + Z 가 전형적인 후입선출의 예라고 볼 수 있습니다 Heap 참조타입의 객체들이 이 영역에 직접 저장이 됩니다. 이 메모리를 할당 받는 객체들이 많아지면 많아질수록 프로그램에 부하를 주게되는데 자바에는 이러한 메모리를 지워주는 라이브러리를 제공하지 않고 있습니다 이유는 heap 영역의 값은 참조하는 변수가 없다면 의미 없는 개체가 되어서 메모리를 낭비하게 되므로 JVM garbage Collector에 의해서 자동으로 삭..
1. SRP Single Responsibility Principle 단일 책임 원칙 객체는 오직 하나의 책임을 가져야 한다. 만일 객체가 여러가지의 책임을 가지고 있다면 여러가지 변경 사항이 있을수 있어서 해당 클래스를 변경해야하는 이유가 명확하지 않을 수 있어서 관리하는데에 문제가 발생한다. 단일 책임 원칙을 지키면 변경이 필요할 때 수정할 대상이 명확해진다. 2. OCP Open-Colsed Principle 개방 폐쇄 원칙 객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 한다. 확장에 대해서 개방적이라는 말은 요구사항이 변경됐을때 새로운 객체를 추가하여 기능을 확장 할수 있음을 말하고 수정에 대해서 폐쇄적이라는 말은 기존의 코드를 수정하지 않고 새로운 객체를 추가할 수 있다는 말이다..
1. 스프링 프레임워크는 어떤 특징 혹은 장점을 가지고 있나요? 1. 제어의 역전(Inversion of Control, IOC) 제어의 역전이란 개발자가 작성한 객체나 메소드의 제어를 개발자가 아니라 외부에 위임하는 설계 원칙을 말한다. 프로젝트를 프레임워크가 제어하고 개발자가 코드의 일부분이 된다는 뜻으로 이러한 특징 덕분에 개발자는 핵심 비지니스 로직에 더 집중할 수 있는 장점이 있다. 2. 확장성과 유지보수 용이 스프링은 각 기능별로 분리하고 모듈화를 하였기에 추가적으로 확장하기에 용이하고 유지보수를 함에 있어서 가독성이 높아 유리하다. 3. 관점지향 프로그래밍(AOP : Aspect-Oriented Programming) 여러 객체에서 공통적으로 사용하고 있는 기능을 분리해서 모듈화하고 재사용하..