본문 바로가기

728x90

Programming/Java

[Java] OOP(Object-Oriented Programming) OOP(Object-Oriented Programming)는 객체를 중심으로 프로그래밍하는 패러다임으로, 프로그램을 객체라는 기본 단위로 쪼개고 이 객체들 간의 상호작용을 통해 로직을 구현하는 것입니다. OOP의 특징은 크게 4가지로 분류할 수 있습니다. 캡슐화(Encapsulation): 객체의 필드와 메서드를 하나로 묶고, 외부에서 직접 접근하지 못하도록 제한하는 것입니다. 객체 내부의 구현 방식을 외부에서 숨기면서 객체가 제공하는 기능만 사용할 수 있도록 제한함으로써 객체의 사용성을 높이고, 변경에 대한 유연성을 높일 수 있습니다. 상속(Inheritance): 이미 정의된 클래스를 기반으로 새로운 클래스를 정의하는 것입니다. 상위 클래스의 필드와 메서드를 하위 클래스에서 그대로 사용할 수 있기 때.. 더보기
[Java] for문과 for-each문 for문과 for-each문은 자바에서 반복문을 구현하는 구문입니다. for-each문은 자바 5부터 추가된 구문으로, 컬렉션과 배열을 반복할 때 사용됩니다. for-each문은 for문과 비교했을 때 다음과 같은 장단점이 있습니다. for-each문의 장점 코드가 간결해져 가독성이 좋아집니다. 반복 인덱스를 사용하지 않으므로, 인덱스 관련 오류가 발생할 가능성이 줄어듭니다. 컬렉션과 배열 등 순회할 수 있는 모든 자료구조를 순회할 수 있습니다. for-each문의 단점 순서대로 순회하기 때문에, 반복 중간에 끊어서 루프를 탈출할 수 없습니다. 인덱스 정보를 얻을 수 없으므로, 반복과 관련된 작업을 수행할 때 유용하지 않습니다. 배열 또는 컬렉션의 내용을 수정하는 작업은 for-each문에서 직접 처리할.. 더보기
[Java] 배열과 리스트 배열과 리스트는 모두 데이터를 저장하는 자료구조입니다. 그러나, 어떤 상황에서는 배열이 더 적합하고, 어떤 상황에서는 리스트가 더 적합합니다. 배열은 크기가 고정되어 있고, 각 요소의 인덱스를 사용하여 빠르게 접근할 수 있는 것이 장점입니다. 따라서, 다음과 같은 경우에 배열을 사용하는 것이 적합합니다. 요소의 개수가 고정되어 있을 때: 배열은 크기가 고정되어 있기 때문에, 요소의 개수가 고정되어 있는 경우 배열을 사용하는 것이 적합합니다. 요소의 인덱스를 자주 사용할 때: 배열은 각 요소의 인덱스를 사용하여 빠르게 접근할 수 있기 때문에, 요소의 인덱스를 자주 사용하는 경우 배열을 사용하는 것이 적합합니다. 반면에, 리스트는 크기가 가변적이고, 각 요소에 접근하기 위해서는 해당 요소를 검색해야 하는 것.. 더보기
[Java] int 상수 대신 열거 타입을 사용하라 int 상수 대신 열거 타입을 사용하는 것이 좋습니다. 열거 타입을 사용하면 코드의 가독성이 높아지고, 안정성이 향상되며, 코드 유지 보수가 용이해집니다. int 상수를 사용하는 경우에는 다음과 같은 문제점이 있습니다. 가독성이 떨어집니다. int 상수를 사용하면, 해당 상수가 어떤 의미를 가지고 있는지 한 눈에 알아보기어렵습니다. 예를 들어, int 상수로 요일을 표현하는 경우, 1이 월요일을 나타내는지, 일요일을 나타내는지 한 눈에 알아보기 어렵습니다. 안정성이 떨어집니다. int 상수를 사용하면, 오타나 잘못된 값이 사용될 가능성이 있습니다. 이 경우, 컴파일 시에는 오류가 발생하지 않고, 런타임에 문제가 발생할 수 있습니다. 코드 유지 보수가 어렵습니다. int 상수를 사용하는 경우, 상수의 값이.. 더보기
[Java] clone 함수 Java의 clone 함수는 객체를 복제하는 데 사용됩니다. clone 함수는 Object 클래스에 정의되어 있으며, 객체를 복제할 때 사용됩니다. 객체를 복제하면, 동일한 내용을 가진 두 개의 객체가 만들어집니다. clone 함수는 Object 클래스에서 기본적으로 protected 접근 제한자로 정의되어 있습니다. 따라서, clone 함수를 호출하려면 해당 클래스에서 public 접근 제한자로 재정의해주어야 합니다. 클래스에서 clone 함수를 재정의할 때에는 Cloneable 인터페이스를 구현해야 합니다. 이 인터페이스를구현하지 않은 클래스에서 clone 함수를 호출하면 CloneNotSupportedException이 발생합니다. Cloneable 인터페이스는 메소드가 없는 빈 인터페이스이며, 이.. 더보기
[Java] 문자열 거꾸로 출력하기 자바에서 문자열을 거꾸로 출력하는 방법은 여러 가지가 있습니다. 그 중에서 가장 간단한 방법은 StringBuilder 클래스를 이용하는 것입니다. StringBuilder 클래스는 문자열을 변경할 수 있는 가변 클래스이며, 문자열의 뒤에서부터 역순으로 반복문을 돌며 append 메소드를 이용하여 문자를 추가하고, toString 메소드를 호출하여 최종적으로 문자열을 반환합니다. 아래는 StringBuilder 클래스를 이용하여 문자열을 거꾸로 출력하는 예시 코드입니다. public static void main(String[] args) { String str = "Hello World!"; StringBuilder sb = new StringBuilder(); for (int i = str.lengt.. 더보기
[Java] Hashtable vs Map Hashtable과 Map은 모두 키와 값의 쌍으로 데이터를 저장하는 자료 구조입니다. 하지만 두 자료 구조는 몇 가지 차이점이 있습니다. Hashtable과 Map의 가장 큰 차이점은 동기화(synchronization) 여부입니다. Hashtable은 스레드 안전(thread-safe)한 자료 구조로, 동시에 여러 스레드에서 사용해도 안전합니다. 따라서, 멀티스레드 환경에서 안전하게 데이터를 처리해야 하는 경우에는 Hashtable을 사용하는 것이 좋습니다. 반면에 Map은 스레드 안전하지 않습니다. 멀티스레드 환경에서 안전하게 데이터를 처리하기 위해서는 ConcurrentHashMap 등의 스레드 안전한 자료 구조를 사용해야 합니다. 또한, Hashtable은 초기 용량(capacity)과 로드 팩.. 더보기
[Java] Hashtable Java의 Hashtable은 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료 구조입니다. Hashtable은 해시 테이블(hash table)을 사용하여 구현되어 있으며, 키를 해시 함수를 이용하여 해시코드로 변환한 다음, 해당 해시코드에 해당하는 버킷(bucket)에 값을 저장합니다. 이를 통해 빠른 검색 및 삽입이 가능합니다. Hashtable은 다음과 같은 특징을 가지고 있습니다. 키와 값은 모두 Object 타입으로 저장됩니다. Hashtable의 초기 용량(capacity)은 11이며, 런타임에 자동으로 늘어납니다. Hashtable은 스레드 안전(thread-safe)하게 동작합니다. 따라서, 동시에 여러 스레드에서 사용해도 문제가 발생하지 않습니다. Hashtable은 순서를.. 더보기

728x90