분류 전체보기

    13458. 시험감독

    자바로 풀어보는 첫 문제라서 2번이나 틀렸다ㅠ 문제 자체의 로직은 어렵지않다! 문제의 조건 - 각 시험장에 총감독관은 무조건 있어야한다. - 최대의 경우 1_000_000 * 1_000_000 의 수가 나올 수 있으므로 int로는 해결할 수 없다. 일단 시험장의 개수만큼 총 감독관이 있어야하므로 ans는 N인 상태로 시작한다. 만일 `각 시험장의 숫자 - B`가 음수라면 더 이상의 인원배치가 필요없으므로 넘어간다. 만일 양수라면 `남은 사람의 수 / 부감독관`을 더하고 나누어 떨어지지 않으면 추가로 1을 더 더한다. 더보기 더보기 import java.io.*; import java.math.BigInteger; import java.util.StringTokenizer; public class Main..

    리플랙션

    어떤 기능을 가졌을까 리플랙션은 JVM에서 실행중인 애플리케이션의 런타임 동작을 제어하고 수정할 수 있는 기능입니다. 클래스의 필드목록이나 메소드목록, 상속하고있는 클래스 등등에 대한 정보를 알아낼 수 있으며 이를 런타임에 수정하는 것 또한 가능합니다. 리플랙션은 private 접근지시자를 포함한 모든 멤버에 접근이 가능한 것처럼 강력한 기능을 지니고있어서 사용시에 주의가 필요합니다. 사용하는 방법 리플렉션은 특정 클래스의 인스턴스나, FQCN, 클래스명 등을 이용하여 사용할 수 있습니다. package me.ddings73; public class Child extends Parent{ public int A; } package me.ddings73; public class App { public st..

    클래스로더

    클래스파일을 읽는 과정 로딩 링크 초기화 로딩(Loading) 클래스 로더가 .class 파일을 읽고나서 알 수 있는 정보들을 메모리에 저장하는 단계. .class파일에서 알 수 있는 정보는 다음이 존재한다. 클래스 메소드 변수 인터페이스 Enum FQCN (Fully Qualified Class Name) ex : java.lang.String 메소드와 변수는 클래스내부에 존재하며, 인터페이스와 Enum은 전부 클래스의 일종이라고 볼 수 있기 때문에 로딩이 종료되면 클래스타입의 객체를 Heap 영역에 저장한다. Class Loader ( 클래스 로더 ) 클래스를 읽어들이는 일을하며, 클래스의 타입과 경로에 따라 특정 클래스를 로드하는 ClassLoader 가 결정된다. 클래스로더를 알아내기 위해서 ge..

    바이트코드?

    ByteCode 바이트코드란 가상컴퓨터에서 돌아가는 실행프로그램을 위한 이진 표현법입니다. 자바의 JVM을 학습하게 되면서 알게 된 개념으로, 기계어로 변환되기 이전에 JVM에서 동작하기위해 생성되는 .class 파일이 이 바이트코드에 해당합니다. D:\IdeaProjects\JavaLearn\src\main\java\me\ddings73>javap -c App.class Compiled from "App.java" public class me.ddings73.App { public me.ddings73.App(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return public static void main(j..

    애노테이션

    학습할 것 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 애노테이션이란? 애노테이션이란 주석의 한 형태로 데이터에 대한 데이터 즉, 메타 데이터를 나타냅니다. 기본적으로 자바에서 제공하는 7개의 애노테이션이 존재하며 그 종류는 다음과 같습니다. java.lang 패키지에서 제공하는 애노테이션 @Deprecated : 더이상 사용되지 않음 @Override : 재정의 된 메소드 @SuppressWarnings : 특정 컴파일러 경고를 억제 java.lang.annotation 에서 가져오는 애노테이션 (유저 애노테이션에 사용) @Retention : 애노테이션의 유지시점 @Documented : javadoc 으로 문서 생성 시 애노테이션의 설명 추가 ..

    Enum

    학습목표 enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet Enum 서로 관련이 있으면서 의미가 있는 상수들의 집합. 정의 방법. [접근 지시자] enum [Enum 타입]{ /* enum 변수목록 */ } /* 예시 */ public enum Months{ January, February, March, April, May, June, July, August, September, October, November, December; } 자바에서의 Enum은 기본적으로 클래스입니다. 클래스의 특징인 상속은 불가능하지만 메소드와 필드, 생성자를 사용하는게 가능합니다. Enum을 배우면서 좀 신기하다 싶었던 것 들을 되짚어봅시다! ..

    자바의 멀티쓰레드 프로그래밍

    학습목표 Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Thread Thread란 프로세스 내에서 실행되는 흐름의 단위를 의미하며, MultiThread란 둘 이상의 스레드를 동시에 실행하는 방식을 의미합니다. Thread를 생성한다는 것은 메인스레드와 동시에 돌아가는 작업을 생성한다는 의미를 가집니다. MultiThread는 작업을 잘게 나눈다음 번갈아가면서 실행하는 것을 의미합니다. 새로운 작업 Thread를 만들기 위해서는 해당 스레드에서 실행되어야하는 코드를 제공해야합니다. Runnable 인터페이스의 객체를 Thread 생성자의 파라미터로 사용하는 방법 Thread 클래스를 상속하여 실행코드를 작성하는 방법 2번 방법의 경우, 클래..

    예외 처리

    목표 자바의 예외처리에 대해 학습하기 학습할 것 (필수) 자바에서의 예외처리방법(try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스텀한 예외 만드는 방법 자바에서의 예외처리 자바에서의 예외처리는 일반적으로 try-catch-finally 블록을 이용하여 처리합니다. try{ // 예외가 일어날 가능성이 있어서 검사해야하는 코드 }catch(IOException e){ // 특정 예외의 발생 시 처리해당하는 예외를 처리하는 블록 }catch(RuntimeException e){ // 특정 예외의 발생 시 처리해당하는 예외를 처리하는 블록 }finally{ /..

    인터페이스

    목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 (필수) 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스 인터페이스란, 일반적으로 상수와 추상메소드로만 이루어진 클래스를 의미합니다. 인터페이스의 정의 상수 : public static final 로 선언된 변수 추상메소드 : abstract 로 선언된 메소드. 구현부가 없다. public interface sample{ public static final int value = 10; public abstract void ..

    패키지

    목표 자바의 패키지에 대해 학습하세요. 학습할 것 (필수) package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 package 패키지란, 클래스와 인터페이스의 집합을 의미하며 서로 관련된 클래스등의 파일들을 그룹화하는 역할을 맡고 있습니다. 대표적인 패키지로는 java.lang 패키지가 존재합니다. 해당 패키지 밑에서는 String, Integer, Long 등등의 클래스들이 합니다. 해당 패키지내의 클래스들은 그 자체로 사용이 가능하며, 패키지 명을 포함하여 사용할 수도 있습니다. Integer integer = 10; java.lang.Integer integer1 = 10; 패키지의 이름을 지정할 때, Java나 int 와 같은 예약어가 ..