전체 글 36

인터페이스 vs 추상클래스

(오랜만에 글을 쓴다. 최근에는 노션에 익숙해지느라 티스토리를 좀 간과했다😥)  인터페이스와 추상클래스는 자바로 개발을 하면 한번씩은 들어본 단어일 것이다.둘의 느낌이 비슷해서 이번에 공부하면서 차이점을 알아보았다. 인터페이스와 추상클래스의 차이인터페이스 : implements(구현)에 초점. 인터페이스에 정의된 메소드들을 각 클래스의 목적에 맞게 기능을 구현하기 위해추상클래스 : extends(상속)에 초점. 추상 클래스의 기능을 하위 클래스로 확장하기 위해추상클래스중복 멤버 통합. 인터페이스는 static final 상수만 정의할 수 있는 차이가 있다.클래스끼리 명확한 계층 구조가 필요할 때 사용 → 클래스와 의미있는 연관관계 구축다형성 : 미리 논리적인 클래스 상속 구조를 만들어 놓고 사용인터페이..

java 2024.05.16

0-1 BFS

0-1 BFS 가중치가 0, 1로 주어진 그래프에서 최단경로를 찾아낼 수 있는 알고리즘 O(V+E)의 시간 복잡도를 가진다.(V : 정점 개수, E : 간선 개수) 1. 시간복잡도 O(V+E)의 시간복잡도를 가지는 이유는 무엇일까? 1️⃣ Queue 대신 Deque 사용 0-1 BFS는 Deque(덱) 자료구조를 사용해서 구현한다. Deque은 Double Ended Queue로 양 방향에서 offer, poll이 가능하다. 가중치가 0인 간선으로 이동할 경우, 해당 정점을 덱의 앞부분에 추가한다. 이는 그 정점을 가능한 한 빨리 다시 탐색하기 위해서이다. 가중치가 1인 간선으로 이동할 경우, 해당 정점을 덱의 뒷부분에 추가한다. 이는 그 정점을 나중에 탐색하도록 한다. 2️⃣ 한 번씩만 처리되는 정점과..

알고리즘 2024.04.04

[4485] 녹색 옷 입은 애가 젤다지? - Java

백준 녹색 옷 입은 애가 젤다지? (골드 IV ) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; // 녹색 옷 입은 애가 젤다지?(골드 4) // 다익스트라 public class Main { static int[][] zelda; static boolean[][] visited; static int N; static int cnt = 0; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReade..

알고리즘 2024.02.05

상속과 메모리 구조

Guitar 클래스가 Instrument 클래스를 상속받는 상황을 가정해보자. public class Instrument { public void play() { System.out.println("악기를 연주합니다."); } } public class Guitar extends Instrument { @Override public void play() { System.out.println("기타를 연주합니다!"); } } 그리고 Guitar 객체를 생성한다. public class InheritanceMain { public static void main(String[] args) { Guitar guitar = new Guitar(); guitar.play(); } } 이 때 Guitar 객체가 참조..

java 2023.12.21

자바 main 메소드는 왜 static일까?

자바의 main 메소드는 static이 붙은 정적 메소드이다. public static void main(String[] args) {...} 왜 main 메소드에 static이 붙었을까? ⛏ static 메소드 static 메소드는 정적 메소드, 클래스 메소드라고도 하는데 객체 생성 없이 클래스로부터 바로 호출이 가능하다. 유틸리티성 메소드에 자주 사용된다. static 메소드는 메소드 영역에 존재하며 클래스로 접근하여 사용할 수 있다. public class StaticMethodMain { public static void main(String[] args) { int a = 30; // 클래스로 바로 접근 int result = StaticMethod.calculate(a); System.out...

java 2023.12.19

자바 메모리 구조

⛏ JVM Java Virtual Machine의 약자로, 해석하면 자바 가상 머신이다. (가상 머신 : 프로그램 실행을 위해 물리적 머신과 유사한 머신을 sw로 구현한 것) 즉, JVM은 자바를 실행하기 위한 가상 머신으로 자바의 바이트 코드를 해석하고 실행한다. 특징 1. 운영체제 종류와 상관없이 JVM만 설치하면 자바 파일 실행이 가능하다. 2. 크게 4가지 영역으로 구성되어있다. 1️⃣ Garbage Collector(GC) 힙 영역에 더이상 참조되지 않는 객체들을 제거한다. 자동으로 실행된다. 2️⃣ Class Loader 런타임 시점에 컴파일된 바이트 코드(.class)들을 메모리 할당을 받은 Runtime Data Area로 적재한다. 3️⃣ Execution Engine Class Load..

java 2023.12.16

final 키워드(변수, 상수)

⛏ final final 키워드는 특정 변수 및 클래스, 메소드 등에 값을 최초 할당 후 변경되지 않게 하는 제약이다. 기본형 변수, 참조형 변수에 모두 사용할 수 있다. 특징 1. final이 붙은 변수는 값 변경이 불가하다. 지역 변수, 매개 변수 public class FinalBasic { public static void main(String[] args) { final int data = 10; // 값 할당 후 변경 불가 // data = 20; changeFinal(10); System.out.println("data : " + data); } static public void changeFinal(final int data) { // final 이 붙은 매개변수도 변경 불가능 // dat..

java 2023.12.14

생성자

⛏ 생성자 생성자는 객체 생성 직후 객체에 초기값을 할당하는 메소드이다. 특징 1. 생성자 이름은 클래스 이름과 동일해야 한다. 2. 생성자는 반환 타입을 가지지 않는다. class Member { String name; int age; // 생성자(constructor) Member(String name, int age) { this.name = name; this.age = age; } } 생성자는 인스턴스를 생성한 후 즉시 호출된다. 즉, new 키워드를 통해 인스턴스를 생성한 후 즉시 생성자가 호출되어 객체에 초기값을 할당한다. Member member = new Member("dragon", 20); 왜 쓰나? 객체에 값을 넣어주는 메소드를 만드는 대신 생성자를 사용하는 이유가 무엇일까? 1. ..

java 2023.12.12