-
0. 디자인 패턴에 대해개발기초/Design Pattern 2020. 2. 20. 12:55
1. 디자인 패턴? 훌륭한 객체지향 디자인이라면 재사용성, 확장성, 관리의 용이성을 갖춰야 한다 훌륭햔 객체지향 디자인 품질을 갖추고 있는 시스템을 만드는 방법을 제공해 준다 2. 디자인 원칙 1) 디자인을 잘 하기 위해서 아래와 같은 사항을 고려하는게 좋다. (1) 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다. 즉, 달라지는 부분을 찾아서 나머지 코드에 영향을 주지 않도록 캡슐화한다. 모든 디자인 패턴의 기반을 이루는 원칙이다. 코드를 변경하는 과정에서 의도하지 않은 일이 일어나는 것을 줄인다. 시스템의 유연성을 향상시킬 수 있다. (2)구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 상위 형식에 맞춰서 프로그래밍을 한다는 것을 뜻한다. 반드시 자바의 인터페이스를 사..
-
[Java 기초] 람다식카테고리 없음 2019. 6. 9. 22:53
1. 람다식? 람다식이란 "매개 변수를 가진 코드 블록"으로 "익명 구현 객체"를 생성하는 녀석이다. 음. 말이 어렵다. 그냥 코드로 보자. // 익명 구현 객체 Runnable runnable = new Runnable() { public void run() { ... } }; // 익명 구현 객체를 람다식으로 표현 Runnable runnable = () -> { ... }; 위의 코드를 보면 new Runnable()이라는 익명구현객체를 {public void run() {...}};으로 구체화 시키고 있다. 그리고 람다식은 위의 익명구현객체를 정말 간단하게 단 몇줄로 표현할 수 있도록 도와주는 녀석을 말한다. (코드 사용하는걸 보면 거의 대부분 인터페이스를 구체화하는 용도로 많이 쓰는거 같다) 2..
-
[Java 기초] Stream - 1개발언어/Java 2019. 5. 26. 22:04
0. 들어가기 전에. Java뿐만 아니라 C언어로 개발하면서, 그리고 OS 수업 등을 들을 때, Stream이라는 용어를 꽤나 접했던 것 같다. 그런데 지금껏 stream에 왜 stream이라는 단어가 쓰였는지 생각도 안해봤다. 그냥 외웠지.. 그런데 지금 생각해보니 stream은 영어 뜻 자체가 '흐름'이라는 말이고, 이것을 개발쪽으로 가져와서 생각해보면 '데이터가 흐르는 통로?'같은거라고 생각해볼 수 있을거같다. 그리고 이것을 염두해두고 Stream을 공부하면 좀 더 이해하기 쉬운거같다. 1. Stream? "컬렉션(배열 포함)에 저장된 데이터들을 하나씩 참조해서 람다로 처리할 수 있도록 해주는 반복자" (즉, 스트림은 컬렉션을 통로로 해서 데이터를 흘려보내고, 이것을 하나하나 처리하는 것을 의미한다..
-
[Java 기초] 멀티스레드 - 2카테고리 없음 2019. 5. 15. 20:50
1. 데몬 스레드 데몬 스레드는 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드입니다. 즉, 백그라운드상태로 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기상태로 돌아가는 스레드를 말합니다. 만일, 주 스레드가 종료된다면 백그라운드로 돌고있던 데몬스레드도 자연스럽게 같이 종료되게 됩니다. 데몬 스레드 생성을 위해서는 아래와 같이 setDaemon(true)을 선언해주면 됩니다. public class AutoSaveThread extends Thread { public void save() { System.out.println("save"); } @Override public void run() { while(true) { try { Thread.sleep(1000); //1초를..
-
[Java 기초] 멀티 스레드 - 1개발언어/Java 2019. 5. 13. 20:44
1. 멀티스레드란? 스레드(thread)는 본래 '실 가닥'을 뜻하는 용어이다. Java에서는 이것을 '한 가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어놓은 것'을 말한다. 즉, 스레드를 사용하면 여러개의 작업에 스레드를 줘서 스레드를 가진 작업들은 동시에 일을 처리할 수 있게 해주는 기법을 의미한다. 2. 작업스레드의 생성/실행 작업스레드는 Thread 클래스로부터 직접 생성하는 방법과 Thread 하위 클래스로부터 생성하는 두 가지 방법이 존재한다. 1) 직접생성 Thread는 java.lang.Thread 클래스를 통해 생성할 수 있는데, 작업 스레드 객체를 만들기 위해서는 아래 코드처럼 Runnable을 매개변수로 받는 생성자를 호출해야한다. Thread t1 = new Thre..
-
[번역] Java 8의 동시성(Concurrency)개발언어/Java 2019. 5. 1. 23:35
부제 : Java8의 lambda에서 가장 중요한 원자적 변수와 동시성Map 이 튜토리얼은 동시성 API의 핵심 개념인 Atomic Variables and Concurrent Maps 에 대해서 이야기하고자 합니다. 두 개념 모두 Java 8에서 람다를 설명하는데 있어서 정말 중요한 개념입니다. 1. AtomicInteger 패키지 java.concurrent.atomic은 원자적 연산을 수행하기 위해 여러 유용한 연산들을 포함하고 있습니다. 연산이 원자적이라는 것은 `synchronized` 키워드나 lock을 사용하지 않고도 멀티스레드로 병렬 연산을 안전하게 실행할 수 있을 때를 말합니다. 내부적으로, 원자적인 클래스들은 comapre of swap(CAS)라는 원자적 명령어를 빈번하게 사용합니다...
-
웹 캐시개발기초/Web 2019. 4. 23. 20:16
컴퓨터 공학을 전공했거나 개발을 조금 해보신 분이라면 캐시라는 단어는 굉장히 익숙하실겁니다. 그리고 우리는 캐시가 애플리케이션의 처리 속도를 높여준다는 것을 알고 있습니다. 사용률이 높은 데이터를 캐시에 저장해두었다가 필요시에 빠르게 꺼내쓸 수 있도록 해서 처리속도를 높이죠. 과연 캐시는 구체적으로 어떻게 처리속도를 높일까요? 1. 웹캐시, 어디에 쓰나? 구체적으로 웹캐시에 대해 알아보기 전에 웹 캐시를 왜 쓰는지부터 살펴보고자 합니다. 그리고 결론부터 말씀드리자면 일반적으로 사용자가 만드는 데이터 보다는 서비스에서 제공하는 컨텐츠(뉴스,허브,실시간 검색어 등)와 같이 서버에서 반복적으로 제공되는 데이터를 사용자에게 보여주고자 할 때 사용합니다. 그리고 실제로 사용할 땐, 아래의 조건을 만족한다면 캐시 ..
-
GraphQL이란 무엇인가?SW개발/GraphQL 2019. 2. 10. 21:25
1. GraphQL? - GraphQL의 정의와 특징 1) GraphQL이 뭐에요? 구글창에 GraphQL이라고 치면 아래와 같은 정의가 나온다. 출처: 위키백과 위에 설명된 내용에서 알 수 있듯이 GraphQL은 1. Query Language 이다.2. REST 구조를 대체할 수 있다.3. 클라이언트는 필요한 데이터의 구조를 지정하여 필요한 데이터만 받아낼 수 있다. 이렇게 요약할 수 있다. 그리고 이것들을 하나로 요약하면, GraphQL의 핵심은 클라이언트가 필요한 리소스(이 용어가 어렵다면 data라고 생각하면 됩니다.)를 url 경로가 아니라 Query를 통해 표현한다는 것! 이걸 좀 더 간단하게 말하면, 클라이언트에게 필요한 데이터만 쿼리를 통해 가져올 수 있다는 것! GraphQL은 SQL처..