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

분류 전체보기 224

제네릭

제네릭 자료형 제네릭 자료형이란? -> 클래스에서 사용하는 자료형이 여러개 일수 있고, 그 기능은 동일한 경우 클래스의 자료형을 특정하지 않고 일반화한 다음 추후 해당 클래스를 사용할 때 지정 할 수 있도록 선언 java 5 부터 지원되었다. 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그램 방식이다. 컬렉션 프레임워크에서 많이 사용된다. 예시는 아래와 같다. public class GenericPrinter { private T member; public void setMember (T member){ this.member = member; } public T getMember(){ return member; } }public class test { public static v..

Java 2022.02.26

접근 지정자

접근 지정자 개요 java 접근 지정자 private, default, protected, public 에 대해서 알아보려고 한다. private, default, protected, public 비교 public : 어떠한 클래스든 접근이 가능하다. protected : 상속받은 클래스 또는 같은 패키지에서만 접근이 가능하다. default : 자신 클래스 내부와 같은 패키지 내에서만 접근이 가능하다. private : 같은 클래스 내에서만 접근이 가능하다. 접근영역 : public > protected > default > private 코드 예시 public package com.pack; class A { public int data = 40; } package com.pack.test; clas..

Java 2022.02.26

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

인터페이스 기본 메소드와 스태틱 메소드 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