본문 바로가기
JAVA-Spring/추상화 | 다형성

JAVA 자바 [ 객체 지향 프로그래밍 ] 제 1장 추상화, Class

by Super Santj 2019. 7. 12.

JAVA 자바의 문법

객체지향 프로그램을 지원하는것은 모두 4가지 구성요소로 지원을 하게된다. 4가지 구성요소는 아래와같다.

추상화, 캡슐화, 다형성, (배열), 상속성

이번 게시글의 메인 포인트는 추상화이다. 위 4가지 구성요소를 모두 말하기엔 너무 방대한 양이기에 각 요소별로 나눠서 풀이를 하는것이 좋을것으로 생각이 되어, 우선 순서에 맞게 추상화라는 요소 먼저 이야기 해보자.

자바스트립트는 객체지향프로그램언어가 아니다. 4대 구성요소를 지원하지 않는다는 이유가 가장크고 이를 다른 말로 객체 중심의 언어 이다 라고 말하곤한다. 하지만 최근 들어서 타입스크립트(TypeScript)라는 새로운 방식이 나와 아니기도하고 맞기도한 언어로 변화가 이루어지곤 한다.

그렇다면 JAVA 자바에서 추상화란 무엇일까?

우선 추상화는 클래스와 객체의 요소를 갖고있고 반대의 뜻으로는 상세화(구체화)라는 말이 있다. 직설적으로 이야기 하자면, 추상화는 현실세계에서 존재하는 모든 사물의 공통점과 공통 기능을 유추해서 클래스를 만들어내는 일련의 과정이다. 라고 이야기 할수 있다.

헌데 클래스를 뭐하러 만드는가? (추상화)

기본 자료형 (8가지)을 사용하는 이유는 데이터를 저장하려는 목적이 크다. 예를들어 문자 / 숫자 /  논리적인값 등등

하지만 기능이 있는 데이터는 저장을 할수가 없다. 움직이는 대상자를 저장을 할수가 없는것이다. 그리하여 우리는 추상화, 클래스화를 통해 사람의 정보, 컴퓨터의 정보(부품 구성 -> 기능), 자동차의 정보(기능) 등을 클래스를 작성하여 저장하는 것이다. 그렇다고 하여 무분별하게 모두 저장한다는것이아닌, 공통점이 있는 객체들만 모아 저장을 하는것이 정확한 클래스화(추상화) 인것이다. 게다가 표준 양식이 있고 표준양식은 공통기능, 공통점이 있고 설계도가 있어야만이 제대로된 클래스를 만들었다라고 볼수 있다.

그렇다면 클래스의 종류는 무엇이있을까?

    1 ) main () 을 가진 클래스

실행목적으로 화면에 결과를 보여줄 목적이다.

    2 ) main () 이 없는 클래스

자동차로 비유한 동작이 없는 초기값 설정만 저장한 클래스 데이터

저장목적으로 보통 설계목적으로 생성되는 클래스 이다.

이렇게 초기값 설정만 저장한 클래스가 있는 반면에 기능이 들어간, 메소드(함수)가 들어간 클래스도 있다.

예를들어 시동걸기 처럼 자주 사용되는 반복적인 기능, 속도를 증가 시키는 기능, 속도를 감속 시키는 기능 등이 메소드를 만들어야하는 내용들이다. 이러한 기능들을 저장할수있는 곳은 메소드 이다. 회사의 직원과도 같은 느낌으로 받아드리면 된다.

메소드는

    1 ) 일반 메소드 -> 객체가 생성되야 호출이 가능하다.

    2 ) 정적 메소드 -> 객체 생성없이 호출이 가능하다.

위 두가지로 나뉘게 되는데 이번 게시글에서는 1 ) 일반 메소드에 대해 알아보자.

Caller Method (업무 지시) { main( ) 메인 메소드가 대표적인 예 이다. } -------->

Work Method (일반 직원, 매개변수, 결과를 보고하는 메소드로 return value 반환값이 존재한다.) {  }

** 중요 **

메소드의 종류 _

    1 ) 매개변수 X 반환값 X     => 단순하고, 반복적인 일

    2 ) 매개변수 O 반환값 X    => 데이터 입력후 저장, 계산, 출력

    3 ) 매개변수 O 반환값 O    => 전통적으로 계산하는 메소드, 그리고 단위가 크거나 상위 메소드의 확인이 필요한경우 변환값이 들어가게된다. 특히 웹 프로그래밍에서는 거의 해당 메소드를 많이 사용하게된다.

** 중요 **

메소드의 적용예 1 형식

1. 시동을 켜는 기본 메소드를 생성해 보자.

2. 차의 주차기능이 들어있는 메소드를 생성해보자.

3. 차량의 속도를 증가 또는 감소 시키는 메소드를 생성해보자.

4. 차의 정보를 출력하는 메소드를 생성해 보자.

 

그 다음 인스턴스화에대해 이야기를 해보자.

인스턴스화는 설계도에 해당되는 클래스를 가지고 멤버 변수들이 저장할 수 있는 공간을 만드는것이다. (Car 자동차) = 객체 생성. 즉 인스턴스화는 객체 생성이다.

객체의 참고 자료.

객체 생성은 벌집 처럼 다양한 벌들이 들어갈수있는, 즉 데이터를 저장할 공간을 만들어 내는것이다. 

형식은 아래와 같다.

설계도이름 (=클래스 이름) 객체명(=변수)=new 클래스명();

일반적으로 생각하였을때 Car morning 으로 생성하게된다면 기억공간이 생성되질않는다.

우리는 기억공간이 있는 객체를 생성하여야 하기때문에 형식에 맞춰 인스턴스화를 시킬경우 기억공간이 생기면서 아래와 같은 구문을 호출하여 데이터를 입력, 생성이 가능하다.

morning이라는 car의 모든 데이터를 인스턴스화를 시킨 Class를 불러와 이에 상응하는 변수를 따로 저장 입력을 할수가 있다.

만약 메소드 없이 모닝이라는 차를 만들게 된다면?..

이렇게 단순 반복적인 일을 통해 우리는 미친듯이 열일해야한다. 프로그래밍은 중복의 제거와 단순 반복적인일을 단순한 코드로 실행하는 목적이 큰데, 인스턴스화 또는 클래스화가 없다면, 우리는 굉장히 힘들게 작업을 했을것이다.

아래는 실행 결과다.

Car라는 설계도를 morning이라는 이름으로 인스턴스화시켜 morning 이라는 모델을 출력한 결과

Car라는 클래스(설계도)에 각 사항들의 데이터 타입을 정의해 놓았고, CarHandling이라는 클래스에서 morning 이라는 변수로 인스턴스화를 시켰다. 인스턴스화 작업을 통해 CarHandling 클래스에서 Car라는 설계도에 기재되어있는 데이터들을 모두 morning 이라는 변수안에 넣어놓은 상태이고, morning.항목 = 입력값을 통해 morning이라는 차량을 정의 할수있게 되었다. Car라는 클래스(설계도면)을 통해 morning이라는 모델을 생성하는 작업은 java 파일 하나에 그냥 sysout으로 일일이 작업해서 넣을수있지만 이러한작업은 java파일 자체의 용량이 너무 커지고, 다량의 모닝 또는 쏘나타 그외 차량을 생성해낼때 중복 된 값이 너무나도 많을것이기에 미리 설계도면인 클래스를 인스턴스화 시켜 불러온 상황인것이다.

폭발적인 생산효과라는것을 알 수 있다.

댓글