객체 지향 프로그래밍(Object-Oriented Programming, OOP)
Intro. 프로그래밍 패러다임을 조곰 알고가자
객체 지향 프로그래밍(Object-Oriented Programming, OOP)과 절차 지향 프로그래밍(Procedural Programming)은 두 가지 다른 프로그래밍 패러다임입니다.
절차 지향 프로그래밍
- 순차적인 프로그래밍 접근 방식
- 프로그램이 일련의 절차 또는 단계에 따라 실행
- 이러한 절차는 종종 함수 또는 프로시저로 묶임
- 절차 지향 프로그래밍의 주요 목표는 프로그램의 흐름을 제어
- Ex. C 언어
객체 지향 프로그래밍
- 프로그램을 여러 개의 독립적인 객체로 구성하는 프로그래밍 접근 방식
- 객체는 데이터와 이 데이터를 조작하는 메소드를 포함
- 객체 지향 프로그래밍의 주요 목표는 프로그램 내에서 객체 간의 상호작용을 통해 문제를 해결하는 것
- 객체 지향 프로그래밍에서는 상속, 다형성, 캡슐화와 같은 특징을 활용하여 프로그램의 재사용성, 유지보수성 및 확장성을 향상시킵니다.
- Ex. ava, C++, C#, Python, JavaScript 등
객체 지향 프로그래밍의 구성 요소
객체 지향 언어에서 객체, 메소드, 함수는 다음과 같은 의미를 가지고 있습니다.
- 객체(Object)
- 객체 지향 프로그래밍에서 기본 단위로
- 현실 세계의 사물이나 개념을 프로그램 내에서 모델링한 것입니다
- 객체는 상태와 행동을 갖습니다.
- 상태는 객체의 속성(예: 색깔, 크기 등)을 나타내며, 행동은 객체의 메소드로 표현됩니다.
- 객체는 독립적이며, 다른 객체와 상호작용할 수 있습니다.
- 메소드(멤버 함수)(Method)
- 객체의 행동을 나타내는 함수
- 객체의 속성을 조작하거나 다른 객체와 상호작용하는 데 사용됩니다.
- 메소드는 객체에 속하며, 일반적으로 객체의 속성에 대한 접근 제어를 제공합니다.
- 메소드는 객체의 인스턴스에 대해 호출됩니다
- 함수(Function)
- 하나의 기능을 수행하는 일련의 코드
- 호출 된 함수는 기능이 끝나면 제어가 반환됩니다
- 함수는 인자를 받아 결과를 반환하며, 코드의 재사용성을 높이고 가독성을 개선하는 데 도움이 됩니다.
메소드와 함수는 뭐가 다른가요?
함수는 독립적인 코드 블록으로 작동합니다.
메소드는 객체에 속하고 객체의 행동을 정의하며 객체에 속한 함수라 볼 수 있습니다.
클래스 ⇒ 추상화
public class UserInfo{
// 멤버 변수
String userId;
int userPassword;
// 디폴트 생성자
public UserInfo(){}//
// 정의된 생성자
public UserInfo(String userId){
this.userId = userId;
}
// 함수+접근 제어
public void getUserPassword(String userId){
return userPassword
}
}
생성자
객체가 생성 될 때 변수나 상수를 초기화하거나 다른 초기화 기능을 호출하는 메소드입니다
- 클래스에는 반드시 적어도 하나 이상의 생성자가 존재합니다
- 생산자는 반환 값이 없다
- 클래스의 이름과 동일
- 일반 함수처럼이 아니라, new와 함께 호출
기본 생성자
- 만약 클래스에 생성자가 하나도 없다면, 컴파일러가 기본 생성자를 만들어줍니다
- 매개 변수가 없고, 구현부가 없습니다
접근 제어자
- 클래스 외부에서 클래스의 멤버들을 사용할 수 있는지 여부를 지정하는 키워드
- private
- 같은 클래스 내부에서만 접근 가능
- default
- 같은 패키니 내부에서만 접근 가능
- protected
- 같은 패키지나 상속 관계의 클래스에서만 접근 가능
- public
- 클래스의 외부 어디서나 접근 할 수 있음
객체 생성
public class UserInfoTest{
public static void main(String[] args ){
UserInfo userInfo = new UserInfo("rhqjatn");
}
}
클래스는 객체의 속성을 정의하고, 기능을 구현해 놓은 상태입니다
- 실제 클래스 기반으로 생성된 객체(인스턴스) 각각 다른 멤버 변수 값을 가지게 됩니다
- new 키워드를 사용하여 인스턴스를 생성합니다
- 생성 된 객체는 동적 메모리에 할당 됩니다
This
this는 객체 자신 즉 자신의 인스턴스 메모리를 가리킵니다.
this를 사용하는 가장 큰 이유는 명확히 자신을 구분하기 위해서입니다
- 생성자에서 또 다른 생성자 호출을 할 때 구분 하기 위함
- 자기 자신 객체를 반환 할 때도 사용합니다( [객체].this )
Static : 여러 인스턴스의 공통 인수
static은 여러 객체에서 동일한 변수를 접근해야 할 때 사용합니다
- static은 프로그램이 프로세스가 되어 메모리에 실행 되는 순간 생깁니다
- 객체 인스턴스가 아닌, 프로세스가 끝나고 메모리에서 내려올 때 사라집니다
- 주로 싱글톤 패턴(한 클래스의 인스턴스를 1개로 유지하는 전략)에서 많이 사용됩니다
객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 특징
정보 은닉
public void setMonth(int month){
if(month < 1 || month >12){
isValid = false;
}
else{
this.month = month;
}
}
- 변수가 private 일 때 각 변수에 대한 제한을 public 메서드에서 제어 할 수 있다
- 외부에 최소한 필요한 정보만을 공개하여, 객체의 오류를 방지 및 효율적인 객체 관리를 합니다
public class Birth{
private int day;
private int month;
private int year;
public int getDay(){
return day;
}
public void setDay(int day){
this.day = day;
}
}
정보 은닉에 대한 아이디어는 곳곳에 존재합니다.
getter와 setter도 그 예시입니다.
위의 메소드들을 통해 객체의 데이터의 잘못된 수정 입력을 로직으로 방어 할 수 있습니다.
위의 코드에서 개발자는 in/out에 대한 값을 신뢰 할 수 있게 됩니다
캡슐화
- 꼭 필요한 정보와 기능만 외부에 오픈
- 외부에 통합된 인터페이스만 제공하여 일관된 기능을 구현
객체 지향 설계에서 캡슐화 전략은 다양하고 중요합니다.
어디까지 보여 줄 것인가? 어디까지 정보를 제공함으로 효율적인 프로그램을 개발할 수 있을지 고민 할 필요가 있습니다
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'DEV > Backend' 카테고리의 다른 글
직렬화 (serialization) - 🐥 카카오 테크 캠퍼스 (0) | 2023.05.03 |
---|---|
java error release version 17 not supported (0) | 2023.04.23 |
내가 본 멋진 코드 txProcess 분석하기 (0) | 2023.04.09 |
PostgreSQL 터미널에서 접속하는 방법 (0) | 2023.04.05 |
PostGreSQL 모든 권한 부여하는 방법 (0) | 2023.04.02 |