Java

    String str = ""; 과 String str = new String("");

    문자열의 생성Java에서는 두가지 방식으로 문자열을 선언할 수 있다.String str1 = new String("madplay"); String str2 = "madplay";new 연산자를 사용하면 heap 메모리에 적재가 되고 리터럴의 경우에는 heap안의 상수풀에 적재가 된다. 이것을 그림으로 표현하자면 다음과 같이 된다. 비교 equals, ==간단히 equals는 객체의 값으로 비교하고 ==는 객체의 주소값으로 비교하게 된다.String str1 = new String("aaa"); String str2 = new String("aaa"); System.out.println(str1 == str2); // false System.out.println(str1.equals(str2)); // t..

    Static (정적)

    Static (정적)

    0. 정적(Static) ? 정적 필드와 정적 메소드는 객체에 소속된 멤버가 아닌 클래스에 고정된 멤버이다. 클래스로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리된다. 1. 정적(Static) 멤버 생성 Static을 통해 생성된 정적멤버들은 Heap영역이 아닌 Static 영역에 할당된다. Static 영역에 할당된 메모리는 모든 객체가 공유하여 어디서든지 참조할수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기때문에 프로그램 종료시까지 메모리가 할당된 채로 존재하게 된다. Static을 너무 남발하게 되면 만들고자 하는 시스템 성능에 악영향을 줄 수 있다.

    대용량 요청 시 API limit

    대용량 요청 시 API limit

    대용량 요청 시 해결 방안 1억명의 이용자에게 알림을 보내야하는 상황을 가정을 해보자. 고려사항 1. 한 번에 많은 요청 시 서버다운 발생 2. 불필요한 비용 발생으로 효율적인 환경 x 해결방안 - Leaky Bucket - Token Bucket - Sliding Window Counter 1. Leaky Bucket - 네트워크로 가는 데이터의 양을 일정하게 유지를 하고 트레픽 체증을 일정하게 유지한다. - 일정 용량의 Bucket을 정해놓고 그 안에 담긴 데이터는 일정한 속도로 떨어진다. - 데이터가 Bucket의 용량을 초과하게 되면 버리게 된다. - 입력 속도 > 출력 속도 : Bucket에서 누적 발생 - 누적 > 버킷 용량 : 오버플로 발생, 데이터 패킷 손실 2. Token Bucket -..

    제네릭 타입소거 (Generic type Erasure)

    Generic Type Erasure Java에서는 제네릭 클래스를 인스턴스화 할 때 해당 타입을 지운다. 그 타읍은 컴파일시에만 존재하고 컴파일된 코드에서는 어떠한 타입 파라미터의 정보를 찾아볼 수 없다. 제네릭의 컴파일의 과정 //자바코드 public void test(){ List strings = new ArrayList(); } //바이트 코드 public test()V L0 LINENUMBER 8 L0 NEW java/util/ArrayList DUP INVOKESPECIAL java/util/ArrayList. ()V ASTORE 1 L1 LINENUMBER 9 L1 RETURN L2 LOCALVARIABLE this Lexample/lezhin/timeline/controller/TestC..

    자바의 컴파일 과정

    자바의 컴파일 과정

    개발자가 .java 자바 소스코드를 생성한다. 자바 컴파일러에 의해 .java가 컴파일되어 .class 파일로 아직 컴퓨터가 읽을 수 없는 상태인 Java bytecode로 만든다. 컴파일된 변환 코드를 JVM의 Class Loder로 전달한다. Class Loader는 동적로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area에 올린다. 클래스 로더의 세부 동작 로드 : 클래스 파일을 가져와서 JVM의 메모리에 로드한다. 검증 : 자바 언어 명세 및 JVM 명세에 명시된 대로 구성되어 있는지 검사한다. 준비 : 클래스가 필요로 하는 메모리에 할당한다. 분석 : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경한다. 초기화 : 클래스 변수들을 적절한 값으로 초..

    [JAVA] Wrapper Class와 일급 컬렉션

    [JAVA] Wrapper Class와 일급 컬렉션

    Wrapper Calss 자바의 자료형에는 기본타입 (Primitive type)과 참조타입(Reference type)이 있다. 기본타입 : char, int, float, double, boolean 등 참조타입 : class, interface 등 기본 자료타입을 객체로 다루기 위해 사용하는 클래스들을 래퍼클래스라고 한다. 1. 종류 기본타입 : byte, char, int, float, double, boolean, long, short 래퍼클래스 : Byte, Character, Integer, Float, Double, Boolean, Long, Short 2. 사용 매게변수로 객체가 요구 될 때 기본형 값이 아닌 객체로 저장해야 할 때 객체간의 비교가 필요할 때 Wrapper class로 정..

    [JAVA] Lambda와 Stream

    [JAVA] Lambda와 Stream

    Lambda 익명 함수(Anonymous functions)을 지칭한다. 수학에서 사용는 함수를 보다 쉽고 단순하게 표한하는 방법이다. 두 개 이상의 입력이 이 있는 함수는 1개의 입력만 받는 람다 대수로 단순화 될 수 있다. ( Curring) 익명함수 ? 함수의 이름이 없는 함수 일급 객체(First Class citizen) 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 개체이다. 함수 값은 물론, 파라미터로 전달 및 변수에 대입 하는 연산도 가능하다. 장점 코드의 간결성 - 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표한할 수 있다. 지연연산 수행 - 지연연상으로 불필요한 연산을 최소화 할 수 있다. 병령처리 기능 - Multi Thread 로 병렬처리가 가능하다. 가독성..

    [JAVA] 이것저것..

    [JAVA] 이것저것..

    static void public private protected class super this @Override 0. 선언이란 메모리에 공간을 만드는 것이다. 1. void는 return값이 없다, return이 있을 경우에는 public int Exmaple()와 같이 "int" 처럼 반환되는 값의 반환형을 설정해 줘야한다. 2. static은 메모리에 제일 먼저 할당되어서 따로 인스터스를 생성하여 불러오지 않아도 된다. 3. 접근제어자는 public private protected가 있다. protected는 잘 쓰이지 않고 public과 private를 쓴다. private는 예를 들어서 class가 놀이동산일 때 그 아래에 바이킹과 롤러코스터가 있다. 바이킹의 요금과 롤러코스터 요금은 다르기 때..