Java
-
JAVA - 객체 직렬화CS/Java 2021. 2. 19. 22:30
객체 직렬화(Serialization) 직렬화 내부에서 사용되는 객체 또는 데이터를 외부의 시스템에서도 사용할 수 있도록 다른 형태(바이트, JSON등)로 변환하는 기술이다. 자바에서는 Serializable 인터페이스를 통해서 직렬화를 구현한다. 역직렬화 직렬화와 반대된다. 즉, 직렬화된 데이터를 역으로 직렬화 하여 객체로 재구성 하는 것을 의미한다. 객체 직렬화 객체 직렬화: 객체의 내용을 자바 I/O가 자동적으로 바이트 단위로 변환하는 기능을 제공한다. 자바의 I/O처리는 정수, 문자열, 바이트 단위의 처리만 지원하므로 복잡한 객체의 내용을 저장/복원 하거나 네트워크로 전송하기 위해선 객체의 멤버변수의 각 내용을 일정한 형식(패킷)으로 만들어 전송해야 한다. 자바에서 자동으로 처리해 주기 때문에 O..
-
JAVA - finalCS/Java 2021. 2. 19. 22:02
final final 오직 한 번만 할당할 수 있는 entity를 정의할 때 사용한다. final 변수가 객체를 참조한다면 그 객체의 상태가 바뀌어도 final변수는 매번 동일한 내용을 참조한다. 즉, 한 번 값을 지정하면 절대 바뀌지 않는다. final 클래스 final 클래스는 더이상 상속할 수 없다. final 메소드 final 메소드는 상속받은 하위 클래스에서 변경할 수 없다. final 변수와 static final변수는 한 번 값을 할당하면 수정할 수 없다. static 변수: 정적 변수로 메모리에 고정적으로 할당되어 프로그램이 종료될 때 해제되는 변수이다. 클래스의 모든 인스턴스가 공유한다. final변수는 static과 함께 쓰면 메모리 효율이 높아진다. reference coding-fa..
-
[백준]1520: 내리막 길 - JAVA문제풀이/백준 2021. 2. 19. 21:34
[백준]1520: 내리막 길 www.acmicpc.net/problem/1520 1520번: 내리막 길 첫째 줄에는 지도의 세로의 크기 M과 가로의 크기 N이 빈칸을 사이에 두고 주어진다. 이어 다음 M개 줄에 걸쳐 한 줄에 N개씩 위에서부터 차례로 각 지점의 높이가 빈 칸을 사이에 두고 주어진다. www.acmicpc.net 풀이 DP문제로 dfs 풀이 방식과 매우 유사한 형식이였다. 그래서 많이 어렵지 않았다. node함수로 지도의 정보를 입력받고, dp함수를 사용해 메모이제이션과 현재 까지 올 수 있는 경로의 수를 저장해 주었다. dp함수가 초기값이면 그 방향으로 한번도 오지 않았다는 의미이므로 지도 값이 더 작은 곳이 주변에 위치하는지 확인하여 이동한다. 이때 이동 경로의 수를 더해준다. dp함수..
-
JAVA - Mutable, ImmutableCS/Java 2021. 2. 18. 21:18
Mutable, Immutable Immutable: String 문자열 연산에서 new 연산을 통해 생성된 인스턴스의 메모리 공간을 절대 변하지 않는다. 문자열에 변화를 주면 메모리 공간이 변하는 것이 아닌 새로운 String객체를 new로 만들어서 새로운 메모리 공간을 만들어 준다. 기존의 문자열은 GC에 의해 제거되어야 한다. Mutable: Stringbuilder, Stringbuffer 문자열 연산에서 클래스를 한번 만들고 연산이 필요할 때 크기를 변경시켜 문자열을 변경한다. 문자열 연산이 자주 있을때 사용하는 것이 적절하다. String 문자열 연산이 적고, 조회가 많을때 사용한다. 불변성을 가지기 때문에 멀티쓰레드 환경에서의 안정성을 가지고 있다. 즉, 문자열 연산이 적고 멀티쓰레드 환경일..
-
JAVA - foreachCS/Java 2021. 2. 18. 20:48
for-each for-each 인덱스를 명시할 필요없이 알아서 리스트의 사이즈 만큼 반복된다. Iterable 인터페이스를 구현한 모든 클래스에서 사용이 가능하다. 장점: 에러 여지도 없고 코드도 간결하다. 단점: 인덱스를 사용할 수 없다. Iterable 인터페이스 Collection인터페이스는 Iterable인터페이스를 extends하고 있다. 즉 Collection의 하위 데이터 집합 그룹은 Iterable을 사용할 수 있다. Iterable인터페이스는 iterator()메소드와 forEach()메소드가 존재한다. Iterator 인터페이스 Collection 인터페이스와는 별개로 존재하는 인터페이스이다. hasNext(), next(), remove()등의 메소드가 존재한다. reference ..
-
JAVA - 인터페이스와 추상클래스CS/Java 2021. 2. 18. 20:13
인터페이스와 추상클래스 공통점 선언만 있고 구현 내용이 없는 클래스이다. 안터페이스, 추상클래스만 가지고 새로운 인스턴스를 생성할 수 없다. 상속받아 구현한 자식 클래스 만이 객체를 생성할 수 있다. 인터페이스 implements로 상속받아 구현한다. 모든 클래스에 대해 상속받은 특정 메소드를 반드시 정의해야 한다. 다중상속이 가능하며 일반 변수를 가질 수 없다. 목적: 구현 객체가 같은 동작을 한다는 것을 보장할 수 있어 일관성 있는 프로그램 개발이 가능하다. 추상클래스 extends로 상속받아 구현한다. 추상 메소드가 하나라도 존재하는 클래스를 말한다. 상속받은 추상 메소드는 정의해야 하지만 일반 메소드는 정의하지 않아도 된다. 다중상속이 불가능하며 일반 메소드, 변수 등을 가질 수 있다. 목적: 상..
-
[백준]2170: 선 긋기 - JAVA문제풀이/백준 2021. 2. 18. 16:18
[백준]2170: 선 긋기 www.acmicpc.net/problem/2170 2170번: 선 긋기 첫째 줄에 선을 그은 횟수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y(-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다. www.acmicpc.net 풀이 선의 정보를 입력 받은 후 계산을 순차적으로 진행하기 위해 x좌표를 기준으로 오름차순 정렬을 한다. x좌표가 같으면 y 좌표를 기준으로 오름차순 정렬 한다. 이전 선의 정보를 min, max에 저장해 주었고 현재 선의 정보와 비교하면서 조건에 따라 길이를 계산해 주었다. 선의 길이를 계산할 때 다음과 같은 3가지 조건이 있다.(이때 모든 선은 x, y..