본문 바로가기

프로그래밍 언어/자바

(22)
[Java] 연산자 우선순위, 자료형, 기타 등등(24.05.20) 연산자 우선순위단항, 이항, 삼항 연산자 순으로 우선순위를 가짐.‘++’ ← ‘a + b’ ← ‘a ? b : c‘산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가짐.산술 연산자( + , - , * , / , % )비교 연산자( 논리 연산자( && , || , & , | , ^ , ! )대입 연산자( = , += , -= , *= , /= , %= )단항, 부호, 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽임.복잡한 연산식에는 괄호 ()를 사용해서 우선순위를 정함. Scannerjava.util 패키지에 포함되어 있어 java.util을 import를 해줘야 사용할 수 있다.기본적인 데이터 타입을 모두 입력받을 수 있다.토큰(공백,개행,탭)을 기준으로 데이터를 입력받는다.Scanner .. 2024. 5. 20. 21:15
자바는 어떻게 파일경로를 보고 File을 찾아낼까? 코딩테스트를 수행하는 중 File을 다루는 과제를 만나게 되었다. 기본적인 개념이기 때문에, 쉽게 해결될 것이라고 생각했지만... 그 기본적인 것을 제대로 이해하지 못하고, 파일 경로 설정을 해멨기 때문에... 자바에서 String 타입의 파일 경로가 주어졌을 때 어떻게 파일을 탐색하는지 알아보고자 한다. 환경구성- java 17- window10- intellij  String 타입의 파일경로가 주어졌을 때파일을 탐색하는 과정을 이해하기 위해, 아래의 간단한 코드를 디버깅할 것이다.public class Main { public static void main(String[] args) throws IOException { File file = new File("test... 2024. 5. 17. 20:20
Object 클래스의 hashCode() native code 밑바닥까지 파헤치기 결론부터 말하자면, OpenJDK 기준 Java 8 이후 부터는 hash값을 생성할 때, 객체의 메모리 주소는 활용하지 않으며, 쓰레드의 상태값을 활용하여 해시값을 생성합니다. 다른 JVM 구현체는 다를 수도 있습니다. hashCode() 메서드에 대해서 알아보기 전에, 이 글을 포스팅하게 된 이유를 말하고자 한다. ( 참고로, 이 포스팅은, Java 11 공식문서 와 openjdk github source 를 기준으로 확인한 것입니다. ) equals() 메서드에 의해 동일하다고 취급되는 객체가, HashTable 계열의 자료구조에서 사용될 때, 동일한 KEY로서 인식되기 위해, equals() 메서드를 오버라이딩하면, 반드시 hashCode() 메서드도 오버라이딩해줘야한다.왜냐하면, Hash~ 자료구.. 2024. 1. 21. 22:44
[Java] String & StringBuilder & StringBuffer String은 char의 연속된 나열이다. java에서 String 클래스의 인스턴스는 불변한 객체이기 때문에 수정이 불가하다. 이러한 특징을 보완하기 위해 StringBuffer or StringBuilder를 함께 사용한다. void concat1(String s1,String s2){ s1 = s1 + s2; } void concat2(StringBuilder sb1, String s2){ sb1.append(s2); } void concat3(StringBuffer sb2, String s2){ sb2.append(s2); } void test(){ String hello = "hello"; String world = "world"; concat1(hello,world); System.out.pr.. 2023. 12. 12. 11:06
[Java] 람다 학습할 것 (필수) 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 참고자료 - https://www.geeksforgeeks.org/lambda-expressions-java-8/ - https://www.javatpoint.com/java-lambda-expressions - https://livebook.manning.com/book/java-8-in-action/appendix-d/41 - http://cr.openjdk.java.net/~briangoetz/lambda/lambda-translation.html - https://www.geeksforgeeks.org/java-lambda-expression-variable-capturing-with-exa.. 2023. 12. 4. 17:50
[Java] 제네릭 학습할 것 (필수) 제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드 카드) 제네릭 메소드 만들기 Erasure 참고자료 http://www.tcpschool.com/java/java_generic_concept https://devlog-wjdrbs96.tistory.com/201 제너릭이란? 자바에서 제네릭이란 데이터의 타입을 일반화한다는 것을 의미한다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 컴파일에 미리 타입 검사를 수행하면 다음과 같은 장점을 얻을 수 있다. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. JDK 1.5 이전에는 여러 타입을.. 2023. 12. 4. 16:44
[Java] I/O 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 참고자료 https://www.geeksforgeeks.org/java-io-tutorial/ https://stackoverflow.com/questions/39550670/java-difference-between-streams-and-i-o-stream-explained https://byul91oh.tistory.com/267 https://homoefficio.github.io/2016/08/06/Java-NIO는-.. 2023. 12. 4. 15:19
[Java] 애노테이션 학습할 것 (필수) 애노테이션 정의하는 방법 @Retention @Target @Documented 애노테이션 프로세서 참고자료 https://jake-seo-dev.tistory.com/67 https://www.geeksforgeeks.org/annotations-in-java/ geeksforgeeks.org/java-target-annotations/ https://www.geeksforgeeks.org/java-documented-annotations/ https://www.javatpoint.com/java-annotation 애노테이션의 이점 Compiler instructions : 컴파일러에게 명령을 내릴 수 있다. 예를 들어 에러 또는 warning 을 감지하도록 할 수 있다. @Dep.. 2023. 12. 4. 10:48
[Java] 클래스로더 이해하기 클래스 로더의 가장 기본적인 역할은, 클래스 파일(*.class)을 읽어들여, JVM이 클래스를 활용할 수 있게 도움주는 것이다. 처음 JVM을 공부할 때는 단순하게 위와 같이 이해하였다. 그러나, 파고들수록 궁금한 것들 생겨났다. 클래스 로더는 ClassLoader 클래스의 하위클래스라고 하던데, 태초의 ClassLoader 클래스는 누가 JVM에 적재해두는 것일까? Enum 클래스는 싱글톤 패턴으로 동작한다고 하는데, 이때 클래스 로더가 도와준다고 한다. 어떻게 도와주는 것일까? 클래스 로더는 synchronized하게 동작한다는데, 그 말인 즉슨, 클래스 파일을 Load할때도 synchronized하다는 것을 의미할 것이다. 어떻게 구현했을까? 위 질문을 해결해줄 내용들을 정리하였다. JVM Sta.. 2023. 12. 1. 23:03
[Java] Interface는 어떻게 Object 클래스의 메소드를 사용할 수 있을까? 이번 글은 위 질문에 대한 검증을 위해 작성하였다. stackoverflow에 위 질문을 검색하면 많은 답변이 나온다. 답변 내용은 다음과 같다, JLS(Java Language Spec)에서는, 인터페이스가 상위 인터페이스를 상속받지 않고 독립적인 인터페이스라면, 암묵적으로 Object의 public instance method를 인터페이스의 public abstract method로 추가해준다고 한다. JLS - 9.2 Interface Members If an interface has no direct superinterfaces, then the interface implicitly declares a public abstract member method m with signature s, ret.. 2023. 11. 30. 18:19
[Java] ClassFile 포맷 자바 클래스 파일 포맷 출처 : https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf (4. The class File Format) class 파일은 다음과 같은 구조를 갖는다. u1, u2, u4 는 각각 1B, 2B, 4B 를 의미함. ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fiel.. 2023. 11. 30. 14:59
[Java] 멀티쓰레드 프로그래밍 학습할 것 (필수) Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위와 의미 Main 쓰레드 동기화 데드락 참고자료 https://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html https://www.geeksforgeeks.org/lifecycle-and-states-of-a-thread-in-java/ https://www.baeldung.com/java-thread-priority https://javagoal.com/thread-creation-in-java/ https://javagoal.com/main-thread-in-java/ https://charles098.tistory.com/99 Th.. 2023. 11. 28. 21:29
[Java] 예외 처리 학습할 것 (필수) 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스텀한 예외 만드는 방법 참고자료 https://docs.oracle.com/javase/tutorial/essential/exceptions/creating.html https://www.baeldung.com/java-new-custom-exception 예외처리에 대해 학습하기 전에, 근본적으로 예외처리(Exception)이 가져다주는 이점이 무엇인지 알아보자 (아래 코드들은 자바 공식문서에서 참조한 코드입니다.) 에러처리를 위한 코드를 일반 코드와 분리시킨.. 2023. 11. 28. 20:19
[Java] 인터페이스 학습할 것 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스는 Object인가? 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스란? 추상적인 표현을 사용해 클래스의 행동을 정의해 놓는 녀석이다. 클래스의 청사진이라고 할 수 있다. 인터페이스는 abstract methods와 variables를 가지고 있을 수 있다. 그러나 메소드의 바디는 가질 수 없다. 인터페이스는 일종의 계약이다. 여러 개발자들이 작업을 수행할 때, 다른 개발자의 코드가 완성될 때까지 기다릴 수 없다. 또한, 다른 개발자가 어떻게 개발했는지 모.. 2023. 11. 28. 17:44