분류 전체보기
-
[자료구조] 해시 구현하기 #javaDataStructures 2021. 10. 5. 16:46
해시 자료구조 자바로 구현하기 해시 자료구조 설명 해시 자료구조 JAVA 구현 Hash.java public class Hash implements HashInterface{ class HashElement implements Comparable{ K key; V value; public HashElement(K key, V value){ this.key = key; this.value = value; } @Override public int compareTo(HashElement o) { return (((Comparable)this.key).compareTo(o.key)); } } int numElements; int tableSize; //array size double maxLoadFactor; ..
-
[자료구조] 해시(hash) #javaDataStructures 2021. 10. 1. 22:37
해시(Hash) 해시 자료구조 설명 해시 자료구조 JAVA 구현 해시 (hash) linkedList 에서 원하는 요소를 찾기 위해선 처음부터 끝까지 모든 요소를 탐색해야 합니다. n개의 요소가 있다면 O(n)의 시간복잡도가 걸리게 됩니다. 이것은 매우 비효율적입니다. 여러 상황에서 빠르게 데이터를 추가하거나 제거하도록 하고 싶었습니다. 그리고 무언가 찾아야 할때 빠르게 찾을 수 있어야 했습니다. 해시는 이러한 단점을 해결 할 수 있습니다. Hash는 Key, 그리고 연관된 Value를 가지고 있습니다. 모든 요 소를 살펴본 후 동일한 노드를 찾는 LinkedList와 달리 Hash는 Key가 주어지면 빠르게 Value를 찾을 수 있습니다. Hash는 Key와 Value를 저장하기 위해 연상배열(Asso..
-
[프로그래머스] 복서 정렬하기 #JAVAAlgorithm Solving/Programmers 2021. 9. 7. 15:05
[프로그래머스] 복서 정렬하기 #JAVA 코드 public class Solution { public static void main(String[] args) throws IOException{ solution(new int[]{50,82,75,120}, new String[]{"NLWL","WNLL","LWNW","WWLN"}); solution(new int[]{145,92,86}, new String[]{"NLW","WNL","LWN"}); solution(new int[]{60,70,60}, new String[]{"NNN","NNN","NNN"}); } public static int[] solution(int[] weights, String[] head2head) { int[] answer =..
-
[GoF] 추상 팩토리 , Abstract FactoryGof Design Pattern 2021. 9. 6. 16:27
추상 팩토리 , Abstract Factory 추상 팩토리 패턴이란? 서로 연관이 있는 객체들을 묶어서 팩토리 클래스로 만들고, 이를 팩토리 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴. 즉, 여러 제품군을 한꺼번에 생성하는 패턴이다. 추상 팩토리 패턴 왜 사용할까? 구체적인 클래스를 생성하지 않고도 서로 연관된 여러 객체의 군(cluster)를 생성하기 위한 인터페이스를 제공하기 위해 사용합니다. 예를 들어 DB 종류에 따라 DAO 클래스가 달라져야 한다고 할 때, 현재 사용해야 하는 DB의 종류에 따라 DAO 인스턴스를 한꺼번에 생성하도록 할 수 있습니다. 객체가 생성되고 구성되고 표현되는 방식과 상관 없이 시스템을 독립적으로 만들 수 있습니다. 하나 이상의 제품군들 중 하나를..
-
[GoF] 프로토타입 패턴, Prototype patternGof Design Pattern 2021. 9. 3. 15:20
프로토타입 패턴, Prototype pattern 프로토타입 패턴이란? 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자신을 복제하는 패턴을 말한다. 프로토타입 패턴 왜 사용할까? 정의한 클래스의 인스턴스 생성과정이 복잡하거나 여러 조합에 의해 생성이 되어야하는 경우가 있습니다. 예를 들어, 객체를 생성해서 DB로부터 데이터를 가져와야하는 경우가 있습니다. 그렇다면 매번 객체를 생성할때마다 DB 트랜잭션이 발생하게 되는데 이는 꽤나 많은 비용을 소모하는 행위입니다. 이 때 하나의 프로토타입을 만들어 초기화해두고 이를 복제해서 사용 및 수정하면 비용을 많이 아낄 수 있습니다. 프로토타입 패턴 을 사용하게 되면 프로토타입 속성값을 활용한 객체 생성을 할..
-
[GoF] 싱글톤 패턴, Singleton patternGof Design Pattern 2021. 9. 2. 14:30
싱글톤 패턴, Singleton pattern 싱글톤 패턴이란? 싱글톤 패턴은 객체가 오직 1개만 생성되야 하는 경우에 사용되는 패턴입니다. 싱글톤은 클래스의 인스턴스는 오직 하나임을 보장하며 이 인스턴스에 접근할 수 있는 방법을 제공합니다. 싱글톤 왜 사용할까? 예를들어, JDBC의 커넥션을 관리하는 커넥션 풀은 객체가 여러 개 생성되면 설정 값이 변경될 위험이 생길 수 있습니다! 클래스에서 만들 수 있는 객체를 오직 하나로 만들어서 이에 대한 접근을 하나로 통일하여 제공한다. 자바에서는 CPP와 달리 전역 변수가 존재하지 않으므로 객체가 하나만 존재하도록 설계하고 접근 메서드를 제공한다. 싱글톤을 사용하게 되면 유일하게 존재하는 객체로의 접근을 통제 할 수 있다. 전역 변수를 사용함으로써 발생되는 문..
-
[객체 지향 설계] SOLID 원칙JAVA 2021. 9. 1. 20:04
SOLID 원칙 안녕하세요? 장장스입니다. 오늘은 객체 지향 설계의 기본 원칙으로 알려져 있는 SOLID 원칙에 대해 정리해보겠습니다. [S] 단일 책임 원칙(SRP: single responsibility principle) 하나의 클래스는 하나의 기능만을 갖도록 구현한다. 즉, 어떤 클래스를 변경하는 이유는 하나이어야 한다. 한 클래스에서 여러 기능을 제공하게 되면 유지보수가 어렵다. [O] 개방-폐쇄 원칙 (OCP: open/closed principle) 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 인터페이스를 상속받아 구현하는 클래스는 여러개가 될 수 있다. (확장의 개념) 인터페이스가 변경되면 인터페이스를 상속받은 클래스는 변경이 필요하게 된다. (변경의 개념) 인터페이스나 추상클래스를 ..
-
[OS] 데드락 (Deadlock) - 교착상태OS 2021. 8. 16. 15:59
데드락 (Deadlock) Deadlock (교착상태) 란? 프로세스나 스레드가 결코 일어날 수 없는 특정 이벤트를 무한정 기다리는 상태를 말한다. 👌 데드락의 발생조건 4가지 데드락에 걸리기 위해서는 4가지 요건이 필요합니다. 1. 상호 배제 조건 (Mutual exclusion condition) 프로세스는 한번에 하나의 자원만 사용 할 수 있다. 사용 중인자원을 다른 프로세스가 사용하기 위해서는 사용중인 자원이 해제될 때까지 기다려야 한다. 2. 점유와 대기 조건 (hold-and-wait condition) 자원을 최소한 하나 보유하고 다른 프로세스에 할당되어 사용중인 자원을점유하기 위해 기다려야 한다. 3. 비선점 조건(nopreemption condition) 이미 할당되어 사용중인 자원을..
-
[OS] Race Condition 경쟁상태란?OS 2021. 8. 15. 16:46
(Race Condition) 경쟁상태란? Race Condition? Race Condition이란 두 개 이상의 cocurrent한 프로세스(혹은 스레드)들이 하나의 자원(리소스)에 접근하기 위해 경쟁하는 상태를 말합니다. Critical Section(임계영역) 통장에 돈이 100만원 있습니다. 지난달에 친구에게 빌렸던 50만원을 갚으려고 이체를 하고 있었습니다. 계좌번호와 금액을 입력하고 송금 버튼을 눌렀습니다. 그런데, 오늘 마침 카드값 70만원이 빠져나가는 날입니다. 정말정말 우연히 저의 이체와 카드값 이체가 동시에 일어났습니다. 그런데 두 이체가 통장에 있는 잔액을 확인 했을 때 100만원으로 이체들이 모두 성공해 버렸습니다. 은행에 비상이 걸렸습니다! 이런 일이 계속 반복된다면 은행은 곧 ..
-
[Git] remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. #토큰 인증 #소스트리etc 2021. 8. 14. 19:03
git 인증 오류 인증 오류 소스 트리 사용하다가 갑자기 뜬금 에러가 났습니다. (뭐냐..) 해결책 공유합니다. remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: unable to access 'https://github.com/XXX/XXX.git/': The requested URL returned err..