Backend 39

final

final 키워드는 변수, 메서드, 클래스에 사용되며 어떤 곳에서 사용하느냐에 따라 다른 의미를 가진다. 변수(Variable) 변수에 final을 붙이면 변수는 재할당이 불가능하다라는 뜻이다. primitive type은 값을 변경할 수 없다는 뜻이고, 객체는 내부의 값은 변경할 수 있으나 객체 그 자체를 바꿀 수 없다는 뜻이다. public class Test { public static void main(String[] args) { final Map map = new HashMap(); final Person person = new Person(); final int a = 10; map.put("a", 1); map.put("b", 2); map.put("c", 3); map = new Hash..

Backend/Java 2022.08.16

@Retention

annotation 내부를 들여다보면 @Retention을 볼 수 있는데 개념을 어렴풋이 알고만 있다가 한 번 정리하고자 글을 쓴다. Indicates how long annotations with the annotated type are to be retained. If no Retention annotation is present on an annotation type declaration, the retention policy defaults to RetentionPolicy.CLASS. A Retention meta-annotation has effect only if the meta-annotated type is used directly for annotation. It has no effec..

Backend/Java 2022.08.15

Annotation(@)

java 개발을 하다보면 annotation을 많이 쓰게 된다. 사전적 의미로는 주석으로, 프로그램에 추가적인 정보를 제공해주는 메타데이터라고 할 수 있다. (메타데이터: 데이터를 위한 데이터) java가 기본적으로 제공하는 annotation이나 lombok library, 필요 시 개발하는 custom annotation 등이 있다. 문득, annotation을 제대로 알고 쓰는 건가 싶어 정보를 찾아보고 간략히 정리해본다. 용도 1. 보일러 플레이트 코드를 자동으로 생성할 수 있도록 정보를 제공 2. 컴파일 시 컴파일러가 에러 체크할 수 있도록 정보 제공 3. 런타임 시 특정 기능을 실행하도록 정보를 제공 @SpringBootApplication : @Configuration, @EnableAuto..

Backend/Java 2022.08.15

순수 함수란?

순수 함수 부수효과가 없는 함수 어떤 함수에 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수 외부의 상태를 변경하지 않음 부수효과 외부의 상태를 변경하는 것 함수로 들어온 인자의 상태를 직접 변경하는 것 ex) int add(int a, int b) { return a + b; }여기서 add 함수는 인수로 같은 값을 주었을 때 리턴 값은 항상 같기 때문에 순수함수이다. int c = 20; int add2(int a, int b) { return a + b + c; } System.out.println(add2(10, 20)); // 50 c = 10; System.out.println(add2(10, 20)); // 40add2 함수에 add 함수와 동일한 인수를 넣어도 결과값이 달라진다. 순..

Backend/Java 2022.08.12

람다식(Lambda Expression), 람다란(Lambda)?

람다식(Labmda Expression) 이란 ? - 함수를 하나의 식(expression)으로 표현한 것 - 익명 함수(Anonymous Function)라고도 한다.(보통의 함수와 달리 이름이 없으므로) - 메서드처럼 특정 클래스에 종속되지 않기에 함수라고 부른다. - java에서 클래스를 만들지 않으면 함수를 사용할 수 없는데 함수형 인터페이스와 함께 람다를 제공함으로써 제약없이 함수를 사용할 수 있다. - java에서 기본적으로 함수형 인터페이스를 제공해주기 때문에 따로 생성하지 않아도 된다.(https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html) - 참조 변수로 함수형 인터페이스가 사용된다. - 익명 클..

Backend/Java 2022.08.12

val, var, const, const val

* val: 값이 변경되지 않는 경우에 사용(java final과 유사) * var: 일반적인 변수의 특성과 같음 * const: 상수, 한 번 초기화하면 바꿀 수 없음, 변수 선언할 때 val 앞에 const 를 붙여서 만듦 ex) const val a = "test" * const val 과 val 차이 val은 값이 런타임 시에 결정된다. 프로그램 수행에 따라 값이 바뀔 수 있음 fun main() { val num = sum(40, 20) println(num) } fun sum(a: Int, b: Int) = a + b const val은 값이 컴파일 시에 결정된다. 클래스의 생성자에 할당할 수 없으며, String을 포함한 기본 자료형으로만 선언 가능 함수 내 지역 변수나 클래스의 속성으로 사..

Backend/Kotlin 2022.08.09

Expression과 Statement

* Expression(식, 표현식): 어떠한 값을 가지고 있으면 그것을 표현식이라고 부를 수 있다. 예를 들어, 5 // 리터럴 (수) "hello" // 리터럴(문자열) 2+7/4 // 산술 식 sum(7, 4) // 함수 리턴 값 myName; // 변수에 들어있는 값 등이 있다. java에서는 표현식만으로 코드 블럭안에서 단독으로 쓰일 수 없다. * Statement(문장, 상태): 어떠한 작업을 수행하는 모든 문장을 뜻한다. 예를 들어, int age = 14; // age++; // Statement 이면서 Expression sum(age, 1); // Statement 이면서 Expression https://gusdnd852.tistory.com/68 Expression과 Statemen..

Reflection(리플렉션)

런타임시에 클래스 정보를 확인해서 그 클래스의 메소드, 타입, 변수들을 접근할 수 있도록 해주는 자바 API 사용자가 직접 활용할 일은 잘 없지만 IDE의 자동완성, 스프링 프레임워크의 어노테이션 같은 기능이 사용되는 예이다. 설계할 때는 어떤 타입의 클래스인지 모르지만 실행 시점에 클래스에 대한 정보를 확인하고 활용할 수 있도록 하는 것이다. https://brunch.co.kr/@kd4/8 자바의 리플렉션 java reflection를 이해하시나요? | Java Reflection API를 이해하시나요? 리플렉션이란 개념은 초보 자바 개발자에게는 생소한 개념이고, 이해하기 힘든 개념인 것 같습니다. 일단 저에겐 그랬습니다. 그 brunch.co.kr

Backend/Java 2022.08.08

직렬화

Java 내부 시스템에서 사용되는 객체나 데이터를 외부에서 사용할 수 있도록 Byte 형태로 변환하는 것을 의미한다. 프로그램 데이터들이 연속적으로 있지 않고 내부 포인터에 의해 참조되고 있는데 이 데이터들을 한데 모아 다른 곳에서도 쓸 수 있도록 연속적(serial)인 형태로 변환하는 것 대부분 OS의 프로세스 구현은 서로 다른 가상메모리주소공간(Virtual Address Space)를 갖기 때문에 Object 타입의 참조값(주소값) 데이터 인스턴스를 전달 할 수 없다. 그렇기 때문에 서로 다른 메모리 공산 사이의 데이터 전달을 위해서는 메모리 공간의 주소값이 아닌 Byte 형태로 변환된 객체 데이터를 전달하면, 사용하는 쪽에서 역직렬화하여 사용할 수 있다. 즉, 전송/저장 가능한 데이터를 만드는 것..

Backend/Java 2021.06.12

추상클래스와 인터페이스

인터페이스는 클래스를 구현하기 전에 설계하거나 다형성을 고려할 때 쓰곤 했는데 추상클래스는 구현된 것을 보기만 했을 뿐 잘 써본 적이 없다. 인터페이스와 추상클래스는 비슷하다는 느낌을 가지고 있었기에 더욱 쓰지 않았던 것 같다. 이참에 한 번 정리해보자. Interface란? 인터페이스는 한 마디로 설계도라고 생각하면 될 것 같다. 모든 메서드가 추상메서드이고, 일반 변수를 가질 수 없다.(선언하면 public static final 변수, 생략가능) 인터페이스를 구현하는 클래스는 모든 메서드를 강제로 구현해야한다. 다른 인터페이스로부터 상속 받을 수 있고, 다중 상속이 가능하다. interface Vehicle { void run(); // interface 예약어를 쓰면 abstract는 생략 가능하..

Backend/Java 2021.06.11