This 키워드란 ? 자바 내에서 객체의 멤버 변수를 관리할 때, 자신을 가리키는 인스턴스 변수를 표현하기 위해 this 키워드를 사용합니다. public static Class Car{ String name; String color; public Car(String name, String color){ this.name = name; this.color = color; } } 예시입니다. 자바 내에서 객체를 생성하기 위해서는 , 생성자를 통한 호출이 필요하고 호출 시에 설정할 멤버 변수를 인자로 넘겨주게 됩니다. 클래스는 붕어빵 틀과 같은 역할을 합니다. 어떤 붕어빵을 만들지는 사용자 입력에 따라 달라지게 됩니다. 하지만 인자로 받는 name 변수와, color 변수의 이름은 객체의 인스턴스 변수와 똑..
동기와 비동기 ? Blocking Non-Blocking? 개발을 공부하면 동기와 비동기라는 단어를 자주 접하게 됩니다. 또한 이 둘과 혼동될 수 있는 Blocking , Non-Blocking 개념도 종종 들을 수 있습니다. 비슷한 개념 같아 보이지만 미묘하게 다른 두 개념을 함께 살펴보겠습니다. Blocking OS관점의 블로킹은 프로세스가 어떤 작업을 위해 OS에 기능을 요청했는데 ( System Call ) OS가 해당 태스크를 바로 처리할 수 없을 경우, thread 를 “sleep” 혹은 “blocked” 상태로 변경합니다. 즉, CPU 큐에서 내려오고, 작업이 완료될 때 까지 대기합니다. 요청된 작업이 완료된 후에 OS는 thread를 깨웁니다. 이렇게 스레드를 sleep 상태로 만들 수 있..
Transaction 트랜잭션이란 ? 해당 교재에서 트랜잭션은 , ‘Single Logical Unit of Work’ 으로 규정하고 있습니다. 일상생활의 예를 들자면, 제가 다른 친구에게 돈을 송금할 때, DBMS 내부에서는 제 계좌의 돈을 차감 후 , 전달받는 친구 계좌의 돈을 증가 시키는 절차를 가집니다. 이러한 연산들은, 장애가 발생해도 처리가 가능해야 합니다. 돈을 송금하는 도중에 서비스에 장애가 발생해서 제 계좌의 돈만 차감된다면, 돈이 증발하는 꼴이 됩니다. 데이터베이스는 트랜잭션을 통해 작업의 원자성, 일관성, 고립성, 내구성을 보장합니다. Basic Concept of Transaction 트랜잭션은 여러 값에 접근하여 값을 변경시키는 프로그램 실행의 단위입니다. 위에서 제시한 송금 시나..
Factory Method 팩토리 메서드 패턴이란 ? 객체를 생성할 때 필요한 인터페이스를 만들고, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하는 패턴 따라서 클래스 인스턴스를 만드는 일을 서브클래스에게 맡길 수 있다. 이전에 작성한 코드를 변경하며 살펴보겠습니다. PizzaStore.java public abstract class PizzaStore { public Pizza orderPizza(String type){ Pizza pizza; pizza = createPizza(type); //변경 pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } protected abstract Pizza createPizz..
도입 new 연산자 new 연산자를 사용하면, 구상 클래스의 인스턴스가 만들어진다. 구상은 추상의 반댓말로서, 인터페이스가 아닌 특정한 구현을 사용하는 방식이다. 하지만 객체지향 방식의 개발에서는 구상에 집중하지 않는다. 구상 클래스를 바탕으로 진행하는 코딩은 후에 코드를 수정해야 할 가능성이 커지고, 유연성이 떨어진다. Duck duck = new MallardDuck(); 이전에 작성한 오리 인터페이스를 이용한 코드 스니펫이다. 보다싶이 Duck 인터페이스를 사용했지만, 그럼에도 new 연산자를 통해 결국에는 구상 클래스의 인스턴스를 만들어야 한다. 이것은 다음과 같은 코드 구현으로 이어진다. Duck duck; if(picnic){ duck = new MallardDuck(); }else if(hu..