분명히 공부도 하고 정리도 했는데 남는 게 없다.. 원래 이런가?
정의를 정확하게 외우는 것은 기술면접 전에 해야할 일이고
어떤때에 어떤 걸 써야 한다 정도로 알아두기!!
- 객체지향 프로그래밍 OOP
프로그래밍에 사용 될 데이터의 상태와 행위를 객체로 만들어, 객체 간의 상호작용을 통해 비지니스 로직을 구성하는 프로그래밍 기법
- 특징
- 상속 : 자식클래스가 부모클래스의 기능과 상태를 물려받아, 그대로 사용하거나 필요한 부분만 수정할 수 있도록 하는 것
- 추상화 : 불필요한 부분을 지우고 필요한 핵심만을 정의해 두는 것. 사물을 추상화 한 후 필요한 객체에서 상속 받아 필요에 맞게 기능을 재정의해 사용할 수 있도록 함
- 캡슐화 : 비슷한 속성과 메소드들을 하나의 클래스로 모은 것. 외부 접근으로부터 데이터를 지킴
- 다형성 : 같은 이름을 가지더라도 다른 기능을 구현할 수 있는 것. (오버로딩, 오버라이딩, 인터페이스)
- 장점
객체를 이용하여 (클래스) 코드 재사용이 용이하고 상속을 통한 확장이 가능
클래스 단위로 모듈화, 작게작게 나눌 수 있기 때문에 유지보수에도 좋고 분업에도 좋음
- 단점
객체가 많아질수록 용량이 커질 수 있고
객체를 올바르게 설계하는데 많은 노력과 시간이 필요
- 객체
클래스에 의해 메모리에 올라간 것!
(참조형타입-모든클래스는 참조형) 변수명 = new 연산자+생성자(인스턴스)
=> 객체를 참조하는 변수가 선언됨!
- 클래스
객체를 생성하기 위한 틀!! public class 클래스명 {}
- 메소드
클래스가 가진 기능 , 객체의 기능! 클래스 안에 선언됨
public 리턴타입 메소드명 (매개변수) { 구현 }
- 상속
자식클래스가 부모클래스의 기능과 상태를 물려받아, 그대로 사용하거나 필요한 부분만 수정할 수 있도록 하는 것
=> 오버라이딩
- 오버로딩 vs 오버라이딩
=>둘 다 하나의 이름 (기능)이 여러 역할 (구현)을 할 수 있도록 할 수 있게 해주어 객체지향의 다형성의 특징을 가지게 함.
오버로딩 : 같은 이름을 가지는 메소드를 여러개 가지는 것
이름은 같지만 매개변수의 개수, 타입 등은 다르게 함으로써 다른 기능으로 재정의 가능
메소드 이름 1개로 여러 기능을 재정의 가능하므로 가독성이 좋아짐
오버라이딩 : 하위 클래스에서 상위 클래스의 메소드를 재정의하여 사용하는 것
필요한 부분만 재수정하여 원하는 기능으로 구현하는 것
중복코드를 줄이고 기능 확장에 이점!
- 추상화클래스
abstract로 선언되거나 추상 메소드를 하나 이상 포함한 클래스!
추상메소드란 선언부만 있고 구현부가 없는 메소드이며 하위 클래스에게 메소드의 구현을 강제함.
하나만 상속 가능!
- 생성자
모든 클래스는 인스턴스화 될 때 생성자를 사용한다!
리턴타입이 없다 / 따로 생성자를 만들지 않으면 기본생성자가 컨파링시 자동으로 만들어짐.
그러나 생성자를 하나라도 만들었다면 기본생성자는 자동으로 만들어지지 않음.
=> 객체가 될때 필드를 초기화하는 역할
어떤 객체가 생성과 동시에 유효함을 보장하는 역할
=> 접근제한자 메소드이름 ([매개변수]) {
//실행 코드
}
- 확장성?
- 접근제어자
클래스, 인터페이스, 멤버변수, 함수 등의 접근을 제어하는 지시어.
접근 제어자를 사용함으로써 외부 객체의 무분별한 접근으로부터 내부 데이터를 보호 할수 있음 (데이터 무결성)
public : 전체공개, 모든 패키지, 클래스 접근 허용
protected : 같은 패키지, 모든 클래스 접근 허용 (다른 패키지인 경우 상속받은 경우 허용)
dafault : 같은 패키지 내 클래스만 접근허용
private : 같은 클래스 내 접근만 허용
=>사용하는 이유
객체지향 프로그래밍은 객체들간 상호작용을 코드로 표현 한 것인데 이때 객체들간의 관계에 따라서 접근 할 수 있는 것과 아닌 것, 권한을 구분할 필요성이 생김. 클래스 내부에 선언된 데이터의 부적절한 사용으로부터 보호하기 위해서 사용
- optional
- stream
- list
- set
- map
'☕JAVA > 🔎 공부 [JAVA]' 카테고리의 다른 글
[JAVA] 제네릭 Generic (0) | 2022.08.26 |
---|---|
[JAVA] Map, HashMap (0) | 2022.08.24 |
[JAVA] objects.equals() 정리 (0) | 2022.08.17 |
[JAVA] 예외처리(Exception) / Throws (0) | 2022.08.13 |
[JAVA] 내부클래스 (0) | 2022.08.12 |