Java 28

[Spring 스프링] consumes와 produces의 차이

produces 컨트롤러가 생산해서 클라이언트에게 반환하는 메시지의 형식을 지정 요청 헤더에서 Accept 헤더와 produces가 일치해야 함 @GetMapping(path = "/users", produces = MediaType.APPLICATION_JSON_VALUE) 컨트롤러에서 위의 어노테이션을 달고 있는 메서드 왈: 내가 보내는 응답은 json 형식이란다^.^~ consumes 컨트롤러가 클라이언트로부터 받아서 소모하는 메시지의 형식을 지정 요청 헤더에서 Content-Type 헤더와 consumes가 일치해야 함 @PostMapping(path = "/users", consumes = MediaType.APPLICATION_JSON_VALUE) 컨트롤러에서 위의 어노테이션을 달고 있는 메서..

[JAVA 자바] chat gpt와 SOLID 원칙에 대해 공부를 해보았다(1)

요즘 책을 읽으면서도, 강의를 들으면서도 가끔 SOLID 원칙이 언급되길래, 한번 chat gpt와 대화하며 공부한 내용을 정리해 보았다. 🤔 SOLID 원칙이란? 객체 지향 프로그래밍에서 유지보수와 확장을 쉽게하고, 코드의 유연성 등을 보장하기 위해 만들어진 다섯가지 원칙이다. 이 원칙은 단일 책임 원칙(SRP), 개방-폐쇄 원칙(OCP), 리스코프 치환 원칙(LSP), 인터페이스 분리 원칙(ISP), 의존관계 역전 원칙(DIP)으로 구성된다. 🍏 S 단일 책임 원칙 (SRP, Single Responsibility Principle) 하나의 클래스나 모듈은 하나의 책임만 가져야 한다. SOLID 원칙을 정의한 로버트 마틴은 여기서 '책임'을 단순히 클래스나 모듈이 해야 할 일을 의미하는 것이 아니라,..

[JAVA 자바] 추상클래스의 올바른 사용 방법

오늘 체스 미션 코드리뷰에서 추상 클래스에 대한 피드백을 받아서, 이 내용에 대해 한번 스스로 정리해보고자 한다. 먼저 코드리뷰를 받은 문제의 코드를 보여주겠다. 체스에서 Queen, King, Rook, Pawn, Knight, Bishop이라는 기물들에 대한 클래스를 먼저 작성하였고, 코드를 작성하다보니 코드가 중복되는 부분이 많아서, 중복되는 부분은 모두 체스 기물을 추상화한 Piece라는 추상클래스에 올렸다. public abstract class Piece { protected final Team team; protected final Movement movement; public Piece(Team team, Movement movement) { this.team = team; this.mov..

[JAVA 자바/이펙티브 자바] 아이템 46. 스트림에서는 부작용 없는 함수를 사용하라

스트림에서는 부작용 없는 함수를 사용하라 🐣 부작용이 없다? - 오직 입력만이 결과에 영향을 줘야 한다. - 다른 가변 상태를 참조하지 않고, 함수 스스로도 다른 상태를 변경하지 않는다. 이것을 `순수 함수`라고 부른다. 다음 예시에선, 스트림의 forEach에서 외부의 results를 참조하고, results의 상태를 변경하게 되는 부작용이 발생한다. ArrayList results = new ArrayList(); stream.filter(s -> pattern.matcher(s).matches()) .forEach(s -> results.add(s)); 아래처럼 고치는게 좋다. Listresults = stream.filter(s -> pattern.matcher(s).matches()) .coll..

[JAVA 자바] equals와 hashcode를 함께 정의해야 하는 이유

두 객체의 주소값이 같다면 두 객체를 물리적으로 같다고 한다. 두 객체가 주소값이 일치하지 않더라도, 두 객체의 필드가 일치하기만 한다면 두 객체가 같다고 판단하는 것은 두 객체는 논리적으로 같다고 한다. 모든 클래스들은 Object 클래스를 상속하는데, Object 클래스에는 equals 메소드가 존재한다. equals를 재정의 하지 않은 상태에서는 두 객체를 비교할 때 물리적 같을 때만 true를 반환한다. 반면 equals를 오버라이딩으로 재정의 해준다면 두 객체가 논리적으로 같을 때도 true를 반환하게 된다. 인텔리제이의 Generate 단축키(윈도우 기준 alt + insert)를 사용하면, 인텔리제이는 eqauls와 hashcode를 한번에 재정의하게 한다. 인텔리제이는 괜한 짓을 하지 않는..

[JAVA 자바] NumberFormatException은 IllegalArgumentException을 상속한다 / Exception 계층 구조

아주 큰 정수가 들어오는 경우에는 따로 예외처리하는 코드를 작성하지 않아서 이를 작성하고자 했다. 프로모션 코드를 작성하기에 앞서 테스트 코드를 작성하는 중이었는데 이상한걸 발견했다. 입력값으로 아주 큰 정수를 주었는데, IllegalArgumentException을 발생시켰다며 테스트 코드를 통과해버린 것이다. 나는 테스트가 실패할 줄 알았다. 실제로 프로그램을 실행시키고 아주 큰 정수를 입력값으로 주었을 땐 NumberFormatException이 발생했다고 하였기 때문이다. 그래서 IllegalArgumentException을 NumberFormatException으로 바꾸고 정보를 봤다. 그랬더니 IllegalArgumentException을 상속한다고 써있다. 다음 링크로 들어가보면 Except..

[백준] 11729번 하노이 탑 이동 순서 -자바(JAVA)

https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 망할 하노이탑을 리뷰할 시간이다. 덕분에 머리에 과부하가 제대로 걸렸다. 백준에서 단계별로 풀어보기를 따라서 풀어보고 있던 터라, 재귀 함수를 이용하는 문제인 줄은 알고 시작했다. 어릴때 모형으로 여러번 가지고 놀았던 기억이 있는데, 도대체 이걸 어떻게 코드로 구현하란건지 막막했다. 그러곤 한창 스트레스 받으며 화장실에 앉아있었는데, 갑자기 머리에 스쳐지나간 생각이 있다. "도대체 이..

[JAVA 자바] contains()를 이용한 문자열 포함 여부 확인/replace()를 이용한 문자열 치환

문자열 포함 여부 확인 contains() 문자열이 특정 문자열을 포함하고 있는지 확인한다. 포함하고 있으면 true를, 아니면 false를 반환하며, 대소문자를 구분한다. import java.io.*; public class Main { public static void main(String[] args) { String str = "Hello my name is hectick, not hectic"; System.out.println(str.contains("hello")); //false 출력 System.out.println(str.contains("Hello")); //true 출력 System.out.println(str.contains("hectick")); //true 출력 } } 문자열..

[JAVA 자바] 비트연산자 & | ^ ~ << >>

비트연산자 비트 연산은 0과 1로 표현된 이진수에 관한 연산으로, 비트연산자는 피연산자를 비트단위로 연산한다. 실수형(float, double)을 제외한 모든 기본형에 사용 가능하다. OR 연산자( | ) 두 개의 피연산자의 해당 비트 중 어느 한 쪽이 1이면 1을 반환하고, 아니면 0을 반환한다. public class Main { public static void main(String[] args) { int A = 13; int B = 4; System.out.println("십진수 : "+ (A) + " -> 이진수 :" + Integer.toBinaryString(A)); System.out.println("십진수 : "+ (B) + " -> 이진수 :" + Integer.toBinaryStri..

[JAVA 자바] Arrays.sort() 를 이용한 배열 정렬(오름차순)

자바에서는 java.util.Arrays 클래스의 sort() 메서드를 이용해 배열을 정렬할 수 있다. JAVA api 문서에 가보면 자세한 설명을 볼 수 있는데, 나는 int형 배열을 정렬하는 경우를 정리해보겠다. 다른 자료형의 경우는 다음 링크에서 찾아보면된다. (util 패키지 -> Arrays 클래스) https://docs.oracle.com/javase/8/docs/api/ Java Platform SE 8 docs.oracle.com 배열 정렬 Arrays.sort() api 문서에 의하면 sort() 메서드의 정렬 알고리즘은 Dual-Pivot Quicksort 이다. 이 알고리즘의 시간복잡도는 평균 O(nlogn)이며 최악의 경우는 O(n^2)지만, 일반적으로 기존의 (one-pivot)..

1 2 3