Java 8

[Java] 랜덤 문자열 생성, 랜덤 코드 생성(random값)

서론 팅클이라는 프로젝트를 진행하면서 각 계정마다 random 코드 6자리를 만들어야하는 상황이 있었습니다. 이 random 코드는 친구추가할 때 사용되는 목적입니다. 구상 저는 랜덤값을 만들 때, 사용자들끼리 무조건 겹치면 안된다는 조건이 붙으니까 겹칠 확률을 무조건 높여야 겠다고 생각했습니다. 처음에는 대중적으로 알려진 UUID.randomUUID를 쓰면 되겠지라고 간단하게 생각했었습니다. 하지만 예상과는 다르게 UUID.randomUUID는 알파벳 대문자도 없을 뿐더러 6자리까지 자른다고해도 자리당 36개의 가짓수 즉 60,466,176분의 1 확률로 생성이 됩니다. random uuid 만드는 것 치고는 확률이 너무 낮았습니다. 자리수를 늘리는 방법도 있었지만, 친구추가 코드이기 때문에 짧으면 짧..

Java 2023.09.17

람다(Lambda),스트림(Stream)이란?

람다(Lambda) 자바8부터 '람다식(Lambda Expression)이 지원되면서 자바는 완전히 새로운 언어처럼 보이기 시작했다. 제네릭이 자바를 크게 변화시킨 것처럼 람다 또한 자바를 어마어마하게 변화시켰다. 람다의 등장으로 자바는 객체지향 언어의 특징과 함께 함수형 언어의 특성을 갖추게 되었다. 람다식을 이용하면 코드가 간결해지고, 지연 연산 등을 통해서 성능 향상을 도모할 수 있지만, 반면 모든 요소들을 순회하는 경우에는 성능이 떨어질 수도 있고, 코드를 분석하기 어려워진다는 단점도 있다. 람다 이전의 코드 //MaxNumber Interface public interface MaxNumber { int getMaxNumber(int x, int y); } //MaxNumber Interface..

Java 2023.03.20

[Java] final 키워드란? + static과의 궁합

Final Java에서는 불변성을 확보할 수 있도록 final 키워드를 제공하고 있다. 클래스나 변수에 final을 붙이면 처음 정의된 상태가 변하지 않는 것을 보장한다는 의미이다. Java에서 변수들은 기본적으로 가변적인데, 변수에 final 키워드를 붙여 참조값을 변경 못하도록 해 불변성을 확보할 수 있다. Final 사용법 final 필드 final int YD = 1; //final 타입 필드 [= 초기값]; final 필드는 위와 같이 선언하며 final 필드의 초기값을 줄 수 있는 방법은 딱 두가지 방법밖에 없습니다. 첫번째는 필드 선언시에 주는 방법이 있고, 두번째는 생성자를 통해서 주는 방법이 있습니다. 단순 값이라면 필드 선언시에 주는 것이 가장 간단하지만 복잡한 코드가 필요하거나 객체 ..

Java 2023.02.24

Generic(제네릭) 이란? + 와일드카드, generic 예시

Generic List list = new ArrayList(); Map map = new HashMap(); 우리는 위의 예제와 같이 클래스 타입이 명시된 패턴을 자주 발견할 수 있다. 이걸 제네릭(Generic) 이라고 부르며, 제네릭 파라미터는 꺽쇠안에 포함하여 전달한다. JAVA에서 제네릭이란? 파라미터 타입이나 리턴 타입에 대한 정의를 외부로 미룬다. 타입에 대해 유연성과 안정성을 확보한다. 런타임 환경에 아무런 영향이 없는 컴파일 시점의 전처리 기술이다. 제네릭을 왜 사용할까? 타입을 유연하게 처리하며, 잘못된 타입 사용으로 발생할 수 있는 런타임 타입 에러를 컴파일 과정에 검출한다. 제네릭을 사용하면 실수로 지정한 타입이 들어오는 경우 컴파일 시점에서 미리 예방할 수 있게 된다. 또한 클래스..

Java 2023.02.16

오버로딩(Overloading),오버라이딩(Overriding)이란? + 차이점

오버로딩 vs 오버라이딩 개념 다형성이란 하나의 메서드나 클래스가 있을 때 그것이 다양한 방법으로 동작하는 것을 말하며, 자바에서는 주로 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해서 다형성을 지원한다. 오버로딩(Overloading) : 메서드의 이름은 같고 매개변수의 유형과 개수가 다르도록 하는 것을 의미한다. - 리턴값만을 다르게 갖는 오버로딩은 작성할 수 없다. 오버라이딩 (Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것을 의미한다. -메서드의 이름은 물론 파라미터의 개수나 타입도 동일해야 하며, 주로 상위 클래스의 동작을 상속받는 하위 클래스에서 변경하기 위해 사용된다. 간략하게 요약하면, 오버로딩(Overloadin..

Java 2023.02.12

Java Collection(컬렉션)이란? + 종류(Set,Map,List,Queue)

Java Collection Java collection에는 List, Map, Set 인터페이스를 기준으로 여러 구현체가 존재한다. 이에 더해 Stack과 Queue 인터페이스도 존재한다. 왜 이러한 Collection을 사용할까? 그 이유는 다수의 Data를 다루는데 표준화된 클래스들을 제공해 주기 때문에 DataStructure를 직접 구현하지 않고 편하게 사용할 수 있기 때문이다. 또한 배열과 다르게 객체를 보관하기 위한 공간을 미리 정하지 않아도 되므로, 상황에 따라 객체의 수를 동적으로 정할 수 있다. 이는 프로그램의 공간적인 효율성 또한 높여준다. Java Collections Framework(JCF) Java Collections Framwork(JCF)는 이러한 데이터, 자료구조인 컬렉..

Java 2023.02.09

GC(Garbage Collection)이란? + 대상,구조,예시

Java Garbage Collection Garbage Collection이란, 스택으로부터, Heap 영역 객체 중 도달 불가능한 객체들을 자동으로 메모리에서 제거해주는 개념이다. Java는 객체지향 언어인만큼, 힙을 사용하여 객체를 생성하는 경우가 굉장히 많다. 개발자들은 이렇게 힙을 자유롭게 사용하고, 더 이상 사용되지 않는 객체들은 가비지 컬렉션 과정에서 자동으로 메모리에서 제거된다. 그렇다면 다른 언어들은 어떠할까? C언어 #include #include void main() { int* pPoint; pPoint = (int*)malloc(sizeof(int)*5); pPoint[0] = 25; pPoint[1] = 45; pPoint[2] = 50; pPoint[3] = 70; pPoint..

Java 2023.02.06

JVM의 존재 이유 & 구성 요소

JAVA Java의 가장 큰 특징 중 하나가 어느 플랫폼, 어느 하드웨어(CPU)든, 어떤 운영체제(OS)이던 상관없이 컴파일된 코드가 플랫폼 독립적인 것이다. 다시 말해 어떤 필랫폼이든 작성한 소스를 변경할 필요 없이 다 실행할 수 있다는 것이다. 이 점이 웹 어플리케이션의 특성과 맞아 떨어져 폭발적인 인기와 함께 현재 웹 어플리케이션 개발에 가장 사용이 많이 되는 언어 중 하나가 되었다. 그리고 이 특징을 구현하기 위해 필요한 것이 바로 이 JVM이다. 예를 들어 C언어로 작성된 Test.c가 있다고 하면, 이 Test.c를 윈도우 컴파일러를 사용해서 컴파일하면 Test.exe가 만들어니다. 윈도우 컴파일러로 컴파일되었기에 Test.exe는 윈도우에서만 실행되는 실행 파일이다. 리눅스 운영체제에서는 ..

Java 2023.02.02