
[자바 기초 완벽 정리] 클래스와 메서드의 종류, 접근 제어자(권한) 핵심 예제 총망라
자바(Java)를 처음 접할 때 가장 먼저 마주치고, 또 가장 오랫동안 우리를 괴롭히는 개념이 바로 객체지향 프로그래밍(OOP)의 핵심인 '클래스'와 '메서드'입니다. 건물을 지을 때 설계도가 필요하듯, 자바에서는 클래스라는 설계도가 필수적입니다. 또한, 이 설계도의 데이터를 안전하게 보호하는 것이 '접근 제어자'의 역할입니다.
오늘은 헷갈리기 쉬운 자바의 클래스와 메서드의 종류를 명확히 구분하고, 접근 권한까지 실무에서 쓰이는 직관적인 코드 예제와 함께 아주 상세하고 깊이 있게 파헤쳐 보겠습니다.
1. 클래스(Class)란 무엇인가?
클래스는 객체(Object)를 생성하기 위한 일종의 '설계도' 또는 '틀'입니다. 자바의 모든 코드는 기본적으로 클래스 내부에 작성되며, 클래스는 객체의 상태를 나타내는 '필드(변수)'와 객체의 행동을 나타내는 '메서드(함수)'로 구성됩니다.
- 객체지향의 핵심: 잘 만들어진 설계도(클래스) 하나면, 메모리상에 수많은 객체(인스턴스)를 생성하여 무한히 재사용할 수 있습니다.
2. 자바 클래스의 다양한 종류와 예제
상황에 따라 클래스는 여러 가지 형태로 선언되어 사용됩니다.
일반 클래스 (Regular Class)
가장 기본적인 형태입니다. 직접 객체를 생성할 수 있습니다.
public class Car {
String color = "Red"; // 필드
public void drive() { // 메서드
System.out.println("자동차가 주행합니다.");
}
}
추상 클래스 (Abstract Class)
하나 이상의 '추상 메서드(구현부가 없는 메서드)'를 포함합니다. 직접 객체를 생성할 수 없고, 반드시 자식 클래스에서 상속받아 완성해야 합니다.
public abstract class Animal {
public abstract void sound(); // 구현부({ })가 없는 추상 메서드
public void sleep() {
System.out.println("잠을 잡니다.");
}
}
인터페이스 (Interface)
추상 클래스보다 더 극단적인 형태로, 상수와 추상 메서드만 가집니다. 자바에서 다중 상속을 지원하기 위한 뼈대 역할을 합니다.
public interface Flyable {
void fly(); // 컴파일러가 자동으로 public abstract를 붙여줌
}
내부 클래스 (Inner Class)
클래스 내부에 선언된 또 다른 클래스입니다. 두 클래스가 긴밀한 관계일 때 코드를 단순화하고 은닉화하기 위해 사용합니다.
public class OuterClass {
class InnerClass {
void display() {
System.out.println("내부 클래스입니다.");
}
}
}
3. 메서드(Method)란 무엇인가?
메서드는 특정 작업을 수행하는 일련의 코드 블록입니다. 쉽게 말해 클래스가 할 수 있는 '행동'이나 '기능'입니다. 메서드를 활용하면 중복되는 코드를 확 줄이고 프로그램의 모듈화가 가능해집니다.
4. 메서드의 종류와 특징 (예제 포함)
메서드도 호출 방식과 용도에 따라 나뉩니다.
public class Calculator {
// 1. 인스턴스 메서드: 객체를 생성(new)한 후에만 호출 가능
public int add(int a, int b) {
return a + b;
}
// 2. 정적(static) 메서드: 객체 생성 없이 '클래스명.메서드명()'으로 즉시 호출 가능
public static int multiply(int a, int b) {
return a * b;
}
}
// [사용 예시]
// Calculator calc = new Calculator();
// calc.add(10, 5); // 인스턴스 메서드 호출 방식
// Calculator.multiply(10, 5); // 정적 메서드 호출 방식
5. 데이터 보호의 핵심: 접근 제어자(Access Modifier)
클래스, 변수, 메서드의 선언부에 붙어 외부에서의 접근 권한을 제어합니다. 객체지향의 '캡슐화'를 구현하는 핵심 키워드입니다. 보안이 강한 순서대로 확인해 보겠습니다.
public class AccessModifierExample {
private int privateVar = 1; // 1. private: 오직 이 클래스 내부에서만 접근 가능!
int defaultVar = 2; // 2. default: 같은 패키지 내에서만 접근 가능!
protected int protectedVar = 3; // 3. protected: 같은 패키지 + 다른 패키지의 자식 클래스!
public int publicVar = 4; // 4. public: 어디서든 누구나 제한 없이 접근 가능!
}
🤔 자주 묻는 질문 (FAQ)
static 메서드는 프로그램이 켜지자마자 메모리에 올라가지만, 인스턴스 변수는 나중에 new 키워드로 객체가 생성될 때 비로소 메모리에 올라갑니다. static 메서드가 실행되는 시점에는 인스턴스 변수가 존재하지 않기 때문에 문법적으로 에러가 발생합니다.private을 붙일 수 없습니다. public이나 default만 가능합니다. 단, 예제에서 본 '내부 클래스(Inner Class)'에는 private을 붙여 외부의 접근을 완벽하게 차단할 수 있습니다.
[요약]
1. 클래스는 목적에 따라 일반, 추상, 인터페이스, 내부 클래스 등으로 나뉩니다.
2. 메서드는 호출 방식에 따라 인스턴스와 정적(static) 메서드로 구분됩니다.
3. private부터 public까지 4단계의 접근 제어자를 적절히 섞어 데이터를 캡슐화하는 것이 진짜 객체지향 설계입니다.
'코딩 이야기 > 자바 코딩' 카테고리의 다른 글
| 자바(Java) 기초 마스터: 클래스와 함수(메서드) 만들기 (1) | 2026.04.13 |
|---|---|
| JAVA 핵심 기본 문법 정리 (0) | 2026.04.09 |
| [자바 기초] 초보자를 위한 Java 기본 구문 완벽 가이드: 주석 달기부터 코드 구조까지 (0) | 2026.04.01 |
| 탄탄한 코딩의 시작: 자바(Java)의 기본 구조 (0) | 2026.03.27 |
| 자바(Java) 언어 : 핵심 특징부터 강력한 적용 분야까지 (0) | 2026.03.26 |