자바(JAVA)/미니 프로젝트 & 기초 공부
Java 기초 또 다시 공부하기 9일차 - 객체 지향 프로그래밍(필드, 생성자, 메서드)
개발학생
2025. 6. 5. 18:56
반응형
1. 필드(Field)
1) 필드의 개념 및 선언
- 개념: 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상태 저장
- 선언: 클래스 중관호 {} 블록 내부에 "타입 필드명( = 초기값);"과 같은 형식으로 선언
-> 초기값 설정은 생략 가능
String company = "당근";
String product = "플랫폼";
int num = 10;
int companyYear;
- 초기값을 지정하지 않았을 경우 필드 타입별 기본 초기값
타입 분류 | 타입 | 초기값 |
정수 타입 | byte | 0 |
char | \u0000(빈 공백) | |
short | 0 | |
int | 0 | |
long | 0L | |
실수 타입 | float | 0.0F |
double | 0.0 | |
논리 타입 | boolean | false |
참조 타입 | 배열 | null |
클래스(String 포함) | null | |
인터페이스 | null |
2) 필드 사용(필드값을 읽고 변경)
- 클래스 내부의 생성자나 메서드에서 사용 시 필드 이름으로 읽고 변경
- 클래스 외부(다른 클래스)에서 사용 시, 외부에서 객체를 생성한 후 필드를 사용
-> 필드가 객체에 소속된 데이터이므로, 객체가 존재하지 않으면 필드도 존재하지 않음
// Car 클래스(Car.java)
class Car {
// 필드
int speed;
// 생성자(값 변경)
Car() {
speed = 10;
}
// 메서드
void method(...) {
speed = 20;
}
}
// Person 클래스(Car 클래스의 필드 사용, Person.java)
class Person {
void method() {
// Car 객체 생성
Car car = new Car();
// Car의 필드 사용
car.speed = 60;
}
}
2. 생성자(Constructor)
1) 생성자의 개념
- new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체 초기화(필드 초기화 or 메서드 호출로 객체 사용 준비) 담당
- new 연산자에 의해 생성자가 성공적으로 실행하면, 힙(heap) 영역에 객체가 생성되며 객체의 번지를 리턴함
-> 리턴한 번지는 클래스 변수에 저장됨 - 모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있음
2) 기본 생성자(Default Constructor)
- 클래스 내부에 생성자를 선언하지 않았다면,
컴파일러는 아래처럼 중괄호 블록 내용이 비어 있는 형태로 기본 생성자를 바이트 코드에 자동으로 추가
class Car {
Car() {
}
}
- 클래스에 생성자를 선언하지 않았어도 Car car = new Car();처럼 new 연산자 뒤에 기본 생성자를 호출하여 객체 생성 가능
3) 생성자 선언
- 기본 생성자 대신 사용할 생성자를 명시적으로 선언
-> 아래 코드에 경우, Car 생성자를 호출할 때 Car car = new Car("그랜저", "파랑", 100);처럼 3개 매개값 사용
class Car {
// 생성자
Car(String model, String color, int speed) {
...;
return ...;
}
}
4) 생성자에서 필드 초기화
class Car {
String nation;
String name;
int speed;
car(String nation, String name, int speed) {
// 객체 자신의 필드에 매개 변수를 넣음
this.nation = nation;
this.name = name;
this.speed = speed;
}
}
5) 생성자 오버로딩(overloading)
- 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
- 예시
class Car {
Car() { ... }
Car(String model) { ... }
Car(String model, String nation) { ... }
Car(String model, String nation, int speed) { ... }
}
3. 메서드(메소드, Method)
1) 메서드 선언
- 메서드 선언부(=메서드 시그니처,signature)와 메서드 실행 블록으로 구성
- 리턴 타입: 메서드가 리턴하는 결과의 타입 표시
- 메서드 이름: 메서드의 기능이 드러나도록 식별자 규칙에 맞는 이름을 설정
- 매개 변수 선언: 메서드를 실행할 때 필요한 데이터를 받기 위한 변수 선언
- 메서드 실행 블록: 실행할 코드 작성
메서드리턴타입 메서드이름 (매개변수선언1, ...) {
메서드 실행 블록
...
}
(1) 리턴 타입
- 리턴값의 타입, 즉 메서드를 실행한 후의 결과값
- 리턴 타입을 void로 설정할 경우 리턴값이 없음
(2) 메서드 이름
- 숫자로 시작하면 안되며, $와 _를 제외한 특수 문자 사용 금지
- 소문자로 작성하며, 어떤 기능을 하는지 동사형으로 작성하는 것이 관례
- 두 단어 이상의 이름일 경우, 카멜 케이스(첫단어의 첫문자는 소문자, 다른단어의 첫문자는 대문자)로 작성
-> 띄어쓰기 없이 이름을 짓기 위함
(3) 매개 변수 선언
- 매개변수: 메서드 실행 시 필요한 데이터를 받기 위한 변수
-> 필요한 경우도 있고, 필요 없는 경우도 있음 - 메서드의 매개 변수는 여러 타입을 포함 할 수 있으며, 메서드 호출 시 그에 해당하는 값을 반드시 모두 주어야 함
-> 단, 매개 변수의 개수를 알 수 없다면 배열 타입으로 매개 변수를 선언
String plus(String x, int y) { ... }
String result = plus("문자열", 1);
(4) 리턴(return)문
- 리턴값이 있는 메서드는 반드시 리턴문으로 리턴값 지정
- 리턴값이 없는 메서드(void 타입)에서 return;을 사용하면 메서드 실행을 강제 종료함
2) 메서드 호출
(1) 객체(클래스) 내부에서 호출
class ClassName {
void method1(String p, int q) {
System.out.println(p + q);
}
void method2() {
method1("문자열", 1);
}
}
(2) 객체(클래스) 외부에서 호출
class Car {
// 필드
int speed;
// 생성자(생략)
// 메서드
int getSpeed() {
return speed;
}
void turnOn() {
System.out.println("시동 걸기");
}
void run() {
for(int i=10; i<=50; i+=10) {
speed = i;
System.out.println("시속 " + speed + "km/h으로 주행");
}
}
}
class Main {
public static void main(String[] args) {
Car car = new Car();
car.turnOn();
car.run();
int speed = car.getSpeed();
System.out.println("현재 속도: " + speed + "km/h");
}
}
- 실행 결과

3) 메서드 오버로딩(overloading)
- 클래스 내에 같은 리턴 타입과 이름의 메서드를 여러 개 선언
-> 매개 변수의 타입, 개수, 순서가 다르면 됨 - 매개값을 다양한게 받아 처리할 수 있도록 하기 위함
반응형