분류 전체보기 37

[JSCODE] Java 스터디 후기

스터디 참여CS를 준비해야 한다는 것은 너무 잘 알았지만 양도 방대하고 도저히 엄두가 안났다.더이상 미룰 수 없다고 생각한 시기에 우연히 Jscode에서 CS 스터디를 진행한다는 글을 보았고, Java 분반을 신청했다.자바로 개발을 하고 있지만 겉핥기식으로 공부하고 있다고 느끼던 도중이라 더 기대가 되었다. 스터디 규칙총 5주간 진행되는 스터디였다.매주 멘토님들이 문제를 뽑아주시면 그에 대한 답변을 공부해가고, 스터디 시간에 모의 면접을 보는 방식이었다.면접자, 면접관, 타임키퍼의 역할을 돌아가며 수행하는 방식이었다. 스터디 후 성장한 점문제에 대해 답변을 달면서 느낀건 구글링 없이 혼자 답변할 수 있는게 거의 없다는 것이었다.예를 들면 == 과 equals()의 차이라던지, 어노테이션에 관해서라던지 평..

소소한 정리 2024.09.18

인터페이스 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