Java9 Comparable 과 Comparator java로 코딩 테스트 공부를 하면서 필요하다고 느낀 Comparable 과 Comparator 에 대해 알아보자. 둘 다 객체 정렬 기준을 만들기 위해 사용할 수 있다. 결론부터 말하면 함수형 인터페이스여서 람다로 Collections.sort() 의 두번째 인자로 전달할 수 있는 Comparator가 코딩테스트에서 더 유용한 것 같다. 그리고 Comparable, Comparator 둘 다 메서드 구현 시 자신(혹은 앞의 것)-뒤의 것 형태가 오름차순이고, 내림차순은 반대다. Comparable - 함수형 인터페이스가 아니다. - 클래스 정의 시 implement 하고 comapreTo 메서드를 구현한다. public int compareTo(T o);- compareTo 는 자기 자신과 파.. Java 2025. 9. 9. Thread 출처https://jongwoon.tistory.com/9https://ittrue.tistory.com/173Thread 란 ?프로세스 내에서 실제 작업을 수행하는 실행단위 , 즉 프로세스 > 스레드java 에서는 main 스레드에서 시작, 추가로 생성하면 멀티 스레드 환경OS 레벨에서의 보편적 개념하나의 java 프로세스는 기본적으로 하나의 main thread 로 실행됨필요 시 여러 thread 를 만들어 병렬 작업 가능스레드는 프로세스의 힙 메모리 자원을 공유하기 때문에 공유 자원 사용에 각별한 주의 필요MultiThreading여러 스레드를 동시에 실행시키는 프로그래밍 기법프로세스를 생성하는 것보다 스레드를 생성하는 것이 비용이 적다멀티 프로세스보다 멀티 스레드가 비용이 적게 든다동기화를 고려한.. Java 2025. 6. 22. 조기축구 스쿼드메이커 만들기 얼떨결에 조기축구 팀 운영진? 에 합류하게 되면서 스쿼드를 짤 일이 생겼는데 직접 짜려니까 생각보다 너무 머리아팠다. 그래서 스쿼드빌더를 만들었다. 가장 익숙한 java를 사용했고, 어차피 우리팀만 쓸 거니까 launch4j를 사용해 exe 파일로 만들어서 공유했다. 알고리즘은 1쿼터에는 입력 순으로 원하는 포지션에 배치해준다. 배치할 때 쿼터당 `선호 포지션 배정 : 2점, 비선호 포지션 배정 : 1점 으로 점수를 매겨서 다음 쿼터 짤 때는 점수가 낮은 사람부터 원하는 포지션에 넣어줬다. 그리고 참석율에 따라 배정 쿼터 수를 3쿼터, 2쿼터로 나눴다. (우리 팀의 규칙이다) GUI는 대충 동작만 하면 되기 때문에 gpt한테 맡겼다. 나름 잘 만들어줬다. ㅋㅋ txt 파일로 선수이름, 불참횟수, 선호.. Java 2025. 1. 27. 클래스와 인터페이스 클래스와 인터페이스 설계에 사용하는 강력한 요소를 활용하는 방법을 알아보자. [아이템 15] 클래스와 멤버의 접근권한을 최소화하라 잘 설계된 컴포넌트는 내부 구현을 완벽히 숨겨 구현과 API를 깔끔하게 분리한다. APi를 통해서만 다른 컴포넌트와 소통한다. 이것을 정보 은닉, 캡슐화라고 하며 sw 설계의 근간이 되는 원리다. 캡슐화의 장점은 다음과 같다 개발 속도가 높아진다. 여러 컴포넌트 병렬 개발이 가능하기 때문이다. 관리 비용을 낮춘다. 디버깅, 교체 부담이 적다. 성능 최적화에 도움을 준다. 최적화할 컴포넌트를 정하고 다른 컴포넌트에 영향을 주지 않고 최적화 할 수 있다. 재사용성을 높인다. 컴포넌트가 외부에 거의 의존하지 않고 독자적으로 동작할 수 있기 때문이다. 큰 시스템 제작 난이도를 낮춘다.. Java/이펙티브 자바 2024. 1. 5. 모든 객체의 공통 메서드 Object 클래스의 final이 아닌 메서드들은 재정의를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약을 따라야 한다. 잘못 구현하면 클래스가 이 규약을 준수한다고 가정하는 HashMap 같은 클래스가 오동작할 수 있다. [아이템 10] equals는 일반 규약을 지켜 재정의하라 먼저 equals를 재정의하지 않아야 할 상황이 있다. 각 인스턴스가 본질적으로 고유하다 값이 아닌 동작하는 개체 표현 , Thread 논리적 동치성을 검사할 일이 없다 상위 클래스 equals가 하위 클래스에 들어맞는다 클래스가 private이거나 package-priavte이고 equals를 호출할 일이 없다. equals가 실수로라도 호출되는걸 막고 싶다면 오버라이딩해서 예외를 던지도록 하자 equals는 .. Java/이펙티브 자바 2024. 1. 4. 객체 생성과 파괴 [아이템 1] 생성자 대신 정적 팩터리 메서드를 고려하자 정적 팩터리 메서드는 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드다. 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체로는 반환될 객체의 특성을 제대로 설명하지 못한다. 정적 팩터리 메서드는 이름만 잘 지으면 반환될 객체의 특성을 잘 묘사할 수 있다. 2. 호출될 떄마다 인스턴스를 새로 생성하지 않아도 된다. 생성자는 호출될 때마다 인스턴스를 만들어야 하지만, 정적 패터리 메서드는 그렇지 않다. 반복되는 요청에 같은 객체를 반환할 수 있다. 따라서 언제 어느 인스턴스를 살아있게 할지 통제할 수 있다. 이런 클래스를 인스턴스 통제 클래스라 한다. 3. 반환 타입의 하위 타입 객체를 반환할 수 있다. 반환될 객체의 타입을.. Java/이펙티브 자바 2024. 1. 2. Java 정렬 https://80000coding.oopy.io/21cb57a3-681b-404d-a4ac-8ab0e7289bc0 [JAVA] Sort 사용 (Arrays, Collections) Java’s Sort 80000coding.oopy.io Arrays.sort int[] arr = new int[] {1,5,3,2,4}; Arrays.sort(arr); Integer[] arr2 = new Integer[] {3,4,6,1}; Arrays.sort(arr2); Arrays.sort로 배열을 정렬할 수 있다. 오름차순으로 정렬한다. Integer[] arr2 = new Integer[] {3,4,6,1}; Arrays.sort(arr2,Collections.reverseOrder()); 내림차순으로 정렬하.. Java 2023. 12. 25. Java에서의 예외처리 예외 클래스 Java에서 예외는 class로 선언된다. Exception 클래스나 Exception의 서브클래스를 상속받아서 선언한다. 클래스이므로 생성자, 멤버변수, 함수 등을 가질 수 있다. 예외 클래스들은 일반 객체처럼 사용할 수 있다. 일반 객체와 다른 점은 예외 클래스는 throw 할 수 있다는 것이다. Java의 예외 구조는 위와 같다. 실행시간에 발생하는 예외들은 RuntimeException을 상속하며, Runtime예외는 컴파일러에 의해 미리 검사할 수 없다. 예외 처리 throw문을 통해 예외를 던진다. 예외가 발생했는데 handle하지 않으면 예외메세지가 표시된다. 예외메세지는 call stack trace를 포함한다. (main method부터 시작한 호출 과정) try-catch-.. Java 2023. 12. 15. StringBuilder, StringJoiner, String.format 우테코 프리코스 1주차 미션을 하면서 나는 +를 이용해 문자열 생성을 했다. 리뷰어가 StringBuilder, StringJoiner, String.format을 사용해서 관리하는게 어떻겠냐고 조언을 해줬다. 그래서 각 내용에 대해 간단하게 정리해보고자 한다. 먼저 String을 +를 사용해 이어붙일 때의 성능상의 단점을 알아보자. String은 불변 객체다. 즉 한번 생성하면 바꿀 수 없다. +를 이용해 하나의 문자열을 다른 문자열과 연결하게 되면 새 문자열이 생성되고 이전 문자열은 가비지 컬렉터로 돌아간다. 따라서 여러 번의 이어붙이기 연산을 통해 String을 이어붙인다면 메모리 낭비가 발생하게 된다. 가독성 측면에서도 String을 단순히 +로 이어붙이기보다는 StringBuilder나 Stri.. Java 2023. 10. 29. 이전 1 다음