반응형

분류 전체보기 14

Java의 HashMap에 대한 고찰

시작하기 전에..HashMap은 삽입과 조회를 모두 O(1)의 시간에 제공해줍니다.이러한 특성 때문에 HashMap은 가장 자주 사용되는 자료구조 중 하나인 것 같습니다.HashMap은 어떤 방법으로 이러한 시간복잡도를 제공해주는지 이해하고 싶어 내부 구조를 파헤쳐 봤습니다. 아래 내용은 HashMap의 내부 구조를 파헤치면서 배운 점과 고민했던 생각을 정리한 글입니다.'Java를 설계한 사람들이 왜 이렇게 만들었을까?'에 대한 제 대답이 많이 들어있습니다.공식적인 내용이 아니거나 잘못된 내용이 있을 수도 있다는 점에 유의해 주세요. 목차HashMap의 핵심 아이디어에 대해서hash collision이 발생하면 어떤 일이 생길까?HashMap의 loadFactor에 대해서31이라는 매직 넘버는 왜 이렇게..

객체 지향 설계의 5원칙(SOLID)

서론 자바를 공부하는 개발자라면 객체지향의 5원칙 SOLID에 대해서 들어본 적이 있을 것이다. 하지만 해당 부분을 공부하다 보면 너무 추상적이라고 느껴져 포기하거나 공부하더라도 몇일 후면 까먹는 일이 많다. 오늘은 객체지향의 5원칙을 하나씩 살펴보고 비유와 함께 확인하면서 왜 이것을 지켜야 하는지 생각해보려 한다. 객체지향의 5원칙에는 아래 5가지 종류가 있다. 1. SRP(Single Responsibility Principle) : 단일 책임 원칙 2. OCP(Open Closed Principle): 개방 폐쇄 원칙 3. LSP(Liskov Substitution Principle): 리스코프 치환 원칙 4. ISP(Interface Segregation Principle): 인터페이스 분리 원칙..

Java 2023.05.30

[JAVA] Singleton 패턴에 대해 알아보자

서론 Singleton패턴이 무엇이고 언제 쓰이는지 어떻게 구현하는지에 대해 작성하였으며 구현 방식은 Java언어를 통해 작성하였다. HeadFirst DesignPattern 책을 참고하여 작성하였다. 목차 1. Singleton 패턴이 무엇인가? 2. 고전적인 Singleton 패턴 구현방법 3. 개선된 Singleton 패턴 구현방법 1. Singleton 패턴이 무엇이고 언제 사용되는가? 우리가 생성하는 객체중에서는 프로그램에서 유일하게 만들어져야하는 객체들이 있다. 예를 들어, 스레드 풀, 사용자 설정을 처리하는 객체, 로그 기록용 객체, 프린터나 그래픽 카드 같은 디바이스를 위한 디바이스 드라이버 객체가 이런것이다. 이러한 객체들은 프로그램 내에서 유일해야 하며, 만약 여러개의 객체가 생성된다..

Java 2023.04.11

String vs StringBuffer vs StringBuilder

Java에서는 같은 String이라도 String,StringBuffer,StringBuilder와 같이 비슷해보이는 다양한 클래스를 제공한다. 위 3가지 클래스를 비교해보고 어떤 차이점이 있는지 알아보자. 궁금증? 필자는 스터디중 아래와 같은 코드를 만나게 됐다. String myName = "jinwoo"; String yourName; yourName = myName; System.out.println(yourName); yourName = "Ayyan"; System.out.println(yourName); System.out.println(myName); 위 코드를 본 필자는 myName과 yourName은 참조변수이기 때문에 1. yourName은 myName과 함께 "jinwoo" 문자열이 ..

Java 2023.04.03

JPA Entity Unique key지정 방식 비교

JPA에서 제공하는 UNIQUE KEY 지정방식에는 두가지가 있다. // 1번 방식 @Table(name="Member", uniqueConstraints = { @UniqueConstraint( name="NAME_AGE_UNIQUE", columnNames={"NAME","AGE"} )}) /// 2번 방식 @Column(name="name",unique = true) 유니크 키를 지정하는 방식에는 두가지 방법이 있다. @Table 어노테이션에 속성값을 넣는 방법 @Column 어노테이션에 속성값을 넣는 방법 다중 칼럼에 유니크 키 걸기 2번 방식의 경우에는 필드위에 @Column 어노테이션을 통해 유니크 키를 추가하는 방식이므로 다중칼럼에 유니크 키를 걸 수가 없다. 이름과 폰번호가 모두 중복되는 ..

JPA 2023.02.15

동등성(Equality) VS 동일성(Identity)

동등성 vs 동일성 동등성: 두 객체의 내용이 완전히 동일한 것 동일성: 두 참조변수가 같은 메모리 공간을 가리키고 있는경우. 즉 주소값이 같은경우 Member member1=new Member('이안',1); Member member2=new Member('이안',1); Member member3=member1 System.out.println(member1==member2); // 1 System.out.println(member1==member3); // 2 Java에서 참조변수 끼리의 ==연산은 참조변수의 값. 즉, 참조변수가 가리키고있는 메모리 주소의 값을 비교한다. 따라서 이는 동일성을 비교하는 것으로 볼 수 있다. 1번: member1==member2? Java에서 객체가 생성될 때 힙공간에..

Java 2023.02.15

다중 스레드 모델(Multithreading Models)

스레드는 크게 사용자 스레드(user thread) 와 커널 스레드(kernel thread)로 나뉜다. 사용자 스레드는 커널 위에서 지원되며 커널의 지원 없이 관리된다. 반면 커널 스레드는 윈영체제에 의해 직접 지원되고 관리된다. 사용자 스레드는 커널 스레드에 매핑되어 작업이 이루어진다. 사용자 스레드와 커널스레드의 연관 관계 모델에는 일반적으로 세 가지 방법이 있는데 1. 다대일 모델 2. 일대일 모델 3. 다대다 모델 이번 포스팅에서는 각각의 모델에 대해 알아보고 장단점을 알아보도록 하겠다. 1. 다대일 모델(Many-to-One Model) 다대일 모델에서는 여러 user thread를 하나의 kernel thread로 사상한다. kernel thread가 하나밖에 없으므로 봉쇄형 system c..

운영체제 2023.01.05

실시간 CPU 스케줄링

실시간 시스템은 크게 두가지로 구분될 수 있다. 연성(soft) 실시간 시스템과 경성(hard)실시간 시스템이다. 연성 실시간 시스템: 중요한 프로세스가 실행되는 시점에 관해 아무런 보장도 하지 않는다. 단순히 중요 프로세스가 다른 프로세스에 비해 높은 우선순위를 가지는 것만을 보장한다. 경성 실시간 시스템: 태스크는 반드시 마감시간까지 서비스를 받아야하며 마감시간이 지난 이후에 서비스를 받는 것은 서비스를 전혀 받지 않는것과 동일한 효과를 갖는다. 예를들어 자율주행 자동차에 들어가는 시스템을 생각해보자. 자율주행 자동차는 도로를 주행하던 중 갑자기 끼어든 장애물을 만났다. 장애물 회피 시스템은 즉시 ReadyQueue에 들어갈 것이다. 20ms후 장애물에 충돌될것으로 예상될 때, 25ms후에 장애물 회..

운영체제 2023.01.04

삽입 정렬(Insertion Sort)

이전 포스팅에서는 선택 정렬에 대해 알아보았다. https://ayaan-dev.tistory.com/6 선택 정렬(Selection Sort) 선택 정렬 알고리즘은 https://visualgo.net/en/sorting 사이트로 들어가면 시각화 해서 확인할 수 있다. 데이터가 정렬되는 과정을 시각화한 영상을 참고하면서 포스팅을 함께 읽으면 정렬 알고리즘을 ayaan-dev.tistory.com 이번 포스팅에서는 선택 정렬보다 구현하기 좀 더 복잡하지만 시간복잡도가 더 빠른 삽입 정렬에 대해 알아보겠다. 마찬가지로 아래 사이트에서 삽입 정렬 알고리즘을 시각화한 영상을 확인할 수 있다. https://visualgo.net/en/sorting Sorting (Bubble, Selection, Insert..

선택 정렬(Selection Sort)

선택 정렬 알고리즘은 https://visualgo.net/en/sorting 사이트로 들어가면 시각화 해서 확인할 수 있다. 데이터가 정렬되는 과정을 시각화한 영상을 참고하면서 포스팅을 함께 읽으면 정렬 알고리즘을 이해하는데 큰 도움이 될 것이라 생각한다. 정렬 알고리즘 다른 포스팅 더보기 2023.01.01 - 삽입 정렬(Insertion Sort) 선택 정렬(Selection Sort) array=[7,5,9,0,3,1,6,2,4,8]; for i in range(len(array)): min_index=i for j in range(i+1,len(array)): if array[min_index]>array[j]: # min_index=>max_index로 고치고 부등호를 반대로 하면 내림차순으로..

반응형