목록분류 전체보기 (79)
영권's

자바 Concurrent 프로그래밍 Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 예) 웹 브라우저로 유튜브를 보면서 키보드로 타이핑을 할 수 있다. 예) 녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있다. 자바에서 지원하는 Concurrent 프로그래밍 멀티 프로세싱(ProcessBuilder) 멀티 쓰레드 자바 멀티쓰레드 프로그래밍 Thread / Runnable 기존 자바에서 멀티 쓰레드 사용법 // Thread 상속 public static void main(String[] args) { MyThread myThread = new MyThread(); MyThread.start(); System.out.println("Hello : " +..

Chain of Responsibility - 책임 사슬 Chain of Responsibility란 책임 떠넘기기와 같은 의미입니다. 어떤 요청이 발생했을 때 그 요청을 처리할 오브젝트를 직접 결정할 수 없는 경우, 복수의 오브젝트(객체)를 사슬(chain)처럼 연결해 두면, 그 오브젝트(객체)의 사슬을 차례로 돌아다니면서 목적한 오브젝트(객체)를 결정하는 방법을 생각할 수 있습니다. 이와 같은 패턴을 Chain of Responsbility라고 합니다. 책임을 떠넘기는 구조를 생각하면 이해하기 쉽습니다. 이떤 사람에게 요구를 합니다. 그 사람이 그것을 처리할 수 있으면 처리하고, 처리할 수 없으면 그 요구를 '다음 사람'에게 넘깁니다. 다음 사람이 그 요구를 처리할 수 있으면 처리 하고, 처리할 수 ..

함수형 인터페이스란 추상 메서드가 단 한개만 있는 경우 해당 인터페이스는 함수형 인터페이스 입니다. static 메서드나 default 메서드의 존재 여부는 상관없습니다. @FunctionalInterface 어노테이션을 통해 컴파일 타임에서 함수형 인터페이스인지 검증할 수 있습니다. 원래 인터페이스를 인스턴스로 만들기 위해서는 Implements 해서 구현한 클래스를 사용하거나 익명 구현 클래스를 사용하는 방법이 있었습니다. 자바 8에서부터는 추상메서드가 하나인 함수형 인터페이스의 경우에는 좀 더 줄여서 쓸 수 있는 람다 표현식이 있습니다. 메소드 레퍼런스(Method Reference)는 Lambda 표현식을 더 간단하게 표현하는 방법입니다. 람다가 하는 일이 기존 메서드 또는 생성자를 호출하는 거라..
객체지향 프로그래밍이란 프로그램의 동작을 객체 단위로 나눠서 수행할 수 있도록 하는 것이 객체지향 프로그래밍이다. 객체지향 프로그래밍을 어떻게 하면 객체 단위로 잘 나누고 연관 지을 수 있는가? 에 대한 5가지 원칙이 있습니다. 객체지향 설계를 하는 5가지 원칙(SOLID) SRP(Single responsibility principle) / 단일 책임 원칙 하나의 클래스(객체)는 하나의 책임만 가져야한다. OCP(Open / closed principle) / 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. LSP(Liskov substitution principle) / 리스코프 치환 원칙 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스..

StringBuilder와 StringBuffer는 무슨 차이가 있는가? 먼저 String 과 StringBuilder,StringBuffer 와의 큰 차이점은 String은 불변(immutable)의 속성을 갖는다는 점입니다. String 객체를 생성하는 방법은 new 연산자를 이용하는 것과 리터럴을 이용한 방식이 있다. 리터럴을 이용하여 사용하면 String 값은 JVM 메모리 내의 Heap영역에 "String Constant Pool"에 저장되어 사용되지만, new 연산자로 생성하면 같은 내용이라도 여러개의 객체가 각 Heap 영역을 차지한다. 같은 "cat" 이라는 문자열이지만 리터럴로 생성한 cat1 과 cat2는 같은 객체를 참조하고 cat3은 다른 객체를 참조한다. 하지만 StringBuil..

데브코스 백엔드 과정에서 공부하면서 JAVA 개발환경 세팅에 대해서 보다가 환경변수에 클래스패스 세팅하는 것을 보았는데 예전에 백기선님 온라인 스터디에서 공부하였을 때 환경변수에 시스템 변수로 설정하는것은 문제가 발생할 수 있다라고 공부한 기억이 있어서 어떻게 하는것이 맞을지 공부하고 흐려진 기억을 다시 되새기면서 정리하기로 하였습니다. 먼저 클래스패스에 대해서 알아보자 클래스패스란, JVM이나 Java 컴파일러에 사용자정의 클래스와 패키지의 위치를 지정해주는 파라미터이다. 쉽게 말해, 자바가 클래스를 찾아 사용을 해야하는데, 클래스들이 어디 있는지 위치를 지정해주는 값이다. 좀더 자바의 관점에서 말한다면 JVM이 프로그램을 실행할 때, 클래스 파일을 찾는 데 기준이 되는 파일 경로를 말합니다. 소스 코..