JVM 생태계/자바 5

스프링캠프 2019 - 자바에서 null을 안전하게 다루는 방법

스프링 사용자 모임/우아한 형제들 박상철 님의 자바에서 null을 안전하게 다루는 방법을 듣고 정리한 글입니다. 문제가 될 경우 삭제 조치 하도록 하겠습니다. 1. null에 대해서 I call it my billion-dollar mistake. It was the invention of the null reference in 1965. - 토니 호어 - 객체지향의 시조가 된 논문인 "레코드 핸들링"에서 특별한 값이 없음을 나타내려고 null을 도입했다. 그리고 이 값을 사용하려고 할 때, 오류를 내도록 설계했다. 그리고, 자바에서 null은 의미가 모호하다. 초기화되지 않았는지, 정의가 되지 않았는 지, 값이 없다는 것인지, null 자체로 값인지 애매하다. 그리고 모든 참조는 기본 상태가 null이..

String, String Buffer, String Builder

1. 시작부터 요약 자바에서 문자열을 다루기 위해서는 크게 String, String Buffer, String Builder를 사용할 수 있다. 들어가기 앞서 요약하자면, 연산이 많지 않을 경우는 아무거나 사용해도 상관없다. 하지만, 멀티 쓰레드 환경이고 문자열 연산이 많다면 String Buffer를 사용하고, 문자열 연산이 많고 쓰레드 동기화를 고려하지 않아도 되는 경우 String Builder를 사용한다. 또한 문자열 연산이 적고, 멀티 쓰레드 환경을 고려해야 한다면 String 클래스를 사용하면 적절하다. 2. 불변(immutable)한 String 클래스 자바의 String 클래스는 불변하다. 위와 같은 예제에서 보이는 것처럼, String 클래스는 기존 문자열에 "Tendulkar"를 더해..

Generic, Variance

1. Generic 제네릭 자료형이란 클래스에서 사용하는 변수의 자료형이 여러 개 일 수 있고, 그 기능은 동일한 경우 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정할 수 있도록 선언하는 것이다. 실제로 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식이라 할 수 있다. 주로 컬렉션 프레임워크에서 많이 사용된다. 제네릭의 의의 첫 번째는 형 변환을 할 때 생기는 성능적인 이슈를 해결하는 것이다. 두 번째는 제네릭을 사용해 안정적이고 범용적인 API를 개발하기 위함이다. 다음은 제네릭 자료형을 사용하지 않은 예시이다. public class Cage { private Cat animal; public void setAnimal(Cat animal) { thi..

DataTypes, Type conversion, Type of variables

1. DataTypes 변수를 선언하면 해당되는 자료형의 크기 만큼 메모리가 할당된다. 변수는 할당된 메모리를 가리키는 이름이다. 자바의 자료형은 primitive type 8종류와 reference type(non-primitive)으로 이루어져 있다. 분류는 아래와 같다. Primitive Type 정수형(byte, short, int, long)의 경우에는 표현범위가 -2^(n-1) ~ 2^(n-1) - 1 임을 기억하자. 자바에서 사용하는 정수에 대한 기본 자료형은 int이다. 자바의 정석에 따르면 int는 CPU가 가장 효율적으로 처리할 수 있는 타입이기 때문에 일반적으로도 int를 많이 사용한다고 한다. 효율적인 실행보다 메모리를 절약이 필요할 때는 상황에 맞는 자료형을 사용하는 것이 적절하다..

Basic Syntax, DataStructures

1. Basic Syntax 메인 메서드(기본 메서드) JVM은 런타임 정도로 일단 생각하자. 예를 들어, 당신이 JS 개발자라면 런타임은 Node.js나 웹 브라우저가 있을 것이고, C#은 아마도 닷넷 정도로 생각해보자. 다음에 제대로 다루어 보겠다. TECHIE DELIGHT에서 가져온 내용입니다. JVM(Java Virtual Machine)은 지정된 클래스의 메인 메서드를 호출하여 실행하고 main() 이후 프로그램에 필요한 다른 모든 메서드를 호출한다. public class TestProject { public static void main(String[] args){ //... } } 여담으로 일반적으로 매개변수(Parameter)는 함수를 정의할 때 사용되는 변수를 매개변수, 실제 함수를 ..