중첩 내부 클래스
·
JAVA
public class Network { public void sendMessage(String text) { // 여기서 new NetworkMessage(text) 함 NetworkMessage networkMessage = new NetworkMessage(text); networkMessage.print(); } // 중첩 클래스를 static으로 선언함 private static class NetworkMessage { private String content; public NetworkMessage(String content) { this.content = content; } ..
중첩클래스 활용
·
JAVA
public class Network { public void sendMessage(String text) { // 여기서 new NetworkMessage(text) 함 NetworkMessage networkMessage = new NetworkMessage(text); networkMessage.print(); } // 중첩 클래스를 static으로 선언함 private static class NetworkMessage { private String content; public NetworkMessage(String content) { this.content = content; } ..
날짜와 시간
·
JAVA
1. 날짜의 경우 윤년 ,각 달의 일수 등을 고려해야함 2. 일광 절약 시간 변환(DST) 예시 특정 지역에서는 3월의 마지막 일요일에 DST가 시작되어 10월의 마지막 일요일에 종료된다. 이 기간 동안 발생하는 모든 날짜와 시간 계산은 1시간을 추가하거나 빼는 로직을 포함해야 함. 3. 타임존 계산세계가 다양한 타임존으로 나뉘어 있다. 타임존 간의 날짜와 시간변환을 정확히 계산하는 것은 복잡하다. 서울의 타임존 Asia/Seoult, UTC +9 . 베를린 타임존 UTC + 1둘 차이는 8시간이다. 근데 만약 베를린에서 DST가 적용되면 타임존 차이는 7시간으로 줄어듬. 자바 날짜와 시간 라이브러리 역사 JDK 1.0 (java.utilDate)문제점타임존 처리 부족 : 초기 Date 클래스는 타임존(..
SOLID 원칙
·
JAVA
SRP(단일 책임 원칙)하나의 객체에는 하나의 책임만이 할당되어야 한다. OCP(개방 폐쇄 원칙)기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다. LSP (리스코프 치환 원칙)"하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제 없어야 한다." 하위형에서 선행조건은 강화될 수 없다.- 정의 : 메서드를 호출하기 전에 만족되어야 할 조건이다.- 설명 :상위 클래스(부모 클래스)의 메서드가 요구하는 선행조건이 있다면, 하위 클래스(자식 클래스)에서 이 선행조건을 더 엄격하게(강화하여) 변경하면 안 된다.만약 하위 클래스에서 선행조건을 강화하면, 상위 클래스로 작성된 클라이언트 코드가 하위 클래스의 public class Calculator..
Optional orElse(), orElseGet() 차이점
·
JAVA
Optional 클래스에서 or Else() 와 orElseGet()은 값이 없는 경우 대체값을 제공하기 위해 사용된다. 기본 개념 : Optional에서 대체값 제공 (1) Optional이란?NullPointerException을 방지하기 위해 값을 포장하여 처리하는 객체입니다.Optional을 사용하면 값이 존재할 때와 없을 때를 명시적으로 처리할 수 있다.(2) orElse()와 orElseGet()의 차이orElse 사용 예제public class Main { public static void main(String[] args) { Optional somethingOptional = Optional.ofNullable(null); Integer result = so..
Stream 활용해서 이중 for문 간단하게 만들기
·
JAVA
private static boolean isAllCellOpened() { ///BEFORE boolean isAllOpened = true; for (int row = 0; row Arrays.stream(stringArr)) .noneMatch(cell -> cell.equals(CLOSED_CELL_SIGN)); } 원래 데이터 구조 (2차원 배열)String[][] board = { {"A1", "B1", "C1"}, {"A2", "B2", "C2"}, {"A3", "B3", "C3"}};2차원 배열을 Stream으로 변환Stream stream = Arrays.stream(board);Stream[ [..
자바 동작원리 정리해보기
·
JAVA
JVM 은 기본적으로 스택 기반 가상 머신임.해당 구조를 선택한 이유는 WORA(Write Once Run Anywhere)를 구현하기 위해 물리적인 머신과 별개의 가상 머신을 기반으로 동작하도록 설계되었기 때문이다. 시스템 별로 cpu 레지스터를 동작시키는 명령어가 다른데 레지스터 기반으로 동작하게 되면 해당 명령어는 물리적인 머신에 종속적이게 되기 때문이다. 기본 자료형(primitive data type)을 제외한 모든 타입은 메모리 주소 기반 레퍼런스가 아니니 심볼릭 레퍼런스를 통해 참조한다.  자바 바이트 코드자바 소스코드는 자바 컴파일러에 의해 자바 바이트 코드로 변환된다.JVM 구조    클래스 로더(Class Loader)가 컴파일된 자바 바이트코드를 런타임 데이터 영역(Runtime Da..