처음 객체에 대해 배웠을 때
'객체'에 대해 설명하기 위해 노력하는 글들을 수도없이 읽었고,
나도 그 글을 이해하고 내 입으로 설명해보기 위해 몇일간 끙끙 앓았던 기억이 있다...🤣
수도없이 '객체'를 쓰고 있지만 아직도 그게 뭐야? 라고 물어보면 선뜻 대답하기가 쉽지 않다.
뭔지도 모르고 쓰지도 못했던 그때와는 달리 다행(?)히도 지금은 뭔진 정확히 몰라도 아주 유용히 쓰고 있으나
머리속에는 난해한 무언가만 남아있는 찝찝함😂😥
객체 지향 프로그래밍이 뭔지 간단명료하게 정리해보자!🕵🏻♀️
객체지향프로그래밍(OOP : Object Oriented Programming) 이전에는?
객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면, 중심이 컴퓨터에 있었다. 프로그램이 어떤 일을 하고나서, 그 다음엔 어떤 일을 하고, 또 그 다음엔 뭘 하라는 식으로 컴퓨터가 해야 할 일을 일일히 알려주기에 바빴다. 즉, 컴퓨터가 사고하는대로 프로그래밍을 하는 것이다.
하지만 객체지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있다.
객체가 뭔데?
객체(object)란 실생활에서 우리가 인식할 수 있는 사물이며,
객체를 이용하여 프로그래밍 한다는 것은 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말한다.
현실세계에 존재하는 사물들을 옮기기 위해서는 필요한 정보들을 뽑아와야 하는데, 이것을 추상화라한다.
객체 어떻게 생겼는데?
1. 먼저 객체를 선언하기 위해서는 클래스를 작성해야한다.
실생활에 존재하는 '사람'을 추상화하여 클래스로 옮겨보자.
'사람'를 구성하는 특징들은 프로퍼티(속성, property)로 뽑아낼 수 있고
사람이 하는 행동들은 메소드(행위, method)로 표현할 수 있다.
2. '사람'클래스를 이용하여 '나'를 표현해보자.
그리고 '나'도 사람에 속하기 때문에 '나'를 '사람'이라는 객체를 이용해 표현해보자.
그리고 이렇게해서 표현(추상화)된 컴퓨터 메모리상의 '나'는 이제 인스턴스(객체)라고 불린다.
즉, '나'는 '사람'의 인스턴스이다.
그래서 장점은 ?
여기서 '사람'에 속하는 친구A, 친구B도 비슷한 형태로 표현할 수 있다는 것을 눈치챌 수 있다.
여기서 객체의 장점인 '재사용성'이 등장하는 것이다.
비슷한 코드를 다시 작성하지 않아도 '사람'이라는 클래스로 객체를 표현하면 손쉽게 프로그래밍을 할 수 있는 것!
여기서부터 생산성이 올라가고 유지보수가 쉬워지고,,, 등등의 장점이 나오는 것이다!!
<정리>
1. 자주 사용되는 로직을 만들어두면 계속해서 재사용할 수 있으며 그 신뢰성을 확보 할 수 있다.
2. 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이하다.
3. 데이터모델링을 할 때 객체와 매핑하는 것이 수월하기 때문에 요구사항을 명확하게 파악하여 프로그래밍 할 수 있다.
코드로는 ?
/* 클래스 */
public class Person {
//각 자료형에 맞게 각 변수의 이름을 '선언'한다.
//private은 '캡슐화'를 위한 '접근제한'작업이다.
private String name;
private int height;
private int age;
//클래스도 명시
...
}
/* 객체와 인스턴스 */
public class Main {
public static void main(String[] args) {
Person me, you, friend; // '객체'
// 인스턴스화
// 이렇게 되면 메모리에 '할당'된다.
me = new Person(); // me는 Person 클래스의 '인스턴스'
you = new Person(); // you는 Person 클래스의 '인스턴스'
friend = new Person(); // friend는 Person 클래스의 '인스턴스'
}
}
'Dev Note > else' 카테고리의 다른 글
Protocol Buffers 로 Java - NodeJs 통신시키기 (3) | 2024.02.04 |
---|---|
효과적인 코드 리뷰를 향한 여정 (ft. aws codecommit, space) (0) | 2023.12.24 |
intellij 에서 git 으로 인식되지 않는 브랜치 해결 ( /.idea 폴더의 역할) (0) | 2022.08.08 |
컴퓨터에서 생성하는 난수는 진짜 난수가 아니다? (0) | 2020.10.22 |
정적 바인딩(Static binding) vs 동적 바인딩(Dynamic binding) (2) | 2020.10.07 |