객체지향 프로그래밍(OOP)은 현대 소프트웨어 개발의 표준입니다.
오늘은 자바에서 객체지향을 구성하는 2가지 핵심 요소를 한 페이지에 정리해 보려 합니다.
1. 클래스
2. 메서드
1.클래스(Class)
객체(Object)를 활용하는 이유 : 코드의 '유지 보수성'
프로그래밍에서 가장 중요한 문제 중 하나는 데이터의 일관성과 유지보수입니다.
만약 객체를 사용하지 않고 “책(Book)” 정보를 관리한다면 어떻게 될까요?
예를 들어 다음과 같이 데이터를 분리해서 관리해야 합니다.
// 책을 10권 저장한다고 가정
String[] titleList = new String[10];// 책 제목 저장 리스트
String[] authorList = new String[10]; // 작가 이름 저장 리스트
int[] priceList = new int[10]; // 책 가격 저장 리스트
// 책 데이터 추가
titleList[0] = "자바의 정석";
authorList[0] = "정진영";
priceList[0] = 30000;
겉으로 보기에는 문제가 없어 보이지만, 실제로는 다음과 같은 문제가 발생합니다.
- 같은 인덱스를 항상 수동으로 맞춰야 함
- 하나라도 어긋나면 데이터 불일치 발생
- 데이터가 늘어날수록 구조가 복잡해짐
예를 들어 인덱스 하나라도 밀리면
- 제목은 A 책인데
- 가격은 B 책 값이 들어가는 상황이 발생할 수 있습니다
즉, 데이터 간의 “연결 관계”가 보장되지 않습니다.
이처럼 데이터가 파편화되면 유지보수가 불가능해지기 때문에, 이를 해결하기 위해 연관된 데이터를 하나로 묶는 '객체'가 필요합니다.
클래스(Class)란 무엇인가?
클래스는 객체를 생성하기 위한 설계도이며, 동시에 프로그래머가 직접 정의하는 사용자 정의 자료형입니다.
위와 같은 경우 클래스 활용하면 아래와 같이 설계도를 작성할 수 있습니다.
class Book {
// 인스턴스 변수 정의
String title;
String author;
int price;
}
이제 Book은 단순한 구조가 아니라 하나의 새로운 데이터 타입이 됩니다.
중요한 점은 클래스 자체에는 실제 데이터가 존재하지 않는다는 것입니다.
클래스는 “값을 저장하는 공간”이 아니라, 객체가 어떤 구조를 가져야 하는지 정의하는 코드입니다.
객체 생성과 인스턴스
클래스를 기반으로 실제 데이터를 사용하기 위해서는 객체를 생성해야 합니다.
Book book1 = new Book();
이 과정을 인스턴스 생성이라고 합니다.
이 상태에서는 아직 “빈 객체”만 만들어진 상태이며, 각 필드에는 기본값이 들어가 있습니다.
객체를 생성한 이후에는 점(.) 연산자를 통해 해당 객체 내부의 변수(필드)에 접근할 수 있습니다.
Book book1 = new Book();
book1.title = "자바의 정석";
book1.author = "정진영";
book1.price = 30000;
이 경우 book1에는 실제 객체가 아니라 메모리 영역에 생성된 객체를 가리키는 주소값이 저장됩니다.
따라서 book1은 실제값이 아닌 주소값을 참조하는 참조변수라고도 합니다.
클래스 배열의 활용
클래스는 배열 형태로도 사용할 수 있으며, 여러 객체를 하나의 구조로 관리할 수 있습니다.
예를 들어 Book 객체를 여러 개 관리해야 하는 경우, 다음과 같이 객체를 저장할 수 있는 배열을 생성할 수 있습니다.
Book[] arrBooks = new Book[2];
이 코드는 Book 객체를 담을 수 있는 배열 공간 2개를 생성한 것입니다.
arrBooks[0] = book1; // 이전에 생성한 객체 저장
이후 이미 생성된 객체를 배열에 저장할 수도 있습니다.
arrBooks[1] = new Book();
arrBooks[1].title = "클린 코드";
또는 새로운 객체를 직접 생성하여 저장할 수도 있습니다.
여기서 중요한 점은 new Book[2] 자체는 객체를 생성하는 것이 아니라는 점입니다.
이 코드는 실제 Book 객체를 만드는 것이 아니라, Book 객체를 참조할 수 있는 공간(참조 변수 배열) 을 생성하는 것입니다.
따라서 각 배열 요소에는 반드시 다음 중 하나가 필요합니다:
- 이미 생성된 객체를 저장하거나
- new Book()을 통해 새로운 객체를 생성하여 저장해야 함
2. 메서드 (Method)
메서드란 무엇인가?
메서드는 객체가 수행할 수 있는 기능을 독립적인 코드 블록으로 정의한 것입니다.
즉, 단순히 코드를 작성하는 것이 아니라 특정 기능을 하나의 단위로 묶어 필요할 때마다 호출하여 사용할 수 있도록 만든 구조입니다.
메서드를 사용하는 이유는 크게 두 가지로 나눌 수 있습니다.
- 코드의 재사용성 : 메서드로 한 번 정의해 두면 해당 이름을 호출하는 것만으로 동일한 기능을 사용
- 유지보수의 효율성 : 메서드 내부의 코드만 수정하면 해당 기능을 사용하는 모든 부분에 즉시 반영
메서드 작성 및 기본 구조
자바의 모든 메서드는 반드시 클래스 내부에 정의되어야 합니다.
기본 구조는 다음과 같습니다.
반환타입 메서드이름(매개변수) {
실행 코드
}
기본 구조를 활용해서 이전 Book 클래스에 메서드를 작성해본다면, 아래와 같습니다.
class Book {
String title;
int price;
// 1. 정보 출력 메서드
void printInfo() {
System.out.println("제목: " + title + " | 가격: " + price);
}
// 2. 가격 수정 메서드 : 매개변수 newPrice
void setPrice(int newPrice) {
price = newPrice * 1.0;
System.out.println(title + "의 가격이 수정되었습니다.");
}
// 3. 환율 변환 메서드 : 지역변수 활용과 return 구조
float getDollarPrice() {
float dollarPrice = (float) price / 1400;
return dollarPrice;
}
// 4. 메서드 간 호출
void printInfoEng() {
System.out.print("[ENG INFO] ");
printInfo();
System.out.println("Price in USD: $" + getDollarPrice());
}
}
1. 정보 출력 메서드
void printInfo() {
System.out.println("제목: " + title + " | 가격: " + price);
}
이 메서드는 객체에 저장된 정보(인스턴스 변수)를 출력하는 역할을 수행합니다.
즉, 객체가 가진 상태를 외부로 보여주는 기능입니다.
2. 값 변경 메서드
void setPrice(int newPrice) {
price = newPrice * 1.0;
}
이 메서드는 객체 내부의 값을 변경하는 역할을 합니다.
- 매개변수로 새로운 값을 전달받고
- 해당 값을 객체의 price 변수에 저장합니다.
※ 여기서는 단순 구조 이해를 위해 this는 사용하지 않고 표현했습니다.
3. 계산 및 반환 메서드
float getDollarPrice() {
float dollarPrice = (float) price / 1400;
return dollarPrice;
}
이 메서드는 객체 내부 데이터를 기반으로 계산을 수행하고 그 결과값을 반환하는 역할을 합니다.
이때 dollarPrice는 메서드 내부에서만 사용되는 지역 변수이며, 지역변수의 특징에 따라 아래와 같이 생성-사용-소멸 됩니다.
- 메서드 실행 시 생성됨
- 메서드 종료 시 소멸됨
- 다른 메서드에서는 사용할 수 없음
4. 메서드 간 호출
void printInfoEng() {
System.out.print("[ENG INFO] ");
printInfo();
System.out.println("Price in USD: $" + getDollarPrice());
}
메서드는 독립적으로 동작하는 것뿐만 아니라, 다른 메서드를 호출하여 기능을 조합할 수도 있습니다.
3. 참고 링크
Lesson: Classes and Objects (The Java™ Tutorials > Learning the Java Language)
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Dev.java for updated tutorials taking advantag
docs.oracle.com
[지금 무료]비전공자를 위한 자바| 이신만 - 인프런 강의
현재 평점 4.9점 수강생 944명인 강의를 만나보세요. 비전공자, 초보 개발자들이 자바 문법을 쉽게 배울 수 있습니다. 예제를 분석하며 문법을 배우는 방식입니다. 자바 문법, 객체지향, 자료구조,
www.inflearn.com
'language study > java | 문제풀이' 카테고리의 다른 글
| [Java] 알고리즘 기초 : 배열과 리스트, 언제 무엇을 쓸까? (1) | 2026.05.11 |
|---|---|
| [Java] 메서드 파라미터 전달 방식 : Call by Value - 값과 주소값 전달 차이 (0) | 2026.05.11 |
| [Java] 기본 문법 정리 : final, 오버로딩, 생성자, 가변인자 정리 (0) | 2026.05.11 |
| [Java] 객체지향 기초: this와 static (클래스 변수와 클래스 메서드) (1) | 2026.05.06 |
| [Java] 기본 문법 학습 정리 (1) | 2026.05.05 |