STUDY/JAVA
[생활코딩! 자.프.입] 3부 : 객체지향 프로그래밍
yeonee911
2025. 1. 21. 21:26
1. 객체 지향 프로그래밍(OOP)
- 객체 : 서로 연관된 기능별로 그룹화된 단위
- 추상화 : 해결해야 할 문제 또는 반영해야 할 현실을 소프트웨어 방식으로 단순화하는 행위
- 소프트웨어 설계 : 복잡한 현실을 추상화하는 과정
- 부품화 : 좋은 객체를 만든다는 것은 로직을 재활용할 수 있게 부품화 하는 것
- 은닉화, 캡슐화 : 내부의 동작방법을 객체에 숨기고 사용자에게는 그 부품의 사용법만 노출하는 것을 정보 은닉화/캡슐화
- 인터페이스 : 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면
2. 클래스와 인스턴스, 그리고 객체
- 클래스 : 객체를 만들기 위한 일종의 설계도
- static 키워드가 붙음
- 인스턴스 : 그 설계도에 따라서 만든 구체적인 제품
- static 이 붙지 않음
- 인스턴스 메소드는 클래스 멤버에 접근 가능
- 인스턴스 메소드는 인스턴스에 속한 메소들로서 static이라는 키워드가 지정되지 않은 메소드이다.
- 인스턴스 메소드 안에서 클래스 변수와 클래스 메소드에 접근할 수 있다
- 클래스 메소드는 인스턴스 멤버에 접근 불가능
- 클래스라는 것은 언제나 메소드보다 먼저 존재한다. 왜냐하면 설계도를 만들고 이 설계도에 따라 만들어진 구체적인 제품인 인스턴스를 나중에 만들기 때문.
- 클래스 메소드는 그 클래스를 기반으로 만들어진 인스턴스에 접근하는 것이기 때문에 아직 생성되지 않은 인스턴스에 접근하는 것이다.
- 어떤 변수에 인스턴스가 담겨 있는지 조차도 클래스 안에서는 알 수 없다.
3. 유효 범위
package org.opentutorials.javatutorials.scope;
class C{
int v = 10;
void m() {
int v = 20;
System.out.println(v);
System.out.println(this.v);
}
}
public class ScopeDemo {
public static void main(String[] args) {
C c1 = new C();
c1.m();
}
}
// 출력 결과
// 20
// 10
- this : 인스턴스의 인스턴스 자신을 의미하는 값
4. 상속과 생성자
- 상속받은 하위 클래스의 인스턴스가 생성될 때 상속한 상위 클래스의 기본 생성자를 자동으로 호출한다.
- 만약 부모 클래스에서 매개변수가 있는 생성자를 선언하면 자동으로 기본생성자가 생성되지 않아서 오류 발생
4.1 super
- super : 부모 클래스 의미
- super() : 부모 클래스의 생성자
- 주의! : 하위 클래스의 초기화 코드를 super보다 먼저 등장시키면 안된다.
5. 오버라이딩
- 상속은 부모 클래스에 어떠한 기능을 추가만 하는 경우
- 오버라이딩은 부모 클래스의 메소드를 그대로 쓰지 않고 자식 클래스의 필요에 따라 메소드를 재정의. 이때 부모 클래스의 메소드는 무시된다.
5.1 오버라이딩 주의사항
- 부모 클래스의 메소드 형식과 자식 클래스의 메소드 형식이 불일치하는 경우 오버라이딩할 수 없다. 즉 오버라딩하기 위해서는 부모 클래스와 자식 클래스의 반환 타입이 일치해야한다.
- 메소드의 이름이 같아야한다
- 매개변수 개수와 반환 타입이 같아야한다
5.2 오버라이딩 조건 (메소드의 서명=signature)
- 메소드 이름
- 메소드 매개변수의 개수와 데이터 타입, 순서
- 메소드의 반환 타입
- Tip! 자식 메소드에서 부모 메소드를 호출할 때는 super키워드를 사용한다.
6. 오버로딩
- 정의 : 클래스에 메소드를 정의할 때 이름이 같지만 서로 다른 매개변수 형식을 지닌 메소드를 여러 개 정의할 수 있는 방법
- 규칙 : 메소드의 이름과 반환값은 같아야하 하지만 매개변수는 달라야한다.