모르지 않다는 것은 아는것과 다르다.

Java 22

인터페이스 기본 메소드와 스태틱 메소드

인터페이스 기본 메소드와 스태틱 메소드 public interface Foo { void printName(); // abstract 가 생략된 것이다. // 기본 메소드 default void printNameUpperCase() { System.out.println(getName().toUpperCase()); } // static 메소드 static void printAnything(){ System.out.println("Foo"); } } 기본 메소드 어떤 인터페이스가 있다고 했을때, 해당 인터페이스를 구현하는 인스턴스들에 공통적으로 제공해주고 싶은 기능이 있다면? 모든 인스턴스에 그 기능을 추가해야한다. -> 번거롭다 -> 그래서 등장하게 된 것이 인터페이스 기본 메소드(Default Meth..

Java 2022.02.26

상수와 리터럴

상수 상수는 변하지 않는 수를 말한다. final이라는 예약어를 사용해서 선언할 수 있다. 왜 굳이 사용해야하는가? 1. 만약 작업(Job)이라는 객체가 있고 그 객체가 state라는 변수를 가지고있다. 2. 만약 Job의 상태가 완료라면 job.setState("Completion")이라고 하기로했고, 저 코드는 1000번 정도 쓰였다. 3. 헌데, 고객사에서 상태가 완료되면 "Finish"로 해달라는 요청이 왔고 이를 해결하기 위해서 1000번을 다 수정해줘야한다. 4. 여기서 만약 final String COMPLETION_STATE = "Completion" 이라고 설정해 두고, job.setState(COMPLETION_STATE)라고 선언했다면, Completions을 finish 로만 바꾸면..

Java 2022.02.26

람다 표현식

람다식 자바는 객체지향 프로그래밍 언어이다. 그렇기 때문에 기능을 수행하기 위해서는 객체를 만들고 그 객체 내부에 멤버 변수를 선언하고, 그 기능을 수행하는 메소드를 구현해야한다. 하지만 자바 8부터는 함수형 프로그래밍 방식을 지원하고 이를 람다식 이라고 한다. 함수의 구현과 호출만으로 프로그래밍이 수행돠는 방식이다. 함수형 프로그래밍의 장점 함수형 프로그래밍은 순수함수를 구현하고 호출하기 때문에 외부 자료에 부수적인 영향(side effect) 를 주지 않도록 구현하는 방식이다. 여기서 순수함수란? -> 매개변수만을 사용하여 만드는 함수를 말한다. 함수를 기반으로 하는 프로그래밍이고 입력받는 자료 이외에 외부 자료를 사용하지 않아 여려 자료가 동시에 수행되는 병렬처리가 가능하다. 함수형 프로그래밍은 함..

Java 2022.02.26

내부 클래스

내부 클래스 내부 클래스란? 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 밀접한 연관이 있는 경우가 많다. 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 내부 클래스로 선언해서 사용한다. 중첩 클래스라고도 한다. 내부 클래스의 종류는 아래와 같다. 인스턴스 내부 클래스 정적(static) 내부 클래스 지역(local) 내부 클래스 익명(anonymous) 내부 클래스 인스턴스 내부 클래스 내부적으로 사용할 클래스를 선언한다. -> private 으로 선언하는 것을 권장한다. 외부 클래스가 생성된 후 생성된다. -> 정적 내부 클래스와는 다르다. private 이 아닌 내부 클래스는 다른 외부 클래스에서 생성할 수 있다. 코드 예시 class OutClass { private..

Java 2022.02.26

Thread

Thread란? 하드디스크에 있던 프로그램이 메모리에 적재되면 그것을 process라고 한다. 그 process는 메모리를 점유한 상태고 실제로 실행되려면 CPU 를 점유해야한다. 여기서 CPU를 점유하는 단위를 쓰레드라고 한다. 하나의 프로그램이 돌아간다면 적어도 하나 이상의 쓰레드가 존재한다는 것을 말한다. Muti-threading 여러 thread가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과. thread는 각각 자신만의 작업 공간을 가짐. ( context ) 각 thread 사이에서 공유하는 자원이 있을 수 있음. (자바에서는 static instance) 여러 thread가 자원을 공유하여 작업이 수행되는 경우 서로 자원을 차지하려는 race condition이 발생할 수..

Java 2022.02.26

String,StringBuilder,StringBuffer

String 클래스 String 클래스는 아래와 같이 2가지 방법으로 선언할 수 있다. String str1 = new String("abc"); String str2 = "abc"; new 로 생성하는 경우 힙 메모리에 생성되고, "" 로 생성하는 경우 상수 풀(constant pool)에 생성된다. 힙 메모리는 생성될때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 가짐 public class StringTest { public static void main(String[] args) { String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1 == str2); //fals..

Java 2022.02.26

Stream

Stream 이란? sequence of elements supporting sequential and parallel aggregate operations 스트림이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미한다. 스트림으로 처리하는 데이터는 오직 한번만 처리된다. 무제한일 수도 있다. (Short Circuit 메소드를 사용해서 제한할 수 있다.) -> 예를들어 앞에 10개만 검사할 수 있다. 중개 오퍼레이션은 근본적으로 lazy 하다. 손쉽게 병렬 처리할 수 있다. ex> List collect = names.parallelStream().map(String::toUpperCase).collect(Collectors.toList()); collect.forEach(System.ou..

Java 2022.02.26

Static 변수와 Static 메서드

Static 변수란? 여러 인스턴스에서 공통으로 사용하는 변수이다. 여러 인스턴스가 공유하는 기준 값이 필요한 경우 주로 사용된다. static 변수는 인스턴스가 생성될때 메모리에 올라가는 것이니라 프로그램이 프로세스가 돼서 메모리에 적재 될때 Data영역에 위치하게 되고, 프로그램이 끝나서 메모리에서 언로드 되는 순간 소멸한다. (인스턴스가 생성될때는 Heap영역에 위치한다.) 인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조할 수 있다. (ex> Employee.serialNum) 예시는 아래와 같다. public class Employee{ public static int serialNum = 1000; private int id; private String name; priva..

Java 2022.02.26

Optional

Optional null일 수도있고, 비어있을 수도 있다. 메소드에서 작업 중 특별한 상황에서 값을 제대로 리턴할 수 없는 경우 선택할 수 있는 방법 예외를 던진다. (비싸다, 스택트레이스를 찍어두니까.) null을 리턴한다. (비용 문제가 없지만 그 코드를 사용하는 클리어인트 코드가 주의해야 한다.) (자바 8부터) Optional을 리턴한다. (클라이언트에 코드에게 명시적으로 빈 값일 수도 있다는 걸 알려주고, 빈 값인 경우에 대한 처리를 강제한다.) Optional 오직 값 한개가 들어있을 수도 없을 수도 있는 컨네이너. 주의할 것 리턴값으로만 쓰기를 권장한다. (메소드 매개변수 타입, 맵의 키 타입, 인스턴스 필드 타입으로 쓰지 말자.) Optional을 리턴하는 메소드에서 null을 리턴하지 말..

Java 2022.02.26

Object 클래스

Object 클래스란? 모든 클래스의 최상위 클래스이다. -> java.lang.Object 클래스이다. java.lang 패키지 내에 있다. -> 자동으로 import.java.lang.*;가 import 된다. 많이 사용하는 기본 클래스들이 속한 패키지 String, Integer, System... 등이 포함된 패키지 이다. 모든 클래스는 Object에서 상속받고, Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있다. 컴파일러가 extends Object를 자동으로 추가한다. 예를들어, class Student => class Student extends Object toString() 객체의 정보를 String으로 바꾸어서 사용할 때 쓰인다 결과값은 JVM 이 16진수의 값이 @ 뒤..

Java 2022.02.26