본문 바로가기

Back-end139

SOLID 원칙, 객체지향 프로그래밍 SOLID 란? SOLID 원칙은 소프트웨어 디자인과 개발에서 지켜야 할 다섯 가지 원칙 입니다. 원칙들은 소프트웨어의 유연성, 확장성 및 유지보수성을 높이기 위해 고안되었고, 각 원칙은 객체 지향 프로그래밍(OOP)에 기반하며, 소프트웨어의 구조를 조직화하고 효율적인 코드를 작성하는데 도움을 줍니다. SRP 단일 책임 원칙(Single Responsibility Principle - SRP) 각 클래스는 단 하나의 책임을 가져야 한다는 원칙입니다. 클래스가 여러가지 역할을 수행하게 되면 코드의 가독성이 떨어지고, 유지보수가 어려워질 수 있습니다. OCP 개방/폐쇄 원칙(Open/Closed Principle - OCP) 기존의 코드를 변경하지 않으면서 확장할 수 있어야 합니다. 새로운 기능을 추가할 때.. 2023. 8. 22.
2023.08.21 TIL Network 이더넷, 무선 LAN(Wi-Fi) 주위에 있는 PC나 스마트폰 등은 서버의 애플리케이션과 서로 데이터를 주고 받는다. 서버는 PC나 스마트폰과는 멀리 떨어진 네트워크에 접속 되어 있다. 기술적인 관점에서 생각하면, ‘네트워크’는 라우터 또는 레이어 3 스위치로 구획되는 범위이다. 네트워크의 기본적인 구성은 레이어 2 스위치로 하나의 네트워크를 구성하고, 라우터 또는 레이어 3 스위치로 각 네트워크를 서로 연결한다. 다른 네트워크에 접속된 서버까지의 데이터 전송은 같은 네트워크 내의 전송을 반복해서 실현된다. PC에서 서버로 가는 데이터는 우선 PC와 같은 네트워크 상에 있는 라우터로 전송되고, 라우터는 다시 같은 네트워크 상의 다음 라우터로 전송된다. 그렇게 해서 목적지 네트워크 상의 라우.. 2023. 8. 21.
2023.08.20 TIL Java I/O I/O는 Input, Output의 약자로 입력과 출력을 통칭하는 용어이다. JVM을 기준으로 읽을때는 Input, 파일을 쓰거나 외부로 전송할 때는 Output 이라한다. 자바는 바이트 기반의 데이터를 처리하기 위해 스트림을 제공하고, I/O 처리를 한다. 바이트가 아닌, char 기반의 문자열로만 되어 있는 파일은 Reader와 Writer 라는 클래스로 처리한다. JDK 1.4부터 NIO가 추가되어서 스트림 기반이 아니라, 버퍼와 채널 기반으로 데이터를 처리한다. 스트림 자바에서 스트림은 끊기지 않고 연속적인 데이터를 말한다. File java.io.File 클래스는 파일만 가리키는 것이 아닌 파일의 경로도 포함한다. File 클래스는 심볼릭 링크와 같은 유닉스 계열의 파일에서 사용.. 2023. 8. 21.
2023.08.20 TIL Computer Structure 0과 1로 숫자를 표현하는 법 컴퓨터는 0과 1로 모든 정보를 표현하고, 0과 1로 표현된 정보만 이해할 수 있다. 정보 단위 컴퓨터가 이해하는 가장 작은 정보단위인 0, 1을 비트라고 한다. 즉, 비트로 2가지 정보를 표현할 수 있다. 즉 n개의 비트로 2^n 가지 정보를 표현할 수 있다. 바이트는 비트를 8개 묶은 단위이고, 1킬로바이트는 1000바이트이고, 1메가 바이트는 1000킬로바이트, 1기가 바이트는 1000메가 바이트, 1테라바이트는 1000기가 바이트 이다. 1024 단위는 KiB, MiB 등 이다. 1000 개 기준으로 나눈다. 워드(Word) : 워드는 CPU가 한 번에 처리할 수 있는 데이터 크기를 의미한다. CPU가 한 번에 16비트를 처리할 수 .. 2023. 8. 20.
2023.08.19 TIL Java Set 이란? Set은 자바 Colleciton 프레임워크로, 중복된 요소를 허용하지 않는 컬렉션입니다. 순서가 정해져 있지 않으며, 각 요소는 고유한 값이어야 합니다. 대표적인 구현체는 HashSet, LinkedHashSet, TreeSet이 있습니다. Set은 중복을 막기 위해 내부적으로 요소들을 저장할 때 equals()와 hashCode() 메서드를 사용합니다. 중복을 판별하기 위해 equals() 메서드로 객체의 동등성을 비교하고, hashCode() 메서드로 해시값을 계산하여 저장합니다. 장점 중복된 요소를 허용하지 않아 고유한 값만 저장할 수 있습니다. 검색 속도가 빠릅니다. 단점 요소의 순서가 보장되지 않습니다. 추가적인 연산 비용이 들 수 있습니다. 사용해야 하는 경우 고유한 .. 2023. 8. 19.
static lazy 로딩 상황 가정 및 목표 public class Test { static Test instance; public Test() { System.out.println("Test 생성자 호출"); } static { System.out.println("Test.static 블록 초기화"); } private static class InstanceHolder { private static final Test INSTANCE = new Test(); static { System.out.println("InstanceHolder.static 블록 초기화"); } } public static Test getInstance() { System.out.println("getInstance() 호출"); return Insta.. 2023. 8. 19.