[Java] hashCode와 Equals를 함께 재정의하는 이유
·
JAVA-기초/JAVA기본
Set과 Map의 타입이 Wrapper Class가 아닌 Object를 받을 때 중복 검사는 어떻게 진행하는가?➕ hashCode() 메서드를 오버라이딩하여 리턴된 해시코드 값이 같은지 판단합니다. 값이 다르다면 다른 객체로 판단하고, 해시코드 값이 같다면 equals()메서드를 오버라이딩 하여 다시 비교합니다.위의 개념을 위해서는 동일성과 동등성을 먼저 알아야한다. **동일성** : 두 개의 객체가 완전히 하나의 같은 객체인지 판단하는 것. 즉 , 메모리에 저장된 주소공간이 완전히 같을 경우 동일성이 보장된다.  **동등성** : 두 객체의 주소공간이 달라도 단순히 가지고 있는 값만 같다면 동등성이 보장된다. 이는 단순 문자열(원시형)과 객체로 생성한 값 사이의 차이점과 동일하다.그 다음으로는 equa..
[Java- Algorithm] 너비 우선 탐색법(BFS과 큐(Queue)
·
JAVA-기초/JAVA기본
너비 우선 탐색법(BFS)이란? File:Breadth-First-Search-Algorithm.gif - Wikimedia Commons No higher resolution available. commons.wikimedia.org 위의 GIF는 BFS이고 아래는 DFS이다. 차이점을 먼저 확인해보자. ✅공통점 방문 여부 확인을 통해 한 번 지나간 노드는 다시 방문하지 않는다. ✅차이점 DFS는 정점(1)에서 연결된 노드를 순서대로 아래로 내려가며 다음 노드가 없는 경우 다음 연결된 노드로 이동하며 탐색한다. 또한 재귀호출 및 스택방식으로 코드를 구현한다. BFS는 같은 레벨(가장 가까운 노드)에서 검색을 시작하며 최단 거리를 탐색한다. 큐 방식으로 코드를 구현한다. 배열에서 사용하는 경우 방향 데이..
[자료구조 - Graph 와 DFS] Graph와 DFS란?
·
JAVA-기초/JAVA기본
[Algorithm] 깊이 우선 탐색 목차 1. DFS란? 2. 그래프란? 그래프의 특징 그래프의 종류 그래프 용어 1. DFS란? 깊이 우선 탐색(Depth-First-search)은 그래프 완전 탐색 기법중 하나 그래프의 시작 노드에서 출발하여 탐색할 쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 분기 쪽으로 이동하여 탐색을 수행하는 알고리즘 트리의 완전 탐색에 사용된다. 깊이 우선탐색 특징 기능 특징 시간 복잡도 (노드 -V, 엣지 - E) 그래프 완전 탐색 - 재귀 함수로 구현 - 스택 자료구조 이용 O(V+E) DFS는 사실상 재귀함수문제와 다름없다. 재귀 함수를 이용하므로 스택오버플로에 유의해야 한다. DFS를 이용하여 풀 수 있는 문제는 단절점 찾기, 단절선 찾기, 사이클 찾기, 위상..
자바(java) - Optional이란?
·
JAVA-기초/JAVA기본
Optional이란? Java8에서부터 지원하는 기능 java.util의 하위 클래스 NPE를 방지할 수 있도록 도와준다. null이 올 수 있는 값을 Wrapper클래스로 감싸준다. NPE란? NullPointerException 가장 많이 발생하는 예외중 하나 null 여부를 검사함으로써 예외가 터지는것을 방지할 수 있다. 검증하는 코드는 복잡하고 번거롭다. NPE 예시 코드 @Test public void test01() { String name = null; System.out.println(name.charAt(0)); // name은 null이기 때문에 NPE가 발생한다. if (name == null) { name = "userA"; //null을 체크해서 값이 없는 경우 새로운 값을 삽입하..
[Java] 객체지향개념(OOP) 캡슐화와 정보은닉
·
JAVA-기초/JAVA기본
🟰Index 캡슐화 String 클래스의 캡슐화 정보 은닉(OOP의 핵심) 객체의 타입 은닉(업 캐스팅) 더욱 객체를 은닉(디자인 패턴) 객체의 필드 , 메서드 은닉(캡슐화) 구현 은닉(인터페이스) 캡슐화(Encapsulation) 내부를 가리는 캡슐화, 정보 은닉 개념중 하나 객체의 속성과 행위를 하나로 묶고, 외부로부터 내부를 감싸 숨겨 은닉한다. 외부의 잘못된 접근으로 값이 변하는 의도치 않는 동작을 방지하는 보효 효과도 가능하다. 대표적으로 **protected, default, private**의 접근제어자를 통해 구현 가능 유효하지 않은 숫자로 직접 변수를 변경하려는 시도를 내부에서 유효성 체크 로직을 통해 거를 수 있다. [ ] String클래스의 캡슐화String클래스는 final로 선언되..
객체지향 프로그래밍 5가지 설계 원칙, SOLID- 단일책임의 원칙
·
JAVA-기초/JAVA기본
해당 게시물을 이용한 2차 창작은 댓글 부탁드립니다. 🟰객체 지향프로그래밍을 하면서 지켜야 하는 5대 원칙중 하나 단일책임의 원칙부터 알아보자 ❗다음 원칙도 모두 포스팅 되어 있으니 천천히 읽어보세요 ☀️단일 책임의 원칙(Single Responsibility Principle) 하나의 모듈이 하나의 책임을 가져야한다. 다른 말로 모듈을 변경할 때에는 오직 한가지 목적을 위해 변경해야 한다는 것이다. 어떤 클래스가 하나의 책임 만을 갖고 있다면, 특정 행위자들로부터 변경을 확실한 목표를 갖고 수행할 수 있다. ⏬예시 코드 package solid; public class SingleResponsibilityPrinciple { private final String cook = "살아있는 가재"; priv..