1. 자바의 기본 구조
자바는 객체 지향 프로그래밍 언어로, 모든 것이 클래스로 구성되어 있습니다. 프로그램에서 사용하는 데이터와 기능(메서드)을 캡슐화하여 클래스로 정의하고, 이 클래스의 인스턴스를 객체라고 부릅니다.
기본적인 자바 구성:
• 클래스(Class): 데이터와 메서드를 정의하는 틀입니다.
• 객체(Object): 클래스의 인스턴스로, 메모리에서 동적으로 생성되는 실제 데이터입니다.
• 메서드(Method): 특정 작업을 수행하는 기능을 포함한 코드 블록입니다.
• 필드(Field): 클래스 내에 정의된 변수입니다.
자바에서 모든 동작은 클래스의 인스턴스를 통해 이루어집니다.
2. 자바 표준 라이브러리
자바에는 표준 라이브러리(Java API)가 내장되어 있으며, 이러한 라이브러리들은 다양한 패키지로 구분됩니다. 이 패키지에는 이미 구현된 다양한 기능들이 포함되어 있으며, 우리는 그 기능을 가져다 쓸 수 있습니다.
예시:
• java.lang 패키지: 기본적인 클래스들(예: String, Object, Math)이 포함되어 있으며, 자바 프로그램에서 기본적으로 포함됩니다.
• java.util 패키지: 컬렉션 프레임워크(List, Set, Map 등), 날짜 처리(Date, Calendar 등) 관련 클래스들이 포함되어 있습니다.
• java.io 패키지: 입출력 관련 클래스들(File, InputStream, OutputStream 등)이 포함되어 있습니다.
자바 프로그램에서 필요한 기능이 이미 구현된 라이브러리를 불러와서 사용하는 방식입니다. 이를 **패키지 임포트(import)**라고 합니다.
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
System.out.println(list.get(0));
}
}
• 위 예시에서 java.util 패키지에 있는 ArrayList 클래스를 임포트해서 사용하고 있습니다.
3. 상속(Inheritance)과 오버라이딩(Overriding)
자바에서는 상속을 통해 기존 클래스를 확장하여 새로운 클래스를 만들 수 있습니다. 이때, 부모 클래스(슈퍼클래스)의 기능을 자식 클래스(서브클래스)에서 재정의(오버라이딩) 할 수 있습니다. 이 방식으로 기존 기능을 재사용하거나, 내가 원하는 방식으로 수정하여 사용할 수 있습니다.
상속의 예시:
class Animal {
public void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("개가 멍멍 짖습니다.");
}
}
public class Example {
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound(); // "개가 멍멍 짖습니다." 출력
}
}
• Dog 클래스가 Animal 클래스를 상속받았으며, sound 메서드를 오버라이딩하여 개에 맞는 소리를 내는 방식으로 변경했습니다.
4. 인터페이스(Interface)와 구현(Implementation)
자바에서는 다중 상속을 허용하지 않기 때문에, 인터페이스라는 개념이 있습니다. 인터페이스는 특정 메서드들을 정의한 다음, 이를 여러 클래스에서 구현할 수 있도록 설계된 구조입니다. 인터페이스는 메서드의 시그니처만 정의하며, 실제 동작은 해당 인터페이스를 구현한 클래스에서 작성합니다.
인터페이스 예시:
interface Animal {
void sound();
}
class Dog implements Animal {
@Override
public void sound() {
System.out.println("개가 멍멍 짖습니다.");
}
}
public class Example {
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound();
}
}
• Animal 인터페이스는 sound 메서드를 정의하고, Dog 클래스에서 이를 구현(implementation)했습니다.
5. 라이브러리 사용과 재사용성
자바의 표준 라이브러리뿐만 아니라, 자바의 생태계에는 수많은 서드파티 라이브러리(예: Apache Commons, Spring Framework)가 있습니다. 이러한 라이브러리는 특정한 기능을 이미 구현해 놓았기 때문에, 개발자는 필요할 때 그 기능을 가져다 쓰거나 확장할 수 있습니다.
라이브러리 가져오기 (Maven, Gradle 등):
자바 프로젝트에서는 보통 Maven 또는 Gradle과 같은 빌드 도구를 사용하여 외부 라이브러리를 관리합니다. 이러한 도구를 사용하면 필요한 라이브러리를 선언하기만 하면, 자동으로 프로젝트에 추가됩니다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
이렇게 선언하면 Spring Framework의 기능을 프로젝트에서 사용할 수 있습니다.
6. 결론
자바는 클래스로 구성된 객체 지향 언어이며, 다양한 표준 라이브러리 및 외부 라이브러리들이 이미 구현되어 있어 이를 쉽게 가져다 사용할 수 있습니다. 또한, 상속과 오버라이딩을 통해 기존 클래스를 확장하거나 새로운 방식으로 재정의할 수 있으며, 인터페이스를 활용해 다형성을 구현할 수 있습니다.
따라서 자바 개발자는 이미 만들어진 다양한 기능을 재사용하고, 필요한 경우 이를 확장하거나 커스터마이징하여 사용할 수 있습니다.
'Java' 카테고리의 다른 글
[JAVA] Static (0) | 2024.09.24 |
---|---|
[JAVA] 빌더(builder) (0) | 2024.09.24 |
[JAVA] 예외처리(Exception) (0) | 2024.09.24 |
[JAVA] 자바의 동작원리(JVM, JRE, JDK) (0) | 2024.09.24 |
[JAVA] SOLID 원칙 (1) | 2024.09.22 |