728x90

로춘남 50

[Java] 백준 별 찍기 2441번 2442번 2443번

다양한 별 찍기를 통해 Java의 for문을 한 번 생각해보기. 2441번 - https://www.acmicpc.net/problem/2441 i값을 증가시키면서 찍히는 *의 갯수를 줄여나가는 별 찍기. *를 찍기전에 " " 공백을 찍어준다. for (int i = 0; i j) { System.out.print(" "); } else { System.out.print("*"); } } System.out.println(""); } *가 찍히기전에 공백이 찍혀야 하므로, i가 j보다 크다고 가정할 때 " "를 출력. 첫 째줄은 i가 0 j가 0이니 if문의 else를 적용 받아 *를 입력값 5 만큼 찍어주고, 이후..

Algorithm 2022.03.28

[Java]error exception 이란? 차이점

오류와 예외란? 오류(Error) : 시스템에 비정상적인 상황이 생겼을 때 발생. 이는 시스템 레벨에서 발생하기 때문에 심각한 수준의 오류. 따라서 개발자가 미리 예측 할 수 없기 때문에, 애플리케이션에서 오류에 대한 처리를 신경 쓰지 않아도 됨. 예외(Exception) : 오류가 시스템 레벨에서 발생한다면, 예외는 개발자가 구현한 로직에서 발생. 즉, 예외는 발생활 상황을 미리 예측하여 처리 할 수 있다. 개발자가 처리 할 수 있기 때문에 예외를 구분하고 그에 따른 처리 방법을 명확히 알고 적용하는것이 중요. 예외 클래스 모든 예외 클래스는 Throwable 클래스를 상속받고 있으며, Throwable은 최상위 클래스 Object의 자식. Throwable을 상속받는 클래스는 Error와 Except..

JAVA 2022.03.28

[Java] 직렬화(Serialization)란?

직렬화(Serialize)란? 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술. JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술 역직렬화(Deserialize) byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부름 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태. 직렬화(Serialize) 시작 직렬화(Serialize) 조건 java.io.Serializable 인터페이스를 상속받은 객체는 직렬화 할 수 있는 기본 조건 pub..

JAVA 2022.03.26

[Java] static 이란?

Java를 사용하다보면 꽤나 많이 보게 되는 static !! 도대체 static이란 무엇일까?! Static Java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다. 이 과정은 메모리 영역에 대한 이해가 필요한 부분이다. 보통 우리가 생성하는 Class는 static 영역에 생성이 되고, new 연산을 통해 생성한 객체는 Heap 영역에 생성이 된다. 이때 할당되는 Heap의 메모리는 GC를 통해 주기적으로 관리를 받게 된다. 하지만 Static를 통해 Static 영역에 할당되는 메모리는 모든 객체가 공유하는 메모리라는 장점이 있지만, GC의 영역 밖이기 때문에 Static을 자주 사용하다보면 프로그램 종료까지 메모리가 할당된 채로 존재하..

JAVA 2022.03.24

[Java] 리플렉션(Reflection)이란?

Reflection(리플렉션)이란? 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API이다. 런타임에 지금 실행되고 있는 클래스를 가져와서 실행해야하는 경우. 동적으로 객체를 생성하고 메서드를 호출하는 방법으로 Java의 리플렉션은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다. Reflection을 사용하는 경우는 코드를 작성할 시점에 어떤 타입의 클래스를 사용할지는 모르지만, 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실랭해야하는 경우 프레임워크나 IDE에서 이런 동적인 바인딩을 이용한 기능을 제공한다. 흔히 IDE의 종류중에 하나인 인텔리제이의 자동완성 기능. 그리고 스..

JAVA 2022.03.01

[회고] 이탈리아 가이드 출신 개발자의 2022년 2월 월간회고

2월은 월초 설날과 더불어 28일까지 밖에 없는 특수한 달로 생각보다 시간의 흐름이 빠른달이다. 한달의 돌아보며, 내 자신에 대해 생각해보고, 다가오는 3월에 대한 계획을 세우고자 한다. 1월과는 다르게 5F 기법을 정리를 해보았다. Tech Blog 2월동안 나는 몇 개의 블로그를 포스팅 했을까?! Fact : 무슨 일이 있었나?(사실) 알고리즘 관련 3개 Java Wrapper Class JVM구조 Java 컴파일 과정 Java Generic Java Generic type erasure 알고리즘을 포함하여 총 8개의 글을 작성했다. 이외에는 Java에 대해 깊숙하게 알아보고자했다. 기능의 구현도 우선이지만, Java에 대해 잘 알고있어야, 향후 효율적인 코드를 작성 할 수 있을거라 생각했다. 사실 ..

생각정리 2022.02.28

[Java] 자바가 컴파일 되는 과정

자바는 OS에 독립적인 특성을 지니고 있다. 이것이 가능한 이유는 JVM(Java Vitual Machine) 덕분이다. 그렇다면 JVM의 어떠한 부분 때문에 OS에 독립적으로 실행을 시킬 수 있는지 자바 컴파일 과정을 통해 알아보고자 한다. 자바 컴파일 순서 개발자가 자바 소스코드(. java)를 작성한다. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일한다. 이때 나오는 파일은 자바 바이트 코드(. class) 파일로 아직 컴퓨터가 읽을 수는 없는 자바 가상 머신이 이해할 수 있는 코드다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있다. (※ Opcode란? → 옵코드는 올리디버거에 어떤 프로그램을 올렸을때, 숫자로만 나타내는 코드. 컴퓨터에..

JAVA 2022.02.23

[Java] 백준 2455번 지능형 기차

https://www.acmicpc.net/problem/2455 2455번: 지능형 기차 최근에 개발된 지능형 기차가 1번역(출발역)부터 4번역(종착역)까지 4개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. www.acmicpc.net 입출력값에 따라 계산되고 그에 따른 최대값을 구하는 문제. Scanner의 경우 입력값들 사칙연산이랑 최대값 구하는 로직으로 쉽게 구현하지만! 효율성을 위해서 Buffer를 이용해보았다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTok..

Algorithm 2022.02.23

[Java] JVM 구조에 대한 설명. 그리고 버전에 따라 무엇이 바뀌는가?

자바 공부를 할때마다 볼 수 있는 JVM. 오늘은 JVM의 구조와 버전에 따른 변경을 한 번 살펴보고자 한다. 먼저 JVM이란? JVM이란 Java Virtual Machine의 약자로 자바 가상 머신을 뜻한다. 여기서 가상 머신이란 프로그램의 실행을 위한 물리적 머신과 유사한 머신을 소프트웨어로 구현을 한것이다. JVM의 역할은 자바 애플리케이션을 Class Loader를 통해 읽어 Java API와 함께 실행을하고, JVM은 Java와 OS사이에서 중개자 역할을 수행하며 Java가 OS에 구애받지 않고 재사용을 가능하게 해준다. 그리고 가장 중요한 메모리 관리, Garbage Collection을 수행한다. 또한 JVM은 스택기반의 가상 머신이다. 그럼 우리는 왜 JVM를 알아야하는가? 한정된 메모리..

JAVA 2022.02.22
728x90