java 107

java 오버로딩(overloading)과 오버라이딩(overriding)

오버로딩, 오버라이딩 오버로딩(Overloading) 메소드 이름이 같지만, 매개변수에 따라 다른 것으로 판단 한번 예를 들어보겠다. 오버로딩 사용 먼저 다음과 같이 메서드를 정의해 준다. class OverloadingMethods { public void ryoochan(Integer iq){ System.out.println("류찬의 아이큐는 " + iq + " 입니다."); } public void ryoochan(String look){ System.out.println("류찬의 외모는 " + look + " 입니다."); } }보다시피 ryoochan은 같은 이름을 가진 메서드인데, 매개변수가 Integer, String으로 각각 다르게 설정되어 있다. public void 오버로딩테스트() ..

이론 정리/java 2023.01.13

java에서 병렬성

java에서 병렬성 일단 이 병렬처리는, 엄청나게 많은 데이터를 처리할 때에 하나로 다 하는것보다 나눠서 처리시켜서 작업 처리 시간을 줄이는 것에 목적이 있다. 참고로 이거 데이터 나누고 / 병렬 쓰레드 만들고 / 다시 합치고 등등...에서 시간을 잡아먹어서 안하느니만 못한 경우도 있다. 그래서 요소가 많을때 주로 한다고 한다. 동시성, 병렬성 일단 동시성이랑 병렬성이 뭔지 좀 알고 넘어가자. 동시성 하나의 코어에서 여러 쓰레드가 작업 동시에 진행되는것이라기 보다는 그냥 빠르게 돌아가면서 실행하는것 병렬성 여러 코어에서 작업을 진행 실제로 여러개의 작업이 병렬적으로 실행되는것 이런 느낌이다. 포크조인 프레임워크 자바 병렬 스트림은 요소들을 병렬 처리하기 위해 포크조인 프레임워크(JVM내부에 있는 프레임워..

이론 정리/java 2023.01.12

java 깊은복사 vs 얕은복사(feat.clone)

깊은복사 vs 얕은복사(feat.clone) 간단하게 말하면 얕은복사 객체의 주소값을 복사함 깊은복사 객체의 실제 값을 복사함 이거임. 솔직히 뭐 딱히 쓸말이 없긴하다... 그래도 좀 상세히 알아보아요 얕은복사 먼저 얕은복사이다. @Getter @Setter @AllArgsConstructor public class Person { private String name; private int iq; }이런 식으로 Person이라는 객체를 선언해 줄 것이다. 그리고 @Test public void 복사() { Person person = new Person("류찬", 200); Person ryoochan = person; ryoochan.setIq(300); System.out.println("본래의 Ob..

이론 정리/java 2023.01.02

java의 Equals and HashCode(feat. HashMap)

Equals and HashCode(feat. HashMap) 보통 Spring boot를 사용할 때에 class에서 equals랑 hashcode를 같이 정의하고는 한다. 그리고 lombok에는 아예 @EqualsAndHashCode 라는 애가 있어 두개를 같이 사용할수도 있다. 그럼 이녀석들이 무엇일까? Default 먼저 이런 class를 정의해 주자. 해당 class는 RyooChan의 intelligence와 look을 인자로 갖고 있다. 이런 식으로 Object를 가져와서 값이 동일한지를 검사해 준다. Test결과 두 객체는 서로 다르다. 참고로 저거 equals를 조금 공부해 봤으면 아니 얘는 값을 비교하는건데 왜 달라?? 라고 생각할 수 있을거같은데 Object를 equals를 비교하면 요..

이론 정리/java 2022.12.25

java hashmap의 시간복잡도에 관해서

HashMap은, Map인터페이스의 컬렉션 중 하나이다. 이 HashMap은 key-value로 하나의 key가 하나의 value를 갖도록 한다. 이전에 ArrayList와 LinkedList의 차이점에 대한 글을 작성한 적이 있다. 각각의 내용들에 대해서 생각해 보면, 두 자료구조 모두 값을 읽어오거나 변경할 때에 시간복잡도를 고려해줄 필요성이 있었다. 근데 이 HashMap은 값을 넣거나 변경할 때 모두 시간복잡도가 O(1)이다!! 이게 어떻게 가능할까? Put의 시간복잡도 HashMap의 동작 방식 위에서 설명하였듯 HashMap은 하나의 key가 하나의 value를 갖는다. 이 key를 찾아가기 위해서 어떠한 key가 입력되면 java에서는 이곳에 해시함수를 적용시켜 고유 index를 만든다. 예..

이론 정리/java 2022.12.25

generic

java 제네릭(generic) type? Data type을 일반화한다는 의미. generic을 사용해서 컴파일 하는 동안 클래스 혹은 메서드에서 사용할 내부 데이터 타입을 지정할 수 있다. -> 해당 클래스에서 사용할 데이터의 타입을 외부에서 지정한다. 데이터 타입을 미리 지정한다?? 한번 보여드림ㅇㅇ 일단 위에서 설명한것처럼 generic은 클래스 혹은 메서드 에서 사용하는 친구이다. class RyooChan { private T intelligence; void setIntelligence(T intelligence) { this.intelligence = intelligence; } T getIntelligence() { return intelligence; } }참고로 이거는 Type이라 T..

이론 정리/java 2022.12.22

싱글톤 패턴

싱글톤 패턴 인스턴스를 오직 한개만 제공하는 클래스 인스턴스를 오직 한개만 만들 수 있어야 한다. 그렇게 만들어진 하나의 인스턴스에 글로벌하게 접근할 수 있어야 한다. 이제 설정이나 그런것들은 싱글톤으로 해주면 될것이다. private Settings() {} private static Settings instance; public static Settings getInstance() { return instance } 이렇게 해주면 instance를 필요할 때에 getInstance를 호출해서 만들어 줄 것이다. 근데 싱글톤은 하나의 인스턴스만을 가질수 있다고 했다. 어떻게 이 싱글톤 패턴을 구현해 줄까? 1. private 생성자에 static메소드를 사용해서 싱글톤 구현 private Setting..

이론 정리/java 2022.12.06

java의 volatile

java의 volatile java변수를 Main Memory에 저장하겠다는 것이다. 이게 뭐냐...하면 말그대로 main memory에 값을 저장한다는거다. 사실 이거 이해하려면 cache에 대해서 조금 알고오면 편하다. 자바는 사실 값을 저장하거나 읽어올 때에 이거를 CPU cache를 통해 진행한다. 이렇게 되면 속도에 이득이 필요하지만... 멀티 쓰레드 환경에서 좀 문제가 있을 수 있다. 멀티 쓰레드에서의 CPU cache 문제 MultiThread에서는 보통 Task동안 Main Memory에 있는 값을 CPU에 Caching한다. 그리고 이거를 읽거나, 쓰거나 등등의 연산을 취하게 되는데 Main Memory에 특정 값이 저장되어 있다. (RyooChan = "Genius") 1번 쓰레드가 M..

이론 정리/java 2022.12.06

Go의 GC에 대해 (feat. java)

GC가 일단 뭔데? C/C++을 배웠던 사람은 알텐데 얘들은 메모리를 사용할 때 필요할 때에 생성하고, 필요가 다하면 해제해 주었다. 이는 메모리의 관리 측면에서 굉장히 좋지만(쓸데없이 메모리를 먹는 애들이 없으니까 퍼포먼스가 뛰어나다) 매번 이를 적절하게 할당하고 해제해야 하기 때문에 아주 귀찮다. 그래서 매번 메모리를 해제하는걸 그냥 해주는 녀석이 생겨났고, 이녀석이 Garbage Collector 즉 GC이다. STW : Stop The World GC의 동작동안 다른 쓰레드의 작업은 모두 중단된다. 즉, 가비지 컬렉터가 동작하게 되면 모든 작업이 멈추게 된다는 것이다 그리고 이 STW시간을 줄이는 것이 바로 GC튜닝이다. java에서의 GC 한국에서 웹개발을 할 때에 가장 보편적으로 사용되고, 보..

Java에서 기본 타입과 참조 타입의 차이

Java에서 기본 타입과 참조 타입의 차이 기본 타입(Primitive Type)이란? == 원시 타입 우리가 실제로 데이터 값을 저장할 때에 사용하는 값이다. 정수형 int, long, short, byte ... 실수형 float, double 문자형 char 논리형 boolean 참조 타입(Reference Type)이란? 이름에서 알 수 있듯, 객체의 번지를 참조하는 타입이다. 즉 객체의 주소를 저장하고, 이를 참조하여 사용하는 타입이라 할 수 있다. String, Long, Integer ... 배열, Enum, 클래스, 인터페이스 등을 사용해서 선언한 변수는 메모리 값을 가지게 되는데, 이런 애들을 참조 타입이라 한다. 둘 간의 간단한 차이 저장 장소의 차이 기본 타입은 스택 영역에, 참조 타..

이론 정리/java 2022.05.15