728x90
반응형

Java 79

[Java] 디자인 패턴 - 전략 패턴

Strategy 패턴(전략 패턴) 객체들이 할 수 있는 행위 각각에 대해서 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장할 수 있는 방법을 말한다. 객체가 할 수 있는 것들을 전략으로 두고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴이다. 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근점에서 서로 교환 가능하도록 하는 패턴이라고 정의 할 수 있다. 1. 전략 패턴 사용 이유 예를 들어, 게임 캐릭터 클래스가 존재하고, 칼(Knife), 검(Sword), 도끼(Ax) 라는 클래스들이 있고, 이 클래스들은 ..

디자인패턴 2022.08.03

[Java] Optional

오늘은 Java 8버전에 추가된 Optional을 알아보자. 프로그래밍을 함에 있어서 NullPointerException은 계속 만나게 되는데 이유는 null을 반환하거나, null 체크를 깜빡하고 진행하지 않았을때 두 가지로 나눌 수 있다. 메소드에서 작업 중에 특별한 상황에서 값을 제대로 반환할 수 없는 경우 선택 방법 예외처리를 한다.(비싸다, stackTrace를 사용) null을 그대로 반환. (비용에는 문제가 없지만, 그 코드를 사용하는 클라이언트에서 주의해서 사용해야한다) Optional을 반환한다.(Java 8버전부터) 클라이언트의 코드에게 명시적으로 빈 값일 수도 있다는 것을 알려주고, 빈 값인 경우 처리를 강제함) Optional이란? 오직 값 한 개가 들어있을 수도 없을 수도 있는 ..

Java 2022.08.03

Java Stream API

Java Stream API Java Stream Java를 다시 공부하면서 Java8에 추가된 기능중 Stream이라는 API의 기능이 있었지만 무엇인지, 어떻게 사용하는지 내가 직접 구현해보지도 않아서 그리고 막상 사용한 예들을 보니까 내 코드를 더 간결하게 만들 수 있을거란 생각이 들었다. 그래서 공부를 진행하였다. Stream은 위에서도 말했듯, Java 8 버전 부터 추가된 기능이고, 컬렉션이나 배열 등의 저장요소를 하나씩 참조하여 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리하게 해주는 기능이다. 처음에 남들과 같이 Stream이 InputStream, OutputStream같은 I/O Stream인줄 알았지만 그런 Stream은 아니다. 아래의 예를 보면 얼마나 가독성도 좋고 문법이 ..

Java 2022.08.03

[Java] 디자인 패턴 - 어댑터 패턴

Adapter 패턴이란 어댑터 패턴 : 한 클래스의 인터에스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 이 패턴을 사용하면 다른 인터페이스와의 호환성 문제를 해결할 수 있다. 여기서 말하는 어댑터는 우리가 통상 사용하는 220V 전기 플러그를 여행을 갔을때 그 나라에 맞는 규격에 해당하는 전기 플러그 변환 어댑터라고 생각하면 될 것이다. A사 B사 A사 B사 티켓선택 티켓선택 티켓출력 티켓선택 오프라인 구매 오프라인 구매 온라인 구매 메뉴 가져오기 이런 A와 B사의 티켓판매 기계가 있다고 가정을하자. A회사는 오프라인으로만 판매를 하고, B사는 온,오프 라인 나누어서 구매를 할 수 있다. 또 메뉴를 가져오는 기능도 가지고 있다. 여기서 A사의 기술을 B사가 인수를 제안하여 시스템을 통합..

디자인패턴 2022.08.03

[Java] 디자인 패턴 - 빌더 패턴

Builder 패턴 빌더 패턴은 생성 인자가 많을 시, 빌더 객체를 통해 구체적인 객체를 생성한다. 빌더 패턴은 추상팩토리 패턴이나 팩토리 메소드 패턴과는 조금 다르다. 빌더 패턴도 새로운 객체를 만들어 반환하는 패턴이기는 하나, 동작방식이 조금 다르다. 빌더 패턴은 생성자에 들어갈 매개 변수의 수에 관계없이 차례대로 매개 변수를 받아들이고, 모든 매개 변수를 받은 뒤에 이 변수들을 통합하여 한번에 사용한다. 장점 객체 생성에 필요한 파라미터의 의미를 코드 단에서 명확히 알 수 있다. (가독성이 좋다) 생성에 필요한 파라미터가 추가될 때 마다, 생성자 오버로딩을 안해도 된다. 단점 추가적인 빌더 클래스를 구현해야 한다. 활용 생성자 인자가 많은 경우.User user = new User(); user.s..

디자인패턴 2022.08.03

[Java] 디자인 패턴 - 팩토리 패턴

팩토리 패턴 팩토리 패턴은 생성패턴(Creational Pattern) 중 하나이다. 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴이다. 생성 패턴에 속하는 패턴들은 객체를 생성, 합성하는 방법이나 객체의 표현방법을 시스템과 분리해준다. 생성 패턴은 시스템이 상속보다 복합방법을 사용하는 방향으로 진화되어 가면서 더 중요해지고 있다. 생성 패턴에는 중요한 이슈가 2가지 있다. 생성 패턴은 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화한다. 생성 패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 결합하는지에 대한 부분을 완전히 가려준다. 이 두가지를 정리해보면, 생성 패턴을 이용하여 무엇이 생성되고, 누가, 어떻게, 언제 육하원칙 비슷하게 결정하는데에 유연성을 확보할..

디자인패턴 2022.08.03

[Java] 디자인패턴 - 싱글톤 패턴

싱글톤패턴(Singleton Pattern) 싱글톤패턴 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴이다. 생성자가 여러번 호출이 되더라도 실제로 생성되는 객체는 하나뿐이고, 최초로 생성된 이후에 호출된 생성자는 생성된 최초 객체를 반환한다. 그래서 생성자를 private로 선언하여 getInstance()로 받아서 사용한다. 싱글톤 패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴이다. 이말은 인스턴스가 필요할 때마다 똑같은 인스턴스를 new해서 생성하는 것이 아닌 기존에 존재하는 인스턴스를 사용하게 하는것이다. 싱글톤패턴을 사용하는 이유 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비..

Java 2022.08.03

Spring Test MockMvc 한글 깨짐 처리

Spring Test MockMvc의 한글 깨짐 처리 스프링에서 테스트 코드를 작성할 때 MockMvc를 흔히 사용한다. 대략 아래와 같이 설정하고 사용한다. 변경일자 2022-04-19 수정 MockMvc를 보통 테스트코드를 작성할 때 사용할텐데, @WebMvcTest를 사용해서 mvc를 위한 테스트를 만들 수 있다. //@SpringBootTest @WebMvcTest(ApiController.class) public class ApiControllerTest { private MockMvc mockMvc; @Autowired private WebApplicationContext ctx; @BeforeEach public void setup() { this.mockMvc = MockMvcBuilder..

Spring 2022.08.03

CallByValue, CallByReference 비교

Call By Value(값에 의한 호출) call by value 는 가장 일반적인 함수 호출형태로 값을 복사하는 것이다. 예시 public class CallByValue{ public static void swap(int x, int y){ int temp = x; x = y; y = temp; } public static void main(String[] args){ int a = 10; int b = 20; System.out.println("swap() 호출 전 : a = " + a + ", b = " + b); swap(a, b); System.out.println("swap() 호출 후 : a = " + a + ", b = " + b); } } 결과는 아래와 같다 swap() 호출 전 : ..

Java 2022.08.03
728x90
반응형