최근 글
-
Enum을 비교할 때에는 ==과 equals()중 어떤 것을 써야 할까?One Cookie a day 2024.02.06 10:23
회사에서 MergeRequest를 올리고 코드 리뷰를 팀원께 요청드렸었는데, 아래와 같이 Dto에 있던 enumType비교 시 ==기호를 사용한 것에 대해 코드 리뷰가 달렸었다. if (someDto.type == someEnumType.Atype) { // do something } Enum 비교에 있어서 equals( )와 ==의 차이에 대해 공부해보는것도 좋을 것 같다고 공부할만한 토픽을 하나 주셔서, 겸사겸사 공부한 것을 정리하려 포스팅한다. equals( )와 == 연산의 차이는 CS 스터디때도, 멘토링 공부하면서도 알고 있던 부분이라고 생각했고, 다시 내가 공부했던 내용을 찾아보면 아래와 같다. equals()는 참조 변수의 값이 같은지 비교하는 메소드로, 재정의 되어있지 않다면 객체의 주소값..
-
Factory Pattern디자인패턴 2024.01.17 11:10
🤔 인터페이스를 사용한다고 해도 구상 클래스의 인스턴스를 만들어야 하지 않나? Duck duck = new MallardDuck(); // Duck이라는 인터페이스를 써서 유연하게 만들려고 해도, 그럼에도 구상 클래스의 인스턴스를 만들어야 한다. Duck duck; if (picnic) { duck = new MallardDuck(); } else if (hunting) { duck = new DecoyDuck(); } else if (inBathTub) { duck = new RubberDuck(); } 이 코드를 보면 구상 클래스의 인스턴스가 여러 개 있고, 그 인스턴스의 형식은 실행 시 조건에 따라 결정된다. 변경하거나 확장할 때, 코드를 다시 확인하고 새롭게 추가하거나 기존 코드 제거 => 관리와..
-
Decorator Pattern디자인패턴 2024.01.11 17:39
🍦 Decorator Pattern 객체에 추가 요소를 동적으로 더할 수 있는 디자인 패턴 서브 클래스 만들 때보다 훨씬 유연하게 기능을 확장할 수 있음 데코레이터의 슈퍼 클래스는 자신이 장식하고 있는 객체의 슈퍼 클래스와 동일 ~ 원래 객체에 들어갈 자리에 데코레이터 넣어도 상관 X 힌 객체를 여러 개의 데코레이터로 감쌀 수 있음 객체는 언제든지 감쌀 수 있음, 실행중에 필요한 데코레이터를 마음대로 적용 가능 - 객체 구성(인스턴스 변수로 다른 객체 저장하는 방식) 사용 ~ 첨가물을 다양하게 추가해도 유연성을 잃지 않도록 예시 ) 커피 주문 public abstract class Beverage { String description = "제목 없음"; public String getDescription..
-
Observer Pattern디자인패턴 2024.01.04 18:07
🍄 Observer Pattern이란 무엇인가? 한 객체의 상태가 바뀌면, 그 객체에 의존하는 모든 객체들에 연락이 가고 자동으로 내용이 갱신되는 방식 주제에서 중요한 데이터 관리 → 주제 데이터 바뀌면 옵저버에게 바뀐 값 / 바뀌었다는 소식이 전해진다. 옵저버 객체들은 주제를 구독하고 있으며(주제 객체에 등록되어 있음), 주제 데이터가 바뀌면 갱신 내용을 전달받는다. Subject : Observer = 1 : N 관계 public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObservers(); // 모든 옵저버들에게 변경내용을 알..
Java
-
Factory Pattern
🤔 인터페이스를 사용한다고 해도 구상 클래스의 인스턴스를 만들어야 하지 않나? Duck duck = new MallardDuck(); // Duck이라는 인터페이스를 써서 유연하게 만들려고 해도, 그럼에도 구상 클래스의 인스턴스를 만들어야 한다. Duck duck; if (picnic) { duck = new MallardDuck(); } else if (hunting) { duck = new DecoyDuck(); } else if (inBathTub) { duck = new RubberDuck(); } 이 코드를 보면 구상 클래스의 인스턴스가 여러 개 있고, 그 인스턴스의 형식은 실행 시 조건에 따라 결정된다. 변경하거나 확장할 때, 코드를 다시 확인하고 새롭게 추가하거나 기존 코드 제거 => 관리와..
-
Decorator Pattern
🍦 Decorator Pattern 객체에 추가 요소를 동적으로 더할 수 있는 디자인 패턴 서브 클래스 만들 때보다 훨씬 유연하게 기능을 확장할 수 있음 데코레이터의 슈퍼 클래스는 자신이 장식하고 있는 객체의 슈퍼 클래스와 동일 ~ 원래 객체에 들어갈 자리에 데코레이터 넣어도 상관 X 힌 객체를 여러 개의 데코레이터로 감쌀 수 있음 객체는 언제든지 감쌀 수 있음, 실행중에 필요한 데코레이터를 마음대로 적용 가능 - 객체 구성(인스턴스 변수로 다른 객체 저장하는 방식) 사용 ~ 첨가물을 다양하게 추가해도 유연성을 잃지 않도록 예시 ) 커피 주문 public abstract class Beverage { String description = "제목 없음"; public String getDescription..
-
Observer Pattern
🍄 Observer Pattern이란 무엇인가? 한 객체의 상태가 바뀌면, 그 객체에 의존하는 모든 객체들에 연락이 가고 자동으로 내용이 갱신되는 방식 주제에서 중요한 데이터 관리 → 주제 데이터 바뀌면 옵저버에게 바뀐 값 / 바뀌었다는 소식이 전해진다. 옵저버 객체들은 주제를 구독하고 있으며(주제 객체에 등록되어 있음), 주제 데이터가 바뀌면 갱신 내용을 전달받는다. Subject : Observer = 1 : N 관계 public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObservers(); // 모든 옵저버들에게 변경내용을 알..
-
프로그래머스 - 단속카메라, 백준 13549, 5427
🚨 프로그래머스 : 단속카메라 https://school.programmers.co.kr/learn/courses/30/lessons/42884 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🚨그리디 알고리즘 문제 🚨진입 / 진출 지점에서 만난 것도 만난 것으로 인정하므로 구간 끝에 카메라를 설치한다고 생각하면 된다. 🚨여기서 진입 지점으로 정렬할지 진출 지점으로 정렬할지 헷갈렸는데 진출 시점으로 정렬해야 한다. 첫 구간이 아주 길다면 내부 구간이 다 무시되기 때문이다. 🚨그림 설명 🚨전체코드 참고로 pivot은 이 구간의 최솟값이 -30000이라 -30..
Computer Science
-
CS - Java & Spring 정리
🍓 Java 문법 & 특징 🍓 자바는 인터프리터 언어인가요? 컴파일 언어인가요? 자바는 2가지 방식을 모두 혼합하여 사용합니다. 자바 컴파일러가 .java 파일을 컴파일을 통해 .class파일을 만들고, JVM의 실행 엔진의 인터프리터가 각 운영체제에 맞게 이진 코드로 변환 후 실행합니다. 🍓 자바 프로그램의 수행 과정에 대해 말씀해주세요. 자바 소스 코드를 프로그래머가 작성(.java) → 자바 컴파일러가 바이트 코드로 변환 (.class) → JVM 클래스로더로 전달, 클래스 로더가 JVM의 Runtime Data Area(JVM이 OS로부터 할당받는 메모리영역)에 올린다. → 실행 엔진이 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행합니다. 🍓 Java의 String 클래스에서 equals()..
-
CS - 운영체제 정리
기본 개념 운영체제가 무엇인가요? 하드웨어 자원을 관리하고, 응용프로그램과 하드웨어 사이를 중재하는 인터페이스입니다. 커널이 무엇인가요? 메모리에 상주하는 운영체제의 핵심 부분으로, OS 전체를 메모리에 올려두는 것은 메모리 낭비가 심하므로 핵심 부분인 커널만 메모리에 올려놓고 사용합니다. 시스템 콜이 무엇이고 왜 존재하는지 설명해주세요. OS가 커널에 접근하기 위한 인터페이스로, 유저 프로그램이 OS의 서비스 받기 위해 커널함수를 호출할 때 사용합니다. 자원에 대한 직접 접근을 차단함으로써 자원을 보호한 채 사용자에게 서비스를 제공하기 위해 존재합니다. 인터럽트란 무엇이고 어떤 종류가 있나요 ? CPU가 프로그램을 실행하고 있을 때 하드웨어 장치 이벤트나 예외 상항등이 발생했을 때 마이크로 프로세서에게..
-
CS - 네트워크 정리
📝 Basic 📝 OSI 7계층 Application - Presentation - Session - Transport - Network - DataLink - Physical 📝 MAC 주소와 IP주소에 대해 설명해주세요. MAC 주소 : NIC에 할당된 고유 주소로, 물리적으로 기기에 부여, 네트워크 장치 통신에 사용 IP 주소 : 컴퓨터 및 기타 장치들이 인터넷에서 통신할 때 사용되는 논리적인 주소 📝 URL URI 차이 URI : 특정 리소스를 식별하는 통합 자원 식별자, 논리적, 물리적인 리소스를 식별하는 고유한 문자열 URL : 리소스를 어떻게 얻고 어디에서 가져와야하는지 명시하는 URI 📝 NAT란 무엇인가요? 네트워크 주소 변환 기술로, 사설 네트워크에 속한 여러 호스트가 하나의 공인 IP..
-
CS - 데이터베이스 정리
그동안 CS 스터디를 몇 달간 지속하면서, 팀원들과 집단 지성으로 공부했던 내용들을 정리 해보려 한다. 📝 Database 기본 Q : 데이터베이스 Key에는 어떤 것들이 있나요? - 후보키 : 유일성(key로 하나의 행 구분 가능) 최소성(최소 개수의 속성들로 구성)만족하는 속성들의 집합 - 기본키 : 후보키 중 선택한 키, 테이블에서 기본키는 오직 1개, Null 및 중복값 불가 - 대체키 : 후보키가 2개이상일 경우 기본키 외 다른 후보키들 - 외래키 : 다른 테이의 데이터를 참조하여 테이블의 관계를 연결하는 키, 참조될 테이블 A의 기본키 == 참조할 테이블 B의 외래키 - 슈퍼키 : 유일성은 만족하나 최소성을 만족하지 못하는 키 집합 Q : 데이터베이스 Schema란 무엇인가요? 데이터베이스를 ..
Spring
-
Inflearn Spring Framework 입문
백기선님의 Spring Framework 입문 강의를 수강하며 간단히 정리한 내용입니다. 🌵 IoC 위 코드와 아래 코드를 비교해보자. class OwnerController { private OwnerRepository repository = new OwnerRepository(); } class OwnerController { private OwnerRepository repository; public OwnerController(OwnerRepository repository) { this.repository = repository; } } 위의 코드 OwnerController는 자기가 필요한 OwnerRepository를 직접 new로 생성해서 사용한다. 내가 사용할 것은 내가 만들어서 쓴다 :..
-
Spring 입문 7~8주차
✅ 섹션8은 다음 강의 로드맵 설명이라 섹션 7, AOP(Aspect Orient Programming) 내용을 정리하려 한다. 🧃 AOP? - 공통 관심사항과 핵심 관심사항을 분리하는 것. - 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화한다. - 소스 코드 상에서 다른 부분에 반복해서 쓰는 코드들을 흩어진 관심사로 정의하고 이들을 Aspect로 모듈화한다.이로써 핵심적인 비즈니스 로직에서 분리가 가능하다. - AOP 또한 스프링 빈에만 적용 가능하므로 Spring.Config파일에 Bean으로 등록하거나 @Component 어노테이션을 추가해줄 것. 🤔 공통 관심사와 핵심 관심사를 분리하는 것이란? - 예를 들어, 모든 메소드의 수행시간을 측정하..
-
Spring 입문 4 ~ 6주차
📌 스프링 빈과 의존관계 📌 Component scan - @Component 어노테이션이 붙은 코드를 스캔하여 스프링 컨테이너 빈으로 등록하는 것 - 강의에서 사용한 @Controller, @Service, @Repository등이 @Component의 특수화된 케이스들. - Application 파일 하위부터 컴포넌트 스캔이 들어가므로 default 설정은 패키지 포함 하위만 스캔하며, @ComponentScan 어노테이션을 표기해두면 상위에서도 컴포넌트 스캔 하도록 지정이 가능 - 스프링 컨테이너가 @Controller 보고 객체로 생성하여 관리해준다. 스프링 실행 시점에 이 @Controller 객체를 생성하여 스프링 컨테이너가 관리 - 위에 적혀있듯 Controller는 요청을 받는 측, Ser..
-
Spring 입문 강의 섹션 0 ~ 섹션 3
동아리에서 사실 이전에 스프링 프로젝트는 했었지만, 기본기 다질 겸 입문 강의부터 듣고 있는 중이다. 그래도 프로젝트 해보니까 강의 들으면서 이게 이런거였군~ 하고 깨달을 수 있는 것 같다. 간단하게 강의 들으면서 기록해둔 내용 복습겸 정리하는 포스팅. ✅ Spring Boot Starter https://start.spring.io/ 필요한 프로젝트, 언어, java 버전, 옆에가 잘렸는데 라이브러리 등도 지정이 가능하다. 그리고 generate 누르면 필요한 프로젝트의 초기 설정들을 만들어주는 유용한 사이트. 저번에 프로젝트 할 때도 사용했었다. Spring Boot 버전은 Snapshot은 아직 만들고 있는 것, M어쩌구는 정식 릴리즈가 아직 안 된 것이니 아무런 영어가 안붙은 버전으로 선택했다. ..