개발바닥곰발바닥
반응형
[이펙티브 자바] Item 10. equals는 일반 규약을 지켜 재정의하라
JAVA 2023. 1. 25. 21:40

equals는 일반 규약을 지켜 재정의하라 equals 메서드는 재정의하기 쉬워 보이지만 자칫하면 끔찍한 결과를 초래한다. 문제를 회피하는 가장 쉬운 길은 아예 재정의하지 않는 것이다. 그냥 두면 그 클래스의 인스턴스는 오직 자기 자신과만 같게 된다. 아래 중 하나에 해당한다면 재정의하지 않는 것이 최선이다. 재정의 하지 않는 것이 좋은 경우 각 인스턴스가 본질적으로 고유하다. 값을 표현하는게 아니라 동작하는 개체를 표현하는 클래스가 여기 해당한다. Thread가 좋은 예로, Object의 equals는 이러한 클래스에 맞게 구현되었다. 인스턴스의 논리적 동치성(logical equality)을 검사할 일이 없다. 예를 들어 java.util.regex.Pattern은 equals를 재정의해서 두 Pat..

[Java] equals와 hashCode
JAVA 2022. 12. 22. 20:44

equals와 hashCode Java의 모든 클래스는 Object 클래스를 암시적으로 상속받고 있다. 모든 클래스의 조상인 Object 클래스에서는 모든 클래스가 공통적으로 포함하고 있어야 하는 기능을 제공한다. 그 중 오늘은 equals와 hashCode 메서드에 대해서 알아보려고 한다. 그 전에 객체의 동일성과 동등성에 대한 개념부터 짚고 넘어가야 한다. 객체의 동일성과 동등성 동일성(Identity) 동일성은 두 객체가 같은 메모리 주소 값을 가지는 경우를 의미한다. 같은 주소 값을 가지고 있기 때문에 두 변수가 모두 같은 객체를 가리킨다. 두 변수의 동일성은 == 연산자를 통해 확인할 수 있다. 또한 후술할 equals 메서드의 기본 구현도 == 연산자를 통해 이루어지기 때문에 동일성을 비교한다..

[Java] Stream API 정리
JAVA 2022. 11. 27. 03:10

Stream이란? 기존 Java에서 컬렉션 데이터를 처리할 때 for, foreach 반복문을 사용하며 컬렉션 요소들을 하나씩 다뤄야 했다. 이때 코드가 복잡해지는 문제점을 해결하기 위해 JDK 8부터 함수형 프로그래밍이 가능하도록 구현된 API로 데이터를 추상화하고 처리하는데 자주 사용되는 함수들이 정의되어 있다. Stream API를 사용하지 않는 경우와 Stream API를 사용한 경우의 코드를 비교해보도록 하겠다. 배열과 리스트를 정렬하는 코드에서 Stream API를 사용하지 않는 경우 아래와 같이 작성할 수 있다. Stream API 미사용 String[] fruitArr = {"banana", "apple", "grape", "orange"}; List fruitList = Arrays.as..

article thumbnail
[Java] 다익스트라 알고리즘(최단거리 알고리즘)
알고리즘/이론 2022. 4. 10. 19:57

다익스트라 알고리즘 다익스트라 알고리즘은 음의 가중치가 없는 그래프의 한 정점에서 모든 정점까지의 최단거리를 각각 구하는 알고리즘이다. 다익스트라 알고리즘을 구현하는 과정은 다음과 같다. 방문하지 않은 정점 중 가장 가중치 값이 작은 정점을 방문한다. (처음에는 시작 정점을 방문한다.) 해당 정점을 거쳐서 갈 수 있는 정점의 거리가 이전에 기록한 값보다 작다면 그 거리를 갱신한다. 프로그래머스의 배달 문제의 그래프를 예시로 다익스트라 알고리즘을 설명해보겠다. 1번 정점을 시작 정점으로 잡고 1번 정점에서 방문할 수 있는 각 정점까지의 거리를 표시한다. 1번 정점에서 방문할 수 없는 정점은 INF(무한대)로 표시해둔다. 방문하지 않은 정점 중 가장 거리가 짧은 2번 정점을 방문한다. 1번 정점에서 2번 정..

[Java] String, StringBuffer, StringBuilder의 차이
JAVA 2022. 4. 2. 23:59

String, StringBuffer, StringBuilder Java에서 문자열을 다루기 위한 대표적인 클래스는 String, StringBuffer, StringBuilder가 있다. 3 클래스 모두 문자열을 관리하는 클래스이지만 서로 간의 차이가 있다. 연산이 적을 때는 어떤 클래스를 사용하더라도 문제가 없지만 연산횟수가 많거나 멀티스레드 등의 환경에서 사용한다면 상황에 맞는 적절한 클래스를 사용해야 한다. String과 StringBuffer/StringBuilder 의 차이 String 객체는 한번 생성되면 할당된 공간이 변하지 않는 불변(immutable) 객체이다. 그러나 StringBuffer와 StringBuilder는 버퍼의 크기를 유연하게 늘려주는 가변(mutable) 객체라는 차이..

JTextPane 텍스트 가운데 정렬
JAVA/Swing 2021. 5. 30. 02:42

//줄바꿈시 가운데 정렬 기능을 위해 JTextPane 사용 JTextPane tpName = new JTextPane(); tpName.setEditable(false); tpName.setText(goodsName); //tpName의 styleDocument를 가져와 가운데 정렬 설정 StyledDocument doc = tpName.getStyledDocument(); SimpleAttributeSet center = new SimpleAttributeSet(); StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER); doc.setParagraphAttributes(0, doc.getLength(), center, false); add..

JTable에 JCheckBox 넣기
JAVA/Swing 2021. 5. 18. 06:10

mport java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class MyTable extends JFrame{ //MAIN METHOD public static void main(String[] args) { EventQueue.invok..

자바 jar에 이미지까지 포함시키기
JAVA/etc 2021. 5. 3. 02:13

연습용 자바 swing 소스를 Runnable JAR file로 Export 했는데 이미지가 표시되지 않는 문제가 있어 찾아본 결과 ImageIcon 을 만들 때 경로 설정을 다른 방법으로 해주면 해결이 된다. // 기존 방법 private ImageIcon[] imgs = { new ImageIcon("images/arrow1.png"), new ImageIcon("images/arrow2.png")}; // jar로 만들어도 이미지가 표시되게 하는 방법 private ImageIcon[] imgs = { new ImageIcon(getClass().getClassLoader().getResource("arrow1.png")), new ImageIcon(getClass().getClassLoader()..

반응형