본문 바로가기

자바5

[자바] - unnamed package의 문제점과 JDK의 클래스패스 설정 방법들 1. 패키지는 코드로 명시해야 한다. 자바의 패키지(package)는 단순히 클래스(.class) 파일들을 디렉토리에 배치한 개념이 아니라 자바 컴파일러나 JVM이 특정 클래스의 위치를 정확하게 식별하게 도와주는 실질적인 "코드"다. 따라서 패키지 선언문이 없는 자바 소스코드를 컴파일한 후에, 특정 디렉토리 내부에 배치해도 해당 디렉토리는 클래스 파일의 패키지가 될 수 없다. JVM은 클래스를 찾지 못한다(No Class Def Found Error)고 내뱉는다. 패키지 없이 컴파일한 소스코드는 나중에 디렉토리에 배치해도 그 경로가 패키지가 될 수 없다. 패키지는 반드시 코드로 명시되어야 한다. 예를 들어, 아래와 같은 자바 소스코드가 있다. 패키지 선언문이 없다. public class Hello { .. 2023. 12. 31.
[자바] - Java 플랫폼을 둘러싼 모든 개념들 총정리 Q: JDK란? Java Development Kit 의 약자로, 자바로 개발을 하는 사람들을 위한 모든 필요한 소프트웨어 묶음을 말한다. 따라서 자바 실행 프로그램(java.exe)뿐만 아니라 컴파일러(javac.exe), jar.exe, javadoc.exe, 표준 라이브러리 코드들을 전부 포함한다. Q. JDK의 버전 숫자에 대해서 오라클(oracle) 회사에서 지속적으로 자바 문법과 표준 라이브러리에 대한 명세를 업데이트하고, 업데이트 숫자를 붙여 각 버전을 구분한다. 이걸 통틀어서 Java 13, Java 21, ... 이런 식으로 부른다. 특이한 점은 Java 8 이하의 버전들은 Java 1.8, Java 1.6, .. 이런 식으로 1.x 형태로 표기하는데, 이는 초기 자바 진영이 메이저 업데.. 2023. 12. 31.
[자바] - 한글이 깨지는 문제의 원리 1. 문자열과 인코딩 문자열과 관련된 문제를 다루기 위해서는 인코딩(encoding)의 원리를 알면 된다. 컴퓨터는 0과 1로 이루어진 비트로 정보를 처리한다. 따라서 컴퓨터가 정보 처리를 마친 후에 그것을 우리(인간)가 이해하기 위해서는 0과 1로 이루어진 외계어를 사람이 이해하는 기호로 바꿔야 한다. 이 과정을 인코딩(encoding)이라 부른다. 문자열도 마찬가지다. 문자도 정보이므로 이것을 컴퓨터로 작업하기 위해서는 0과 1로 바꾸어 처리해야 한다. 그리고 그 결과를 이해하기 위해 0과 1로 이루어진 순수한 정보를 사람이 알고 있는 알파벳으로 바꿔야 한다. 물론 이때는 표준을 통일시켜 모두가 같은 인코딩 방식을 따라야만 비로소 유용할 것이다. 누군가는 A를 100이라고 하고, 누군가는 101이라고.. 2023. 12. 15.
동적 타입 언어와 정적 타입 언어의 차이점 (덕 타이핑) 0. 서론: 객체와 타입 객체지향에서 객체를 구현하는 주요 문법은 클래스다. 클래스는 많은 오해가 있다. 대표적인 예시가 바로 클래스를 붕어빵을 만드는 틀로 묘사하는 것이다. 붕어빵틀 비유는 클래스라는 문법 장치를 객체의 구현 코드로 인식하기 때문에 발생하는 오해다. 그러나 클래스는 객체를 구현하기 위한 코드가 아니라, 객체의 타입(type)을 구현하기 위한 코드다. 객체의 타입과 클래스 문법에 대한 자세한 설명은 책에서 잘 기술되어 있다. (링크) 여기서 간단히 요약하자면, 객체의 타입(type)이란 객체(object)를 분류(classify)하기 위한 추상화/일반화된 개념(concept)이며, 클래스 문법은 바로 이 개념, 즉 타입(type)을 구현하는 코드라는 것이다. 특정 클래스로 분류될 수 있는.. 2023. 12. 13.
DIP(의존성 역전 원칙)에 대해 지금까지 잘못 알고 있었던 것 같다. 1. DIP와 자바 인터페이스의 의미. DIP란 의존성 역전 원칙(Dependancy Inversion Principle)을 이르는 영어 표현이다. 여기서 의존성이란 소스 코드에 대한 의존성을 말한다. 의존성이 객체지향에서 중요하게 다뤄지는 이유는 한 모듈이 다른 모듈에 의존할 때 변경의 여파가 발생하기 때문이다. 사용하는 모듈A가 사용되는 모듈B에 의존한다. 이때 모듈B의 내용이 변경되면 그것을 사용하는 모듈A도 변경되어야 한다는 압박을 받게 된다. 또 다른 SOLID 원칙 중 하나인 OCP(개방 폐쇄 원칙)는 이러한 의존성의 방향을 일관적으로 관리하는 원칙을 말한다. 우리가 시스템을 여러 모듈과 컴포넌트, 클래스로 분리한 이상 이들이 서로를 의존하는 것은 절대 막을 수 없다. 의존성이 나쁜 것이 아니.. 2023. 10. 19.