1.객체지향 프로그래밍(Object-Oriented Programming, OOP)
- 소프트웨어를 객체들의 집합으로 모델링하여 프로그램을 구성하는 패러다임입니다.
- 이 개념은 현실 세계의 사물을 객체로 표현하고, 그 객체들이 서로 상호작용하는 방식으로 프로그램을 구현합니다.
2. 클래스(Class)와 객체(Object)
2.1 클래스와 객체
- 클래스 : 객체를 정의해 놓은것이다. ( 객체를 생성하는데 사용된다. )
- 객체 : 실제로 존재하는 것. 사물 혹은 개념. ( 객체의 속성과 기능에 따라 다름 )
| 클래스 | 객체 |
| 핸드폰 설계도 | 갤럭시 |
| 라면 레시피 | 신(辛) 라면 |
| 붕어빵기계 | 붕어빵 |
2.2 객체와 인스턴스
인스턴스(instance) : 일반적으로 실행 중인 임의의 프로세스, 클래스의 현재 생성된 오브젝트
- 객체 ≒ 인스턴스 : 객체는 인스턴스를 포함하는 일반적인 의미
- 인스턴스화 : 클래스로 부터 인스턴스를 생성하는 것
2.3 속성과 기능
- 객체는 속성과 기능의 집합이며, 속성과 기능을 객체의 맴버( member,구성요소 )라고 한다.
- 클래스를 정의할 때 객체의 속성은 변수로, 기능은 메서드로 정의한다.
3. 변수와 메서드
3.1 변수의 종류
1.인스턴스 변수(instance variable)
- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장가능
- 인스턴스 생성 후, '참조변수.인스턴스변수명'으로 접근
- 인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지컬렉터에 의해자동 제거됨
2.클래스 변수
- 같은 클래스의 모든 인스턴스들이 공유하는 변수
- 인스턴스 생성없이 '클래스이름. 클래스변수명'으로 접근
- 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸
3.지역변수
- 메서드 내에 선언되며, 메서드의 종료와 함께 소멸
- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
3.2 메서드( method )
- 객체의 행동을 정의하는 데 사용되는 함수
public int add(int a, int b) {
return a + b;
}
public class Main {
public static void main(String[] args) {
// Calculator 클래스의 객체 생성
Calculator calculator = new Calculator();
// add 메서드 호출
int result = calculator.add(5, 3);
// 결과 출력
System.out.println("합계: " + result); // 결과로 "합계: 8"이 출력됩니다.
}
}
3.3 재귀호출 ( recursive call )
- 메서드 내에서 자기자신을 반복적으로 호출하는 것
- 재귀호출은 반복문으로 바꿀 수 있으며 반복문보다 성능이 나쁨
- 이해하기 쉽고 간결한 코드를 작성 가능
public class Main {
public static void main(String[] args) {
// Calculator 클래스의 객체 생성
Calculator calculator = new Calculator();
// add 메서드 호출
int result = calculator.add(5, 3);
// 결과 출력
System.out.println("합계: " + result); // 결과로 "합계: 8"이 출력됩니다.
}
}
4.오버로딩 ( overloading )
- 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것
4.1 오버로딩의 조건
- 메서드의 이름이 동일
- 매개변수의 개수 혹은 타입이 동일X
- 매개 변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립이 안
5.생성자
- 인턴스가 생성 될 때 마다 호출되는 '인스턴스 초기화 메서드' *인스턴스 초기화 : 인스턴스 변수에 적절한 값을 저장하는것
- 인스턴스 변수의 초기화 혹은 인스턴스 생성시 수행할 작업에 사용
- 몇가지 조건을 제외하고는 메서드와 같다.
- 모든 클래스에는 반드시 하나 이상의 생성자가 있어야한다.
5.1 생성자의 조건
- 생성자의 이름은 클래스의 이름과 같아야한다.
- 생성자는 리턴값이 없다.( 하지만 void를 쓰지 않는다. )
public class Person {
// 속성(멤버 변수)
String name;
int age;
// 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 메서드: 사람의 정보를 출력
public void printInfo() {
System.out.println("이름: " + name + ", 나이: " + age);
}
// 메인 메서드: 프로그램 실행을 위한 메서드
public static void main(String[] args) {
// Person 클래스의 인스턴스 생성
Person person1 = new Person("김철수", 25);
Person person2 = new Person("이영희", 30);
// 인스턴스의 메서드 호출
person1.printInfo(); // 출력: 이름: 김철수, 나이: 25
person2.printInfo(); // 출력: 이름: 이영희, 나이: 30
}
}
5.2 기본 생성자 ( default constructor )
- 매개 변수가 없는 생성자
- 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
5.3 생성자에서 다른 생성자 호출하기 this, this( )
- this : instance 자신을 가리키는 '참조변수', instance의 주소가 저장되어 있다.
- this () : '생성자', 같은 클래스의 다른 생성자를 호출할 때 사용
// this 예시
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name; // 여기서 this.name은 필드를, name은 생성자의 매개변수를 가리킵니다.
this.age = age; // 마찬가지로, this.age는 필드 age를, age는 매개변수 age를 가리킵니다.
}
}
// this () 예시
public class Person {
private String name;
private int age;
// 기본 생성자
public Person() {
this("이름 없음", 0); // 다른 생성자 호출
}
// 모든 필드를 초기화하는 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
6. 변수의 초기화
- 변수를 선언하고 처음으로 값을 저장하는 것
- 멤버변수와 배열은 각 타입의 기본값으로 자동초기화되므로 초기화를 생략할 수 있다.
- 지역변수는 사용전에 초기화를 해주어야 한다.