객체지향이란?
컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
장점
- 코드 재사용 용이
- 유지보수가 쉬움
- 대형 프로젝트에 적합
단점
- 처리 속도가 상대적으로 느림
- 객체가 많으면 용량이 커질 수 있음
- 설계시 많은 시간과 노력이 필요
객체지향 프로그래밍과 관련된 5가지
클래스 + 인스턴스(객체)
클래스
어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)와 행위(behavior)를 변수와 메서드로 정의한 것
== 객체를 만들기 위한 메타정보
인스턴스(객체)
클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터
추상화
추상 클래스나 추상클래스가 갖는 메서드를 의미하는 것 x
“공통”의 속성이나 기능을 묶어 이름을 붙이는 것
- 추상 메서드 : 해당 클래스에서 구현하지 못하는 메서드 ⇒ 하위 메서드에서 구현함
즉, 구현부가 존재하지 않는 메서드
캡슐화
목적
- 코드를 재수정 없이 재활용하는 것
- 접근 제어자를 통한 정보 은닉
⇒ 캡슐화를 사용하면, 접근 제어자를 통해 적절히 제어 권한이 있는 객체에만 접근할 수 있기에 수정이 일어났을 때 책임이 있는 객체만 수정하면 되기에 영향 범위를 예측하는데 수월해짐
정의
기능과 특성의 모음을 “클래스”라는 “캡슐”에 분류해서 넣는 것
특징
- 꼭 필요한 정보 & 기능만 외부에 오픈
- 대부분의 멤버 변수와 메서드를 감추고, 외부에 통합된 인터페이스만은 제공하여 일관된 기능을 구현하게 함
- 각각의 메서드나 멤버 변수를 접근함으로써 오류 최소화

상속
부모 클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게하고, 기능의 일부분을 변경해야할 경우 상소갇은 자식클래스에서 해당 기능만 다시 수정(override)하여 사용할 수 있게 하는 것
다중 상속 불가능 == 단일상속만 가능 (하나의 클래스만 상속 가능!)
└ 클래스의 상속 관계에서 혼란을 줄 수 있기 대문에 상속은 반드시 하나만 가능하다. 필요에 따라 “인터페이스”를 사용할 수 있게한다.
다형성
하나의 변수명, 함수명등이 상황에 따라 다른 의미로 해석될 수 있는 것
예를 들어, overriding, overloading이 가능하다는 것이다.
Overloading(오버로딩)
메서드의 매개변수 개수나, 타입을 다르게 하여 여러 상황에 맞는 기능을 구현
- 생성자 오버로딩
- 메서드 오버로딩
class OverloadingTest{
//이름이 cat인 메서드
void cat(){
System.out.println("매개변수 없음");
}
//매개변수 int형이 2개인 cat 메서드
void cat(int a, int b){
System.out.println("매개변수 :"+a+", "+b);
}
//매개변수 String형이 한 개인 cat 메서드
void cat(String c){
System.out.println("매개변수 : "+ c);
}
ex ) 같은 cat이란 함수여도 매개변수의 차이에 따라 메서드가 달라짐 ⇒ 오버로딩
Overriding(오버라이딩)
상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용
- 메서드의 이름이 같아야함
- 매개변수가 같아야함
- 반환형이 같아야함
⇒ 덮어쓰기 !!
class Woman{ //부모클래스
public String name;
public int age;
//info 메서드
public void info(){
System.out.println("여자의 이름은 "+name+", 나이는 "+age+"살입니다.");
}
}
class Job extends Woman{ //Woman클래스(부모클래스)를 상속받음 :
String job;
public void info() {//부모(Woman)클래스에 있는 info()메서드를 재정의
super.info();
System.out.println("여자의 직업은 "+job+"입니다.");
}
}
Uploaded by N2T