* 해당 글은 김영한 강사님의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 보고 간단하게 정리한 글입니다.(자세한 내용은 강의가 최곱니다. 강의 사세요) 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 - 인프런 저는 야생형이 아니라 학자형인가봐요^^ 활용편 넘어갔다 30% 정도 듣고 도저히 답답해서 기본편을 들어버렸네요^^. 한주 한주 김영한님 강의 들으니 렙업되는 모습을 스스로 느낍니다. 특히 실 www.inflearn.com JPA의 역할과 탄생 배경 🔶 JPA의 역할 JPA는 개발자 대신 SQL문을 작성해준다. 🔶 JPA를 실무에서 사용할 때 우리가 제대로 못사용하는 이유 1️⃣ 객체와 테이블을 올바르게 매핑하고 설계하는 방법을 몰라서 2️⃣ JPA 내부 동작 방식을 이해하지 못해서 JPA..
메모리에 대한 진실 🔲 메모리는 무한의 자원이 아닌 할당되고 관리되는 자원이다. 🔲 메모리 참조 버그는 치명적이다. 🔲 메모리의 성능은 일정하지 않다. 캐시와 가상 메모리는 프로그램 성능에 영향을 준다. 동적 메모리 할당기 🔶 직접 할당(Explicit) 응용 프로그램이 할당하고, 반환한다. (malloc, free) 🔶 간접 할당(Implicit) 응용 프로그램이 할당하지만, 반환하지 않는다. 예를 들어 자바는 가비지 컬렉션 기능이 있다. 메모리는 블록 단위로 제공되며, 응용 프로그램에 free 메모리 블록을 나눠준다. 메모리 구조 🔲 할당기는 sbrk 함수를 통해 추가적인 힙 메모리를 운영체제로부터 요청한다. 🔲 stack, kernel virtual memory가 유저 코드에서 볼 수 있는 메모리이..
* 프로세스를 공부하며 헷갈리는 부분을 정리하며 공부한 것입니다. 잘못된 부분은 댓글로 알려주세요 프로세스와 프로그램, fork와 execve 🔲 프로그램은 코드와 데이터가 합쳐진 것. 디스크 상의 목적파일이나 주소공간에 세그먼트로 존재 가능 🔲 프로세스는 실행중인 프로그램의 특정 사례이다. + 프로세서는 CPU이다. 🔎 fork 부모의 복제를 새로운 자식 프로세스에서 동일한 프로그램을 실행한다. 다른 컨텍스트 - 같은 프로그램 signal mask 상속, signal handler 상속 🔎 execve 새로운 프로그램을 현재 프로세스 컨텍스트 내에서 실행 같은 컨텍스트 - 다른 프로그램 signal mask 동일, signal handler 초기화 sleep과 pause의 차이 🔶unsigned int..
분할 정복 알고리즘은 반으로 나누는 것이 핵심이었다. 정확히는 분할할 수 없을 때까지 분할하여 간단한 문제부터 접근하였다. 굉장히 자주 사용하며, 좋은 알고리즘이다. 하지만, 분할하며 생기는 부분 문제들이 중복되어도 다시 사용하지 않는다. 이미 구한 문제를 또 푸는 것은 지루하고 시간이 드는 일이다. 유형마다 다르겠지만, 분할정복도 마찬가지일 것이다. 따라서 중복된 문제를 굳이 다시 풀지 않는 테크닉이 필요하다. 그리고 그 방법이 바로 "DP 알고리즘", Dynamic Programming 인 것이다. DP 알고리즘은 미리 최소 부분 문제들의 해를 구한다. 이는 논리적으로 생각했을 때 매우 당연하다고 여겨지는 것들이다. 또한 이 해를 이용하여 최소 부분 문제보다 더 큰 부분 문제를 풀어야 한다. 즉, 부..
* 공부를 하며 정리한 글입니다. 수정할 점이 있다면 댓글 남겨주세요. 선택(Selection) 문제 주어진 수들 중 k 번째로 작은 수를 찾아야 하는 문제는 꽤나 자주 등장한다. 실제로 이러한 문제를 해결하는 알고리즘도 간단한 것이 많다. 예를 들어 최소 숫자를 k번 찾는 방법, 숫자를 정렬하고 k번째 숫자를 찾는 방법 등이 있다. 하지만, 앞서 말한 알고리즘의 시간 복잡도를 고려해보자. 각각 최악의 경우 O(kn)과 O(nlogn)이 소요된다. 그렇다면 이보다 더 효율적인 시간으로 k 번째 작은 수를 찾을 수 있을까? 여기에 있어 우리는 "Selection" 알고리즘을 사용할 수 있다. 미리 말하자면 선택(Selection) 알고리즘은 이진 탐색 알고리즘과 매우 유사하다. 이진 탐색은 원하는 수를 찾..
* 공부를 하며 정리한 글입니다. 수정할 점이 있다면 댓글 남겨주세요. 작업 스케줄링이란? 알고리즘 문제를 풀다보면 시작 시간과 종료 시간이 지정된 어떠한 작업들을 수행하는 문제에 마주칠 때가 있다. 이때 문제를 해결하기 위해서 정렬이나 맵 같은 자료구조를 쓰면 될 것 같은데.. 막상 구현해보면 쉽지 않을 것이다. 따라서 이러한 문제 유형에 대해서는 어느정도 틀을 가지고 푸는 것이 좋다. 지금까지 내가 본 바로는 결국 그 틀 내에서 크게 벗어나지 않기 때문이다. 그래서 작업 스케줄링이 무엇인가 하면, 모든 작업을 수행하는 문제이다. 물론 그냥 수행하는 것이 아니라 해당 작업들의 수행 시간이 뒤죽박죽 섞이지 않고 최소한으로 기계를 사용해야 한다. 기계가 아니어도 강의실 배치, 컴퓨터 등 작업을 수행할 수 ..
Prototype Pattern(프로토타입) 프로토타입은 생성 패턴의 일종으로 객체의 복사를 위한 패턴이다. 기존에는 객체를 복사하기 위해 그 프로퍼티들을 모두 복사하여, 새롭게 객체를 구성하여야 했다. 이러한 방식은 코드로 하나하나 짜기에 귀찮다. 또한 클래스 내부의 Private로 선언된 프로퍼티들이 있다면 완벽하게 복사해낼 수 없다. 프로토타입 패턴은 이러한 문제를 해결하기 위해 복사 프로세스를 객체들에게 위임한다. 즉, 모든 객체들이 공통적으로 가지고 있는 "clone" 메서드를 만드는 것이다. 모든 객체들이 clone 메서드를 가지게 된다면, 각 객체의 private 멤버에 접근할 수 있게된다. 이 말이 의미한 것은 곧, 완벽하게 해당 객체에서 새로운 객체로 복사가 가능하다는 것이다. 이렇게 복..
디자인 패턴은 무엇인가? 디자인 패턴은 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해법과 작명법을 제안한 책이다. 이 분야에 있어, 사인방이라고 불리는 Erich Gamma, Richard Helm, Ralph Jonhson, John Vlissides가 작성했기에 Gang of Four(GoF)라고 불리곤 한다. 즉, 디자인 패턴은 프로그램을 개발하는 과정에서 우리 앞에 놓여진 비슷한 문제들을 해결하기 위해 일련의 "패턴"을 만들어 쉽게 해결할 수 있도록 한 것이다. 이를 잘 숙지하고 활용한다면 많은 시간과 노력을 줄일 수 있을 것이다. 그러한 패턴은 크게 용도에 따라 생성 패턴(Creational Patterns), 구조 패턴(Structural Patterns), 행동 패턴(Behavio..
C++에서의 메모리 할당 LHS와 RHS LHS는 left-hand-side expression, RHS는 right-hand-side expression이다. 굳이 어렵게 생각하지 않고, 표현식에서 왼쪽의 할당받는 주체를 LHS라고 하고, 할당하는 대상을 RHS라고 한다. z = x+y라는 식이 있다면, LHS는 z라고 하고, x+y는 RHS라고 한다. C++에서의 메모리 모델 &x (RHS에서만 사용) 변수 x의 주소를 리턴한다. x (RHS의 경우) 변수의 주소에 할당된 값을 리턴한다. x (LHS의 경우) 변수의 주소에 RHS 값을 저장한다. *x (RHS의 경우) 변수의 값이 가리키는 주소의 값을 리턴한다. *x (LHS의 경우) 변수의 값이 가리키는 주소에 RHS 값을 저장한다. const 키..
프로그래밍의 세계에서 객체 지향 설계는 복잡한 문제를 논리적이고 효율적으로 해결하는데 도움을 주는 프로그래밍 패러다임 중 하나이다. 이제부터, c++ 언어를 사용하여 객체 지향 설계에 대해 공부해 보고자 한다. c++은 객체 지향 프로그래밍을 지원하는 강력한 언어로, 클래스, 객체, 상속, 다형성, 캡슐화와 같은 개념을 효과적으로 구현할 수 있도록 한다. 물론, c++을 공부하는데 있어서도 굉장한 도움이 될 것이다. OOP에 대하여 OOP는 객체 지향 설계에 있어 빼놓을 수 없는 개념이다. 무조건 머리에 집어넣도록 하자. Class and Object(클래스, 객체) Abstraction(추상화) Encapsulation(캡슐화) Inheritance(상속) Polymorphism(다형성) Class a..