분류 전체보기
Adapter pattern
한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. Mp3 지원하는 AudioPlater에서 Mp4와 Vlc를 지원하는 AdvancedMediaPlayer를 어댑터 패턴을 통해서 사용하는 것으로 AudioPlater의 play 메서드 실행시 Vlc, Mp4의 따라서 AdvancedMediaPlayer의 playVlc, playMp4 메서드가 실행되도록 하는 것이다. AdvancedMediaPlayer 모듈 public interface MediaPlayer { public void play(String audioType, String fileName); } public int..
프로그래머스 - 자동완성 문제 (자바)
programmers.co.kr/learn/courses/30/lessons/17685 코딩테스트 연습 - [3차] 자동완성 자동완성 포털 다음에서 검색어 자동완성 기능을 넣고 싶은 라이언은 한 번 입력된 문자열을 학습해서 다음 입력 때 활용하고 싶어 졌다. 예를 들어, go 가 한 번 입력되었다면, 다음 사용자는 g programmers.co.kr 해당 문제는 문자열 정렬을 통한 풀이와 Trie라는 자료구조를 사용하는 풀이 두가지가 있습니다. 1. 정렬 문자열의 사전순으로 정렬하면 근접한 문자와 비교해서 풀면 됩니다. 주의점은 하나의 문자가 다른 문자에 완전히 포함되는 경우와 아닌 경우인데 1. warrior, word 의 경우 w까지 만 동일하기 2문자를 치면 자동완성이 가능하지만 2. war, wa..
프로그래머스 - 폰켓몬 문제 (자바)
programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr 간단한 문제로 포켄몬 종류 번호크기만큼의 배열을 만들어서 해결하거나 set을 이용할 수 있습니다. 둘다 nums의 길이만큼만 돌면되지만 배열은 고정길이로 일정 수준의 메모리를 사용해야합니다. Set은 내부 로직에서 중복여부를 체크하고 추가하는 연산이 진행됩니다. 1. 배열 문제 중 폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수로 나타냅니다. 을 따라서 20000..
JVM GC(Garbage Collection) - 자바에서 메모리 관리하는 방법
Garbage Collection(GC) Heap 영역의 오브젝트 중 stack 에서 도달 불가능한 (Unreachable) 오브젝트들은 가비지 컬렉션의 대상을 해제하여 메모리를 관리하는 것을 의미한다. public class Main { public static void main(String[] args) { String url = "https://"; url += "yaboong.github.io"; System.out.println(url); } } 1. url에 String 객체인 "https://" 주소 참조 2 "https://yaboong.github.io"이라는 String 객체를 하나 말들고 해당 주소 참조 (String은 불변 객체이므로 기존에 있던 문자에 덧붙이지 않음) 3. Unre..
==, equals(), hashcode() 비교
아무 생각 없이보면 객체가 동일한지 비교한다고 생각할 수 있지만 자세히 보면 다르게 동작하는 것을 알수 있다. == 연산자 String str1 = "hello"; String str2 = "hello"; System.out.println(str1 == str2);//true String str3 = new String("hello"); String str4 = new String("hello"); String str5 = str4; System.out.println(str3 == str4);//false System.out.println(str4 == str5);//true 앞선 상수 풀 글을 읽으셨다면 str1과 str2는 동일한 객체의 주소값을 참조하고 있다는 것을 알 수 있습니다. str3과 st..
String Constant Pool 란?
위 그림은 JVM의 Runtime Data Area의 형태로 이중 Method Area의 Runtime Constant Pool에 String Constant Pool 이라는게 존재합니다. String을 생성하는 방법은 대표적으로 2가지가 있다. new 연산자 방식 literal을 이용한 방식 new 연산자 힙 영역에 새로운 String 객체를 만들고 이를 주소 값을 할당한다. literal String 객체는 내부적으로 intern() 메소드를 호출하게 된다. intern 메소드는 String Constant Pool 에서 해당 문자열이 존재하는지 검색하고 존재하면 해당 문자열의 주소값을 반환 존재하지 않으면 새로운 주소값을 할당하여 반환한다. 이 때문에 아래 그림처럼 동일한 문자열이더라도 ==비교가 ..
JVM 스택과 힙 영역 저장 되는 것들
운영체제 강의에서 스레드를 학습하면서 스택은 각 스레드가 독립적으로 가지며 힙 영역은 공유한다는 것을 알게되는다. 그래서 멀티 스레드 프로세싱을 할때 힙영역의 값을 동시에 접근하면 문제가 발생하고 이 때문에 동기화를 진행해야하는 경우가 있는데 그렇다면 자바에서는 무엇이 스택에 저장되고 무엇이 힙에 저장되는 것인지 알아보자. Stack Heap 영역에 생성된 Object 타입의 데이터의 참조값(참조 변수)이 할당된다. 원시타입의 데이터가 값과 함께 할당된다. 지역변수와 매개변수가 저장된다. 각 Thread 는 자신만의 stack 을 가진다. Heap Heap 영역에는 주로 긴 생명주기를 가지는 데이터들이 저장된다. (대부분의 오브젝트는 크기가 크고, 서로 다른 코드블럭에서 공유되는 경우가 많다) 애플리케이..
자바가상머신(JVM) 이란
일반적인 프로그램은 Windows또는 Linux같은 OS 위에서 실행된다. 하지만 자바 프로그램 같은 경우에는 OS 위의 JVM에서 실행이된다. 이렇게 JVM위에서 굳이 자바 프로그램을 돌리는 이유는 자바 프로그램을 OS에 상관없이 실행시키기 위함이다. 예를들어 Windows에서 동작하도록 구현된 워드 프로그램은 Linux에서 동작하지 않는다. 이 워드 프로그램을 Mac환경에서 돌리기 위해서는 Mac기반으로 다시 구현해야 한다. 하지만 자바 프로그램 같은 경우 어떤 OS 에서도 그에 맞는 JVM 다운로드를 통해 자바 프로그램을 실행 실킬 수 있다. Java Compiler 자바 소스(.java)코드를 Byte code(.class)로 변환하는 역할을 한다. Class Loader 자바 바이트 코드를 읽어..