java 39

Java의 패키지에 대해 알아보자! (feat. 클래스패스, import)

패키지란? 패키지란 '서로 관련된 클래스(인터페이스 등 포함)들의 그룹'으로 클래스를 효율적으로 관리할 수 있다. 이때 클래스의 실제 이름은 클래스 자체의 이름뿐만 아니라 패키지명을 모두 포함한 이름으로, 이를 FQCN(Fully Qualified Class Name)이라고 한다. 따라서 클래스 이름이 같더라도 패키지만 다르면 다른 클래스인 것이다. 패키지에 포함된 클래스에 대한 소스코드를 작성할 때는 항상 패키지를 첫 번째 문장(주석, 공백 제외)에 선언해주어야한다. 이때 패키지 안에 또 다른 패키지가 존재할 수도 있는데, 이는 .을 이용하여 구분한다. package ikjo.java; class Example { // 최상위 패키지 ikjo에 속한 java 패키지 그리고 java 패키지에 속한 Exa..

Technology/Java 2022.09.01

Java의 상속에 대해 파헤쳐보자!

상속이란? 상속은 객체지향 4대 특성 중 하나의 특성인데, 상속이란 기존의 클래스(상위 클래스)를 '재사용 및 확장'한 새로운 클래스(하위 클래스)를 작성하는 것이다. 여기서 '재사용'이라는 표현을 사용했는데, 이는 상위 클래스의 멤버(변수, 메서드)를 하위 클래스가 모두 상속받아 (재)사용할 수 있기 때문이다. 이때 상위 클래스의 생성자나 초기화 블럭은 상속되지 않는다. 만일 여러 클래스들이 있을 때 '공통되는 멤버'가 있다면 상속 관계를 적용할 수 있는지 생각해볼 법하다. 또한 '확장'이라는 표현을 사용했는데, 이는 하위 클래스가 상위 클래스로부터 상속받은 멤버에 더해서 추가적인 멤버를 작성할 수 있기 때문이다. (메서드를 오버라이딩함으로써 재정의할수도 있다.) 이때 새롭게 추가되는 멤버는 상위 클래..

Technology/Java 2022.08.27

Java final 키워드의 여러가지 쓰임새

final 키워드란? final이란 '마지막'이라는 뜻을 가지고 있는데, 실제 자바에서 쓰임새도 이 의미와 유사하게 사용된다. 이때 final 키워드가 사용될 수 있는 대상은 '클래스', '메서드', '변수' 세가지 뿐으로 각각의 경우에 대해 알아보자. 클래스에 사용되는 final 클래스에 final 키워드가 사용되면 해당 클래스는 상속받을 수 없게 된다. 대표적인 final class에는 java.lang 패키지에서 제공하는 String 클래스와 Math 클래스가 있다. public final class Math { // ... public final class String implements java.io.Serializable, Comparable, CharSequence { // ... 이러한 f..

Technology/Java 2022.08.26

Java의 Object 클래스가 제공하는 기능 분석

Object 클래스란? 객체지향 프로그래밍 언어인 자바에서 모든 코드는 반드시 클래스 안에서 존재하며, 이러한 클래스는 서로 관련된 속성과 기능 간의 그룹으로 묶이게 된다. 이때 Object 클래스는 모든 클래스들의 최상위 클래스로, 모든 클래스들은 Obejct 클래스를 상속받는다. 우리가 어떤 클래스를 작성할 때 별도로 Object 클래스를 상속하지 않아도 됐었던 이유는 컴파일 시 자바 컴파일러가 'extents Object'를 자동으로 추가해주기 때문이다. 참고로 Object가 아닌 다른 클래스를 상속받도록 명기해준 경우에는 해당 클래스가 이미 Object를 상속받기 때문에 중복해서 추가해주진 않는다. Object 클래스가 제공하는 여러가지 기능들 하위 클래스가 상위 클래스를 상속받으면 상위 클래스의..

Technology/Java 2022.08.26

이분 탐색, Lower Bound와 Upper Bound - Java

이분 탐색이란? 우선 탐색이란 자료구조, 그래프 등에서 특정한 데이터를 찾는 것을 말한다. 대표적인 탐색 방법으로 '순차 탐색'이 있는데, 이는 어떤 자료구조에서 특정 데이터를 찾기 위해 첫 번째 원소부터 마지막 원소까지 차례대로 확인하는 방법으로 가장 정직한 탐색 방법이다. 하지만 이러한 순차 탐색의 시간 복잡도는 O(N)으로 데이터가 무수히 많은 경우에는 적합하지 않다. 이러한 경우에는 어떤 탐색 방법이 유용할까? 대표적으로 '이분 탐색'이 있다. 이분 탐색은 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하기 때문에 시간 복잡도가 O(logN)으로 순차 탐색 보다 훨씬 유리한 방법이다. 다만 이분 탐색의 경우 '데이터가 정렬되어 있는 경우'에만 사용할 수 있다는 특징이 있다. 이분 탐색 구현해보기 여러 ..

Algorithm/Basic 2022.08.18