여니의 프로그래밍 study/JavaScript

4-1 객체 (Javascript)

여니's 2021. 3. 10. 23:51

일반적으로 우리가 눈으로 볼 수 있는 모든 것을 객체라고 한다.

프로그래밍에서의 객체는 무슨 의미일까?

프로그램을 구성하는 단위 중 하나를 의미한다.

여러 객체가 모여 하나의 프로그램이 완성되는 것!

 

객체 

: 소프트웨어 세계에 구현할 대상

 

객체의 사전적인 의미

: 실제로 존재하는 것

ex) 책상, 컴퓨터 ...

 

이러한 유형적인 것뿐만 아니라, 

무형적인 것도 객체로 간주한다.

ex) 개념, 논리, 수학공식 ...

 

객체의 특징 >>

객체는 고유의 이름이 존재한다.

객체는 특징과 행동이 있다.

객체의 수는 무제한으로 늘어날 수 있다.

객체는 속성과 동작으로 구성되어 있다.

 

예를 들면,

tv의 속성은 크기, 길이, 높이, 볼륨, 채널과 같은 것이 있으며,

tv의 동작은 켜기, 끄기, 볼륨 높이기 등이 있다.

속성->변수

동작->함수(메서드)

 


클래스

 

: 소프트웨어 세계를 구현하기 위한 설계도

 

클래스를 통해 객체를 생성하는 이유는?

보통 제품을 만들 때 설계도를 토대로 만들게 된다.

설계도가 있으면, 제품을 어떤식으로 만들어야할지 매번 고민할 필요가 없어진다.

이로 인해 시간이 절약되고,

제품을 만드는 일이 쉬워진다.

이와 마찬가지로 클래스를 잘 만들어놓기만 하면,

매번 객체를 생성할 때마다 어떻게 객체를 만들어야할 지

고민할 필요가 사라진다.


인스턴스

: 이 설계도에 따라 소프트웨어 세계에 구현된 실체

객체가 메모리에 할당되어 실제 사용될 때 > 인스턴스

 


클래스의 인스턴스화

: 클래스로부터 객체를 만드는 과정

 

 

클래스의 인스턴스

: 클래스로부터 만들어진 객체

 

 

객체와 인스턴스는 같은 말일까?

객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고,

인스턴스는 어떤 클래스로부터 만들어진 것인지 강조하는 보다 구체적인 의미다.

예를 들면,

tv는 객체고

tv클래스로부터 만들어진 객체를 tv클래스의 인스턴스라고 한다.

 

객체와 인스턴스는 같은 의미이지만,

위처럼 문맥에 따라 구별하여 사용하는 것이 좋다.

 

 

밀가루와 팥을 붕어빵을 찍어내는 기계(클래스)에 넣고,

붕어빵(객체)을 만든다.

 


객체지향 프로그램(OOP)

Object Oriented Programming

 

> > 프로그래밍에서 필요한 데이터를 추상화시켜서

상태와 행위를 가진 객체를 만들고, 

코드 간에 서로 관계를 맺어 줌으로써 보다

유기적으로 프로그램을 구성하는 방법

 


추상화!?

추상

: 여러가지 사물이나 개념에서

공통되는 특성이나 속성 따위를 추출하여 파악하는 작용

즉, 구체적인 정보를 숨기고 꼭 필요한 핵심만 나타내는 것

EX) 책의 제목이나, 영화의 줄거리, 지도

 

복잡한 것들을 목적에 맞게 단순화하는 것!

단순하고 간결하면서도 핵심을 담고 있어야 한다.

 

프로그래밍에서의 추상화?

프로그래밍은 추상화의 연속이다.

공통의 속성이나 기능을 묶어 이름을 붙이는 것!

예를 들어보면,

사과, 배, 오렌지를 각각 객체라고 부르고

이 객체들을 과일이라고 묶는 것을 추상화라고 한다.


절차지향은 순차적으로 실행하는 것에 초점이 맞춰져있고,

객체지향은 객체간의 관계와 조직에 초점을 두고 있다.

(객체지향도 절차지향과 동일한 순서로 실행된다)

 

절차지향은 데이터를 중심으로 함수를 구현한다.

객체지향은 기능을 중심으로 메서드를 구현한다.

 

절차지향은 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계한다.

객체지향은 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 실행순서와 흐름을 짠다.

 

김치볶음밥을 만든다고 가정해보자.

 

절차지향과 객체지향은 반대개념이 아님!

절차지향을 비객체지향이라고 하면 더 좋았을텐데,, ㅠㅠ


객체지향의 4대 특성

캡슐화 / 상속 / 추상화 / 다형성

 

1. 캡슐화 

: 외부에서는 생성한 객체가 어떤 메서드와 필드로 일을 수행하는지 몰라도 된다..?

왜 몰라도 돼..?

-> 약간 좀,, 헷갈리게 써져있어서 다시 풀어보면!

 

캡슐화를 하게 되면 불필요한 정보를 감출 수 있게 된다.

리모컨을 사용할 때 우리가 내부 회로(private으로 정의된 속성)를 알 필요는 없다.

리모컨을 사용하는 방법(조작기능) ,

즉 public으로 정의된 속성만 알면 된다는 뜻!

 

다 몰라도 된다는 말은 절대 아님!

 

객체의 속성과 행위를 하나의 클래스라는 캡슐에 묶는 것을 의미한다.

외부에서 객체의 내부데이터로 직접 접근하지 못하게 통제하여 정보를 은닉한다.

은닉된 정보로의 접근은 접근지정자를 통해서만 조작할 수 있다.

 

- 정보 은닉

: 코드 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해서만

접근이 가능하도록 하는 코드 보안 기술

 

>> 정보 은닉 목적

(1) 객체에 포함된 정보의 손상과 오용을 방지

(2) 데이터 변경 시에도 다른 객체에 영향 없이 독립성 유지

(3) 객체를 부품화해서 이식성 및 호환성을 확보

 

 

2. 상속 (재사용 + 확장)

: 자식클래스는 부모클래스를 물려받으며 확장이 가능하다 (재사용)

 

3. 추상화

: 공통된 속성/ 기능을 묶어 이름을 붙인다 (단순화 및 객체모델링)

 

4. 다형성 (사용편의)

부모 클래스와 자식클래스가 동일한 요청을 다르게 처리할 수 있다.

 


객체지향의 근본이자 핵심

유연성


객체 지향의 가장 큰 장점은?

코드의 재사용성이 높고,

유지보수가 용이하다는 점!


객체 생성 방법

클래스명 변수명;

변수명 = new 클래스명();

 

Car apple_car;

apple_car=new Car();