분류 전체보기 73

Thread와 Process의 차이

프로세스란.. 하나의 실행 단위를 이야기한다. 프로세스 전엔 프로그램이다 즉 메모리 영역엔 아직 안올라간 파일이다.프로그램을 실행하면 그 즉시 프로세스는 동작 한다. 이 상태를 동적인 상태라고 하는데 프로그램을 프로세스라고 하낟.프로세스 정의를 내일떄 실행되고 있는 컴퓨터 프로그램이라고 한다.    프로세스와 스레드의 작동 방식에 대한 더 자세한 설명위에서 프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다고 언급했었다. 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.   이와 다르게 스레드는 메모리를 서로 공..

Java 2024.11.09

Java ConcurrentHashMap

개발을 하다보면 자주 사용하는 Map이 있다. Map 구현체Map 인터페이스의 구현체로 HashMap, HashTable, ConcurrentHashMap 등이 있다. 이 셋은 과연 어떤 차이가 있을까?   Key, Value에 Null을 허용? Permalink우선 HashMap 같은 경우 key와 value에 null값을 허용한다.@Test void hashmap() { Map hashMap = new HashMap(); hashMap.put("a", null); hashMap.put(null, "a"); assertThat(hashMap.get(null)).isEqualTo("a"); assertThat(hashMap.get("a"..

카테고리 없음 2024.11.09

링크드 리스트 자료구조

링크드 리스트(Linked List) 내가 이해 하기론 링크드 리스트는 각 요소가 데이터와 다음 요소를 참조하는 정보를 포함하는 노드로 구성된다.   단순한 링크드 리스트는 뒤에값만 아는걸로 되어 있고 더욱 보안해서 나온 링크드 리스트는 양방향 링크드 리스트 ( doubly linked list) 마지막 노드가 처음 노드를 참조하는 형태인 원형 링크드 리스트(circular linked list) 등이 있다.   단방향 연결   해당 linked list 값이 0 ,1, 2, 3, 4 값이 있다면 0값은 그 뒤에 1이 있는걸 알고 2값 뒤엔 2가 있는거로 알고 2값 뒤엔 3이 있는걸 알고 있는 단 방향 연결값이다. 만약에 100000개의 값이 있다면 0에서 ---> 쭉쭉쭉 올라가서 99999개의 값까지 ..

Java 2024.11.08

자바 리플렉션(reflection)에 대해서 찾아보기

자바 리플렉션으로 예전에 잘못된 코드를 작성한적이 있다... 정확하는 리플렉션으로 엑셀 업로드시 벨리데이션 체크 로직을 구현 해본적이 있다. 분리 개념으로 작성 했다가 결국 나중에 찾아보니.. 동작 메소드 호출이고 런타임때 동작하는 코드로 어떤 오류가 나는지 추적 하기가 어려웠다. 제일 좋은 오류는 컴파일 오류인데.. 아무튼 서론이 길었다.  리플렉션은  힙 영역에 로드 된 Class 타입의 객체를 통해, 접근 제어자 상관없이 원하는 클래스의 정보에 접근해서 조작할 수 있도록 지원하는 API이다. 조작할수 있는건 어느정도 전부 조작이 가능한거 같다.필드, 메소드, 생성자등등 제가 생각하는 장점이라고 하면  1. 높은 유연성이 가지고 있다. - 어디에 국한 되지 않고 자바 리플렉션을 이용하면 단번에 가져올..

Java 2024.11.08

공변과 반공변에 대해

자바 제네릭을 보면서, 공변과 반공변의 이야기가 나왔다. 결론적으로 내가 이해 하기론공변은 을 하면 List를 받을시에 하위타입까지 읽을수 있게 처리를 할수 있고 반공변은 을 하면 본인 타입 포합 상위타입을 참조할수 있다고 이해하였다. 먼저 해당 상속간의 클래스 코드들입니다.  class User { public void good() { System.out.println("User Good"); } } class A extends User { @Override public void good() { System.out.println("1111"); } } class B ex..

Java 2024.11.05

JavaBean과 POJO

공부중에 POJO 라는 개념을 스프링에서 이러한 개념으로 구현 했다는 글을 본적이 있지만 공부 하는 겸 글을 작성해본다.  1. POJO ( Plain Old Java Object )- 특별한 요구사항 없이 순수 자바 객체로 작성한 클래스이고 복잡한 상속이나 인터페이스 없는 단순한 객체를 뜻한다. public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void se..

Java 2024.11.04

ArrayList의 자동 크기 증가

ArrayList는 기본 초기 용량이 10 입니다. 빈 ArrayList를 생성 하면 내부적으로 용량은 10 으로 설정됩니다.또한 자동 크기 증가 시점은 현재 배열의 크기가 가득 차면 새로운 배열을 할당합니다 크기는 이전 용량의 1.5배로 크기를 증가 시킵니다. 크기 증가 예시 입니다.초기 용량: 10요소 10개가 모두 채워지면, 용량이 1.5배 증가(10 + 5 = 15)요소 15개가 채워지면, 용량이 1.5배 증가(15 + 7 = 22)요소 22개가 채워지면, 용량이 1.5배 증가(22 + 11 = 33)  이렇게 빈번하게 크기가 할당되면 성능에 좋지 않아서 여러가지 방안이 있지만 다음과 같다. ArrayList 크기 증가 관리 방법자동 증가를 피하거나 성능을 최적화하기 위해 크기를 미리 조정할 수 ..

Java 2024.10.31

부동소수점에서 엡실론

프로그래밍상으로 소수점을 계산 할 일이 많습니다 특히 돈 관련 계산을 할때,  이번에도 결론적으로 말하자면, 실수를 다룰 때는 BigDecimal을 사용하면 됩니다.자바에서 다음과 같이 계산을 하였습니다  double a = 0.1; double b = 0.2; System.out.println(a+b); System.out.println(a+b == 0.3); 결과는0.30000000000000004 이유는 2진법으로 근사값을 저장하게 되며, 두 수를 더할 때 이 근사값으로 인해 0.3 대신 0.30000000000000004라는 오차가 나타납니다 그래서 개발자가 지정한 부동소수점에서 엡실론을 정하여 오차를 대략적으로 짐작하여 뺴주는 방식이다. 하지만 ..

Java 2024.10.31

오토 박싱 & 오토 언박싱

개발을 하면서 항상 이런 부분을 무지성하게 사용 된거 같아서 글을 작성합니다. java 기본 타입 : int, long, float, double, char, short, byte, booleanjava  Wrapper 클래스 :  Integer, Long, Float, Double, Character, Short, Byte, Boolean    오토 언박싱 오토박싱의 반대 개념으로 래퍼 클래스의 객체를 해당 기본 데이터 타입으로 자동으로 변환하는 것을 말한다다. 예를 들어 Integer 타입의 객체를 int 타입으로 할당하면 자동으로 오토 언박싱이 발생한다. // 오토박싱 예제int i = 10;Integer integerObj = i; // int 타입의 값을 Integer 객체로 자동 변환// 오토..

Java 2024.10.30