목록Language/JAVA (44)
선진이네
쓰레드는 프로세스의 하위 개념으로써 프로세스에 할당된 자원을 공유한다. 프로그램을 쓰레드로 분리하면 자연스럽게 병렬성을 이용할 수 있기 때문에 애플리케이션의 성능을 향상시킬 수 있다! Thread-safe란..! 멀티 쓰레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 쓰레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없는 것을 말한다! 다시 말해서, 두 개 이상의 쓰레드가 하나의 객체에 접근해도 연산 결과는 모두 동일해야한다..! 라는 느낌으로 받아들이면 될 것 같다. 이건 주관적인 생각 - 트랜잭션도 A와 B가 동일한 시간에 원자에 접근했을 때 같은 결과를 확인할 수 있는 것처럼 임마도 완전 똑같은 느낌적인 느낌쓰! Thread-safe 여부 판단 방법 보통 세 가지로 ..
응답 템플릿 - 성공, 실패 모두 이 템플릿 사용할 예정 @Getter @Builder @AllArgsConstructor public class ResultTemplate { private int status; private T data; } API 응답 템플릿은 모두 Builder를 사용할 예정 생성자를 쓰지 않고 처리하기 위해 사용합니다 기본적으로 Getter와 전체생성자 어노테이션은 Builder를 사용하기 위해 필수입니다. 모든 예외처리를 잡아줄 클래스 package dream.advice; import dream.common.domain.ResultTemplate; import dream.common.exception.NotFoundException; import lombok.extern.sl..
알고리즘 문제를 푸는 과정에서, 자료구조 Map을 사용할 때 하나의 키에 여러 개의 값을 넣어야 하는 상황이 꼭 생긴다. getOrDefault(Object key, V DefaultValue) 찾는 key가 존재하면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환된다. 저 메소드를 알기 이전에는 if 문으로 항상 처리해왔다. 다음과 같은 식으로. int[] arr = {1, 1, 2, 3, 3}; HashMap map = new HashMap(); for(int i = 0; i < arr.length; i++){ int tmp = arr[i]; if(map.containsKey(tmp)){ map.put(tmp, map.get(tmp) + 1)); } else{ map.pu..
XML Markup Language 태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어 ex) HTML, SGML, … XML : Extensible Markup Language HTML과 달리 필요한 태그를 확장해서 사용 가능, 정확한 문법을 지켜야 동작 ( Well Formed) 기본 문법 문서의 시작은 로 한다. 반드시 root element가 존재해야 한다. 나머지 태그들은 Tree 형태로 구성 시작 태그와 종료 태그는 일치해야 한다. 시작 태그는 key-value 구조의 속성을 가질 수 있다. 태그는 대소문자를 구별한다. 홍길동 광주 010-222-3333 장길산 서울 010-333-4444 임꺽정 대전 Parsing 문서에서 필요한 정보를 얻기 위해 태그를 구별하고 내용을 추출하는 과정 ..
interface Printer{ // 변수 선언 시 자동으로 p s f 붙여줌 public static final String name = "print"; // 메서드 선언 시 자동으로 p a 붙여줌 따라서 구현부가 없어도 되는 것 public abstract void print(String msg); public default void getName() { System.out.println("Printer 입니다"); } } interface Printer2{ void print(); } public class LamdaTest01 { public static void main(String[] args) { // legacy expression Printer p = new Printer() { @Ov..
I/O 와 Stream I/O ? → 데이터의 입력(input)과 출력(output) 데이터는 한쪽에서 주고 한쪽에서 받는 구조로 되어있음 이때 입력과 출력의 끝단 : 노드 (Node) 두 노드를 연결하고 데이터를 전송할 수 있는 개념 : 스트림(Stream) 물의 흐름이나 전기의 흐름과 같은 개념 스트림은 단방향으로만 통신이 가능하며 하나의 스트림으로 입력과 출력을 같이 처리할 수 없음 InputStream의 주요 메서드 바이트 한 개씩 읽음 private void read1() { try(InputStream input = new ByteArrayInputStream(data1.getBytes())){ int read = -1; while( (read = input.read()) != -1 ) { S..
추상 클래스 구현의 강제를 통해 프로그램의 안정성 향상을 위함 interface에 있는 메서드 중 구현할 수 있는 메서드를 구현해 개발의 편의 지원 자손 클래스에서 반드시 재정의해서 사용되기 때문에 조상의 구현이 무의미한 메서드 메서드의 선언부만 남기고 구현부는 세미콜론으로 대체 구현부가 없다는 의미로 abstract 키워드를 메서드 선언부에 추가 객체를 생성할 수 없는 클래스라는 의미로 클래스 선언부에 abstract를 추가한다 abstract class Vehicle { private int curX, curY; public void reportPositon(){ System.out.printf("현재 위치 : (%d, %d)\\n", curX, curY); } public abstract void ..
에러와 예외 어떤 원인에 의해 오동작하거나 비정상적으로 종료되는 경우 Error 메모리 부족, stack overflow와 같이 일단 발생하면 복구 불가 프로그램의 비정상적 종료를 막을 수 없음 → 디버깅 필요 Exception 읽으려는 파일이 없거나 네트워크 연결이 안 되는 등 수습될 수 있는 비교적 상태가 약한 것들 프로그램 코드에 의해 수습될 수 있는 상황 예외 처리 예외 발생 시 프로그램의 비정상 종료를 막고 정상적인 실행 상태를 유지하는 것 예외의 감지 및 예외 발생 시 동작할 코드 작성 필요 예외 클래스의 계층 당연하게도 Throwable의 상위 클래스는 Object 클래스이다. checked exception 예외에 대한 대처 코드가 없으면 컴파일이 진행되지 않음 unchecked excep..
최고 수준의 추상화 단계 - 일반 메서드는 모두 abstract 형태 클래스에서 implements 키워드를 사용해서 interface 구현 implements 한 클래스는 모든 abstract 메서드를 override 해서 구현하거나 구현하지 않는다면 abstract 클래스로 표시해야함 인터페이스의 필요성 구현의 강제로 표준화 처리(abstract 메서드 사용) → 손쉬운 모듈 교체 지원 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원 서로 상속의 관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장 모듈 간 독립적 프로그래밍 가능 → 개발 기간 단축 형태 클래스와 유사하게 interface 선언 멤버 구성 모든 멤버변수는 public static final 이며 생략 ..
다양한 타입의 객체를 다루는 메서드, 컬렉션 클래스에서 컴파일 시에 타입 체크 미리 사용할 타입을 명시해서 형 변환을 하지 않아도 되게 함 객체의 타입에 대한 안전성 향상 및 형 변환의 번거로움 감소 클래스 또는 인터페이스 선언 시 에 타입 파라미터 표시 Class_Name : Raw Type Class_Name : Generic Type 타입 파라미터 특별한 의미의 알파벳 보다는 단순히 임의의 참조형 타입을 말함 T : reference Type, E : Element, K : Key, V : Value Object를 파라미터로 사용 → 어떤 객체든지 수용 가능 “어떤 타입” 으로 파라미터 설정 → 객체 설정 시 결정 type parameter의 제한 필요에 따라 구체적인 타입 제한 필요 type pa..