클래스(Class)란?
자바는 객체 지향 프로그래밍 언어로, 클래스(Class)는 자바 프로그램의 기본 구성 요소 중 하나이다. 클래스는 객체(Object)를 생성하기 위한 설계 도면 또는 틀을 제공하며, 객체는 클래스의 인스턴스(Instance)이다. 이것은 자바에서 코드를 구조화하고 재사용성을 높이는 데 중요한 역할을 한다.
클래스는 class 키워드를 사용하여 선언된다. 클래스 이름은 관례상 대문자로 시작하며, 클래스 정의는 중괄호 {} 로 둘러싸여 있다.
public class MyClass {
// 클래스 멤버(필드, 메서드) 정의
}
클래스를 기반으로 객체를 생성하려면 new 키워드를 사용한다. 객체를 생성하면 클래스 내의 멤버(필드와 메서드)에 접근할 수 있다.
MyClass myObject = new MyClass(); // MyClass 클래스의 객체 생성
클래스 내부에 멤버 변수(또는 필드)를 정의하여 객체의 상태를 나타낸다. 필드는 클래스의 상태를 저장하는 역할을 한다.
public class MyClass {
int myField; // 정수형 필드 선언
String name; // 문자열 필드 선언
}
클래스 내부에 멤버 메소드를 정의하여 객체의 동작을 구현한다. 메소드는 클래스의 동작을 제공한다.
public class MyClass {
int myField;
// 메서드 정의
public void doSomething() {
// 메서드 내용
// myField를 사용하여 작업 수행
}
}
클래스의 멤버 변수 및 메소드는 접근 제어 지시자(ex. public , private , protected)를 사용하여 접근 범위를 제어할 수 있다.
이를 통해 정보 은폐와 캡슐화를 구현할 수 있다.
public class MyClass {
private int myPrivateField; // private 접근 제어 지시자
public void myPublicMethod() {
// 메서드 내용
}
}
생성자는 객체를 초기화하기 위한 특수한 메소드로, 클래스 이름과 동일한 이름을 가진다. 객체가 생성될 때 자동으로 호출되며 초기화 작업을 수행한다.
public class MyClass {
private int value;
// 생성자 정의
public MyClass(int initialValue) {
value = initialValue;
}
}
클래스(Class) 추가 설명
자바에서 클래스는 다른 클래스를 확장하여 새로운 클래스를 정의할 수 있다. 이것을 상속이라고 하며, 부모 클래스(슈퍼 클래스)의 특성과 메소드를 자식 클래스(서브 클래스)에서 재사용할 수 있도록 한다.
class Parent {
int parentField;
}
class Child extends Parent {
int childField;
}
자바에서 다형성은 여러 클래서 객체를 동일한 방식으로 다룰 수 있는 능력을 나타낸다. 이것은 상속 및 인터페이스 구현을 통해 달성된다.
Parent obj1 = new Parent();
Parent obj2 = new Child(); // 다형성을 통해 서브 클래스 객체도 슈퍼 클래스 참조 변수에 할당 가능
자바에서 인터페이스는 클래스와 관련된 추상메소드 집합을 정의한다. 클래스는 하나 이상의 인터페이스를 구현하여 해당 인터페이스에 정의된 메소드를 구현해야 한다.
interface MyInterface {
void myMethod();
}
class MyClass implements MyInterface {
@Override
public void myMethod() {
// 메서드 구현
}
}
클래스 멤버로서 정적 메소드를 정의할 수 있다. 이러한 메소드는 클래스 이름을 통해 호출되며 객체와 관련이 없는 작업을 수행한다.
public class MyStaticClass {
public static void staticMethod() {
// 정적 메서드 내용
}
}
final 키워드를 사용하여 클래스를 확장할 수 없도록 또는 메소드를 오버라이딩할 수 없도록 만들 수 있다. 이는 클래스나 메소드의 확장성을 제한할 때 유용하다.
final class MyFinalClass {
// 내용
}
class SubClass /*extends MyFinalClass 불가능*/ {
// 내용
}
class Parent {
public final void finalMethod() {
// 메서드 내용
}
}
class Child extends Parent {
// 오버라이딩 불가능
// public void finalMethod() { /* 오버라이딩 시도시 에러 발생 */ }
}