본문 바로가기

공부/JAVA11

[디자인패턴] 템플릿 메서드 패턴(Template Method Pattern) singleton Template Method우리는 '템플릿'이라는 것을 많이 사용해왔다. 템플릿은 일정한 틀이나 형식같은 것을 말한다. 일종의 뼈대라고 보면 된다. ppt 템플릿을 사용해 템플릿의 일정한 틀에 맞추어 글만 바꾸어서 ppt를 작성하듯이, 템플릿 메소드는 일정한 뼈대(추상 메소드)에 살만 덧붙여서 구체적인 메소드(하위 메소드)를 얻게 된다.하위 클래스들의 뼈대가 될 메소드들을 추상 클래스에 정의함으로써 알고리즘의 구조는 변하지 않도록 한다. 공통으로 적용되는 메소드들은 일반 메소드로 구현하고, 하나 이상의 메소드를 추상 메소드로 정의해 서브클래스에서 확장구현한다. Example뭐 뼈대고 뭐고 어쩌라는걸까~ 할 수 있으니 쉽게 예를 들어보자. 오늘 집에 친구들이 놀러오기로 했는데, 친구들이 .. 2019. 1. 4.
[디자인패턴] 싱글톤(Singleton) singleton Design Pattern디자인 패턴은 프로그램 개발에서 자주 발생하는 문제를 해결하기 위한 방법 중 하나로, 특정 디자인 규약을 설계 시 간편하게 재사용해서 적용할 수 있도록 패턴화한 솔루션이다.이러한 디자인 패턴의 종류는 아주 다양한데, 전부는 어렵더라도 시간날 때마다 하나씩 천천히 정리해나가보려고 한다.뭐니뭐니해도 디자인 패턴 중 가장 유명한 패턴은 싱글톤 패턴이 아닐까 해서 오늘은 싱글톤 패턴을 정리해볼 것이다. Singleton싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.[출처] 위키백과이렇게 보면 뭔가 말이 좀 어려운데.. 2018. 11. 19.
[Thread] 동기화와 교착상태 Thread Synchronization동기화(synchronization)스레드는 자원을 공유하기 때문에 동시에 여러 스레드가 실행되면 공유 자원에 대해 동기화가 발생할 수 있다.실행 흐름은 순차적으로 진행되지만, 자원은 한정적인데 여러 스레드가 동시 접근해서 사용하려고 하면 문제가 생기게 된다.공유 메모리에 대해서 한 번에 한 스레드만 공유자원에 접근할 수 있도록 만들어 동기화 문제를 해결할 수 있다. 임계영역(critical section)멀티스레드 프로그램에서 공유 자원이 참조 가능한 코드 영역을 말한다. 한 스레드가 사용 중인 자원은 작업이 끝날 때까지 lock을 걸어서 다른 스레드가 사용할 수 없도록 한다.자바에서는 임계영역을 지정하기 위해 동기화 메소드와 동기화 블록을 제공한다. 스레드가 동.. 2018. 6. 11.
[Thread] Thread Thread Process와 Thread 프로세스는 운영체제에서 실행되고 있는 하나의 프로그램을 말한다. 이 프로세스는 반드시 하나 이상의 스레드를 포함하게 되는데, 이 스레드는 프로세스 내에서 실행되는 독립적인 실행 흐름의 단위라고 할 수 있다. 즉, 경량화 된 프로세스라고 보면 된다. 프로세스에서 실질적인 일 처리는 이 스레드가 담당하게 된다. 프로세스는 완전히 독립적인 단위이므로 메모리 영역을 다른 프로세스와 공유하지 않는다. 하지만 스레드는 해당 스레드를 위한 스택메모리를 생성할 뿐 그 외 메모리 영역은 공유한다. 이 때문에 멀티 프로세싱 하던 일을 스레드로 구현하면 메모리 공간과 자원을 절약할 수 있다. 스레드를 활용해서 프로세스를 수행했을 때, 시스템 단위시간 당 데이터 처리량이 향상된다. 따.. 2018. 6. 11.
[자료구조] 비선형구조 자료구조(2) 자료구조(2) - 비선형구조자료구조에는 선형구조와 비선형구조가 있다. 자료구조(1)에서 선형구조에 대해 설명했었는데, 데이터를 순차적으로 나열하는 선형구조와 달리 비선형구조는 비선형적인 계층 구조를 나타낸다. 트리Tree그래프의 일종으로, 하나 이상의 노드(node)를 가진다. 각 노드는 엣지(edge, branch)로 연결된다.degree(차수) : 부속 트리의 개수 level(레벨, 깊이) : 루트노드로부터의 깊이 (루트노드의 level = 1)Parent node(부모 노드) : 노드 A가 B를 가리킬 때 A를 B의 부모 노드라고 한다. Child node(자식 노드) : 노드 A가 B를 가리킬 때 B를 A의 자식 노드라고 한다. Sibling node(형제 노드) : 부모가 같은 노.. 2018. 6. 8.
[자료구조] 선형구조 자료구조(1) 자료구조(1) - 선형구조효율적인 작업처리를 위해서 상황에 따라 적절한 자료구조를 취사선택해서 사용해야한다. 배열Array대부분의 프로그래밍 언어에서 사용 가능한 가장 기본적인 자료구조로, 번호(index)와 번호에 대응하는 서로 연관된 데이터로 이루어진다.데이터의 순서가 있으며 중복을 허용한다.index는 int 혹은 long형이다.배열은 선언과 동시에 길이를 지정한다. 그리고 그 길이는 변경 불가능하다. type[] arr = new type[n]; type[] arr = {value1, value2, ...}; type[][] arr = new type[n][m]; type[][] arr = {{value1-1, value1-2, ...}, {value2-1, value2-2, ..... 2018. 6. 5.
정규표현식(정규식, 표현식) Java 정규표현식 Java 정규표현식 자바에서는 정규식(정규표현식)을 이용해서 쉽게 특정한 패턴을 가지는 문자열을 검색하거나 패턴을 체크 할 수 있다.표현식뜻.하나의 임의의 문자 (백슬래시(\) 제외)?문자가 없거나 하나가 있음*문자가 없거나 하나 이상+하나 이상의 문자^문자열의 시작$문자열의 끝|or연산[]문자의 집합 또는 범위{}문자 및 문자열 반복 횟수 또는 범위()괄호 내 문자들을 하나의 묶음으로 인식해서 사용[0-9]숫자[a-z]알파벳 소문자[a-zA-Z]알파벳 대·소문자\d[0-9]\D숫자를 제외한 문자\s공백\S공백을 제외한 문자\w알파벳 또는 숫자\W알파벳과 숫자를 제외한 문자\특수문자를 패턴에 유효하게 사용하고싶을 때 특수문자 앞에 백슬래시를 넣어준다.(?i)대소문자 구분 없음 자주 쓰.. 2018. 6. 5.
Interface, Abstract Interface, Abstract Interface일종의 추상 클래스오직 추상메서드와 상수만을 멤버로 갖는다.Implements 키워드를 사용해서 class에서 상속받아 사용한다.상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록한다.Extends는 하나의 클래스만 상속 가능하나 Interface는 다중 상속이 가능하다.스프링에서 객체와 객체의 관계를 약화시키기 위해 사용한다. - DI(Dependency Injection)객체와 객체를 직접 연결시키는 것 보다는 인터페이스를 이용해 간접 연결 시키는 것이 나중에 객체를 수정하기에 편리하다. Abstract추상메서드를 하나 이상 가진 클래스자신의 생성자로 객체 생성 불가능하위 클래스를 참조하여 상위 클래스의 객체를 생성한다.하위 클.. 2018. 5. 31.
Overloading vs Overriding Overloading vs Overriding Overloading(오버로딩)같은 이름의 메소드를 여러개 정의하는 것매개변수의 타입이 다르거나 개수가 달라야 한다.return type과 접근 제어자는 영향을 주지 않음. Overriding(오버라이딩)상속에서 나온 개념상위 클래스(부모 클래스)의 메소드를 하위 클래스(자식 클래스)에서 재정의 2018. 5. 31.
Java란? JAVA JAVAJAVA는 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍 언어이며, 현재는 오라클사가 판권을 가지고 있다. 웹어플리케이션과 안드로이드에 특화되어있다. (일반 어플리케이션은 거의 개발하지 않음) JVM(자바 가상 머신)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다. 즉, 운영체제에 독립적이다.JAVA를 설치하면 jre가 설치되는데 이게 jvm(자바가 동작하기 위한 환경)이다. C언어는 컴파일하면 바이너리 코드(이진코드)로 변환된다. 이진코드는 운영체제마다 다르며 윈도우를 번역해서 만든 이진코드는 리눅스 OS에서 알아 듣지 못한다. (운영체제에 종속적이다.)리눅스용 C컴파일러(gcc)와 윈도우용 C컴파일러(boland c, visual studio)는 다르다.자바는 JVM이 .. 2018. 5. 31.