객체지향적 프로그래밍

 

구조적 프로그래밍이란?

함수 기본이 되는 프로그래밍 방식(기법)    ---> 옛날 기법

 

객체 지향적 프로그래밍? 언어(자바,C# 등등) --객체 지향 프로그래밍 기법을 지향하는 언어를 의미한다.
- 객체 지향적 방식으로 개발(프로그래밍)
- 개발 하는 기법
- 객체 단위로 프로그래밍하는 기법(방식)
  

 

예) 컴퓨터                                       ==                              애플리케이션
경제 / 용도
메모리                                                                             Object -->유지보수가 용이하다.
전원장치                                                                          Object
메인보드                                                                          Object
CPU                                                                                Object
그래픽카드                                                                       Object(개발자 구현)
운영체제                                                                          Object(구매 라이브러리)
케이스
[SSD/HDD/]  2테라 확장                                                      Object - 확장
ODD

등등                                                                               생산성 좋다./분업화 가능/팀작업

 

 

(예를 들어 메모리가 고장 났다고 하자... 컴퓨터를 버릴 필요없다. 그냥 메모리를 수리하거나 교체하면된다.)
==>유지보수가 용이하다는 의미이다.
  

각각 조립 부품(객체,객체,Object)들을 구매
(조립하는 것이기 때문에 빨리 만들수 있다.)
(==> 생산성이 좋다는 의미이다.)
   
컴퓨터 조립 = Object + Object + Object + Object + Object +...
애플리케이션 = Object + Object + Object + Object + Object +...
(애플리케이션(프로그램 만드는 과정)도 컴퓨터 조립하듯이 부품들을 조립해서 하고 싶어졌다.

                                                                                           --->객체 지향 프로그래밍)
      

 

객체와 클래스

 

 

 - 객체(Object), 개체, 물건 ?

클래스를 가지고 실제로 존재하게 만드것. 사물(유형) 또는 개념(무형)의 객체
 

 - 클래스?

객체를 만들기 위한 설계도
 

 - 인스턴스화?

클래스를 가지고 객체를 만드는 과정
예) 집설계도면(클래스) ->건축(인스턴스화) ->대지 위에 집(객체)
                1                         2                           3
 "인스턴스화": 1번을 가지고 2번 과정을 통해 3번을 만들어 내는 이 모든 과정을 통틀러 의미한다.
 
 

 

OOP

 

 

OOP의 특징 == 클래스의 특징

                 == O+O+O+O+O+ (객체 지향적 프로그램이 어차피 객체들이 모여서 하는 프로그래밍이다.

 

객체를 만들려면 클래스로 만드는것이기 때문에 
OOP의 특징 == 클래스의 특징 == O+O+O+O+O+ 전부다 같다고 할 수 있다.)


1)상속성
2)***다형성***
3)추상화
4)캡슐화
5)은닉화

 

 

객체의 구성요소

 

 

객체의 구성 요소 = 기능(일) + 속성(특성)

 

ㄱ. 객체의 구성 요소를 "멤버"라고 부른다.
ㄴ. 속성(property) == 멤버변수 == 필드(field) == 특성(attribute) ==상태
ㄷ. 기능(function) == 멤버함수 == 메서드(method)

클래스?   집(객체)을 지으려고 설계도면(클래스)
건축설계사 - 설계도(=클래스)를 그림 = 객체를 만들기 위한 설계도를 클래스라고 한다.

 

 

 

클래스 설계하는 과정

 


1) 객체의 구성 요소 파악-> 목록 작성 (기능, 속성)


2) 클래스 선언
[접근지정자][기타제어자] class 클래스명 [extends 수퍼클래스] [implements 인터페이스...]{


[클래스의 멤버(기능+속성)를 선언]
기능(필드) 선언
속성(메서드) 선언

}

3) 객체 생성 - 테스트
4) 문제점 파악 - 유지,보수
5) 상용화
6)보완 문제점 발생 + 멤버(기능,속성) 추가(확장) - 버전 관리

 

 




 

자동차 예시


자동차(객체)를 만들기 위해 설계도 : 클래스
1)  객체의 구성 요소   파악-> 목록작성
기능 + 속성
스포츠카
0~100km 3초
전기
2도어
가로*세로
알루미늄(특수재질)
등등


2) 클래스 선언 Car 클래스 선언
3) 객체 생성 - 테스트 , 클래스 참조타입

 

 

 

객체 선언 및 생성 형식

 


new  클래스명( ); -->이게 지금 객체를 인스턴스로 생성하는 코딩
                      -->실제 자동차를 만듬

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

 


Car myCar = new Car();

 

new Car( );                              //인스턴스화를 의미하는코딩

                                            //이 코딩에 의해 스택영역에 생성된 객체가 힙 영역에 객체를 인스턴스 시킴
myCar 가 의미하는것 ==> 변수명/참조변수/[객체]

 

 

 

멤버 연산자 사용법

 


멤버 접근할 때 ,멤버연산자 사용한다.


객체명.필드
객체명.메서드( )

Scanner sc = new Scanner(System.in);
sc.nextInt( );

 


Car myCar = new Car();
myCar.name = "스포츠카-2";
myCar.speed = 200;

출력 기능(메서드)
객체명.메서드( )
myCar.dispCarInfo( );

 

 

 

 

**참고)

기본형- 8가지

byte short int float double
       char
boolean

참조형 - 클래스,[배열], 인터페이스
new 연산자에 의해서 실제 기억공간의 힙이라는 동적 영역에 할당되고 스택 영역에서 주소를 참조한다.
int[]m = new int[5];



[ ][ ][ ][ ][ ][ ] [시작주소]
시작주소 m 변수/참조변수/배열명


Random rnd = new Random();
new에 의해서 힙에 영역이 할당되고 rnd(객체)가 그 주소를 참고한다는 소리

클래스를 자료형으로 선언된 변수(rnd)를 참조 변수, 객체라고 한다.

복사했습니다!