❑ 객체를 정의해 놓은 것❑ 객체를 생성하는데 사용됨 ❑ 클래스 → (인스턴스화) → 인스턴스(객체)❑ 객체는 실제로 존재하는 것(사물 또는 개념)이며 객체의 속성(멤버 변수)과 기능(메서드)에 따라 다르게 사용된다상속SportsCar는 Car이다(is-a)포함 관계한
클래스나 인터페이스 내부에서 선언되는 클래스코드의 복잡섭을 줄일 수 있다.(캡슐화)외부에 불필요한 클래스를 감춘다.내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.외부 클래스의 private 필드와 메서드에도 접근할 수 있다.인스턴스 내부 클래스스태틱 내부
열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미합니다.가독성이 좋아 진다컴파일시 타입 안정성이 보장된다.만약 type이 NOTE로 설정되었는데 다른 값이 할당되면 바로 에러가 난다.기본추가 속성 부여위에서 확인할 수 있듯이 생성자가 있지만 열거형 객체 생성에 사
클래스 변수의 복잡한 초기화에 사용되며 클래스가 처음 로딩될 때 한번만 수행된다.인스턴스 변수의 복잡한 초기화에 사용되며 인스터스가 생성될 때마다 수행된다.생성자보다 먼저 수행된다.
부모 클래스의 속성 및 동작을 상속하는 기능중복되는 내용을 제거할 수 있다.하지만 결합도를 높일 수도 있다 .자식 클래스는 부모 클래스의 구현에 의존하고 있기 때무에 부모 클래스의 변경에 영향을 많이 받는다.상위 클래스의 내부 구현을 알아야지만 하위 클래스를 제대로 사
데이터와 기능을 하나로 묶은 그룹객체를 만들고 조작하며 객체끼리 관계를 맺음으로써 다수의 객체가 함께 수행상속을 통해 프로그래밍시 코드 재사용을 높일 수 있다.잘 설계된 클래스 만들어서 독립적인 객체를 사요함으로써 개발의 생산성을 향상시킬 수 있다.우리 일상생활의 구
OOP는 실제 사물을 프로그래밍으로 옮겨와 모델링하는 것이다.공통적인 특징을 특징을 파악하여 하나의 개념을 다루는 것정보 은닉을 통해 높은 응집도 낮은 결합도를 유지하여 유연함과 유지보수성을 증가하는 것private 키워드를 통해 낮은 결합도를 유지하여 유연함과 유지보
틀린 내용이 있을 수도 있습니다!“리스코프 치환 원칙은 기능의 명세(또는 계약)에 대한 내용이다. 명시된 명세에서 벗어난 기능을 수행하거나, 값을 리턴하거나, 익셉션을 발생하는 것이 흔한 위반 사례이다.”상위 타입의 객체를 하위 객체로 바꾸어도 정상적으로 동작해야한다여
과제로 나오는 패턴은 다 알아야한다.SingletonFactory method pattern & abstract factory method patternBuilderStrategyProxy <-> decorator의 차이점Adapter 패턴Iterator디자인 패
✔︎ 딱 1개만 있어야한다.✔︎ 인스턴스를 오직 1개만 만들어야 한다.✔︎ thread-safe가 반드시 보장되어야 한다.클래스내에 private static을 사용하여 instance 변수를 생성하면서 인스턴스화에 상관 없이 접근 가능하면서 instance 변수에 함
✔︎ factory method pattern 객체 생성 처리를 서브 클래스로 분리해 처리하도록 캡슐화하는 패턴 객체의 생성 코드를 별도의 클래스 또는 메서드로 분리하여 객체 생성 변화에 대비할 수 있다. 특정 기능의 구현은 개별 클래스를 통해 제공되는 것이 바람직
패턴은 Real Class의 기능에 다른 기능을 추가하는 목적객체의 결합 을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 Decorator 클래스로 정의 한 후 필요한 Decorato
✔︎ proxy 패턴 인터페이스를 사용하고 실행시킬 클래스에 대한 객체가 들어갈 자리에 대리자(proxy) 객체를 대신 투입하는 패턴이다. 단 proxy 객체는 결과값을 조작하거나 변경시켜선 안된다. 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. (인터페이
실행될 기능을 캡슐화함으로서 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우 이벤트를 발생시키는 클래스에 수정하지 않아야할 때 유용Invoker기능의 실행을 요청하는 클래스Co
✔︎ 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴✔︎ 특정 컨텍스트에서 알고리즘을 별도로 분리하는 설계 방법을 의미✔︎ 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴\*전략이란 어떤 목적을 달성하기 위한 비즈니스 로직 또는 알고리즘컨텍
어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바뀌지 않으면서 특정 단계에 수행하는 내역을 바꾸는 패턴전체적으로 동일 부분적으로 다른 코드에서 코드 중복을 최소화동일한 기능을 상위 클래스에 정의 확장/변화가 필요한 부분은 서브 클래스에
자바에서 이미 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩하여 생성자, 멤버 필드, 멤버 메서드 등을 사용할 수 있는 기법런타임에 동적으로 특정 클래스의 정보를 객체화를 통해 분석 및 추출해낼 수 있는 프로그래밍 기법장점유연성단점런타임 시점에 오류를 잡기
프로젝트에서 Java 17을 사용하였기에 Java 17에대해 간단히 정리합니다.17은 8과 11에 이은 3번쨰 LTS이다.17에서 정식 추가된 기능이다.Super Class의 Sub Class들을 명확히 인지할 수 있도록 해준다.상속하거나 구현할 클래스를 지정해두고 해
Garbage First GCGarbage만 있는 Region을 먼저 회수하기 때문에 Garbage First라고 한다.Java 9 이상 부터 G1 GC를 기본 실행 방식으로 사용한다.CMS GC의 메모리 단편화 문제를 해결한다.Stop The World 시간을 최소화
class Box<T> { … }Box<T> : 제네릭 클래스T : 타입 변수 또는 타입 매개 변수Box : 원시 타입제네릭 타입을 메서드 리턴 타입 앞에 선언한 메서드제네릭 메소드에서 사용되는 와 제네릭 타입으로 사용되는 T는 다르다.Student 클래스에
메서드를 하나의 식으로 표현하는 것간결한 인터페이스 인스턴스 생성 방식함수형 인터페이스에서만 사용 가능하다.람다식 참고(https://velog.io/@yshjft/2022%EB%85%84-3%EC%9B%94-23%EC%9D%BC-TILabout 함수형 인터페
초기화 시점클래스 변수클래스가 처음 로딩될 때 단 한번 초기화인스턴스 변수인스턴스가 생성될 때마다 각 인스턴스별로 초기화 초기화 순서클래스 변수기본값 → 명시적 초기화 → 클래스 초기화 블록인스턴스 변수기본값 → 명시적 초기화 → 인스턴스 초기화 블록 → 생성자(추가)
동기화 적용(thread1 → thread2)동기화 안됨서로 다른 인스턴스는 lock을 공유하지 않는다.동기화 안됨synchronized는 인스턴스 접근 자체에 락을 거는 것은 아니다.동기화인스턴스에 lock을 거는 synchronized 키워드는 synchronize
synchronized mehtod의 경우 동일한 인스턴스에 대하여 synchronized가 붙은 메서드를 모두 동일한 락을 걸어버린다.이 때 원하는 메서드만 그룹화(?)시켜서 락을 걸 수 있는 방식이 synchronized block이다.또한 메서드 내에서 필요한 부
thread.start()를 통해 쓰레드를 시작할 수 있다.하지만 바로 실행되는 것은 아니다. 일단 실행대기 상태에 있다가 자신의 차례가 되어야 실행된다.실행 순서는 스케줄러에 의해서 실행된다.run()은 새로운 쓰레드를 실행시키지 않고 단순히 메서드만 실행시킨다.ma
flatmap > Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. ...