07_Java 프로그램 객체지향 언어 클래스와 메서드

 Java 프로그램 객체지향 언어 클래스와 메서드

 

드디어 자바의 클래스와 메서드까지 왔습니다. 지금까지 따라 오시느라 고생이 많으셨습니다. 제가 꽃이라고 이유는 자바 프로그램이 개발 당시에 프로그래밍을 보통 절차 지향 언어로 만들었습니다. 하지만 자바는 객체지향 언어의 방향으로 개발을 하여 프로그래밍의 혁신을 일으켜서 지금까지도 인기 있는 언어가 있었습니다. 이러한 특징을 가장 설명 해주는 내용이 바로 오늘 내용입니다. 사실 지금은 거의 모든 언어가 사용하고 있는 방법이기 때문에 이러한 기초를 숙지 하시면 다른 언어를 사용할 때도 깊은 이해와 함께 사용이 가능 입니다.  코드를 확인하기 위해서는 githu(https://github.com/Chooyoungjun/javastudy/tree/main/06_class_method) 참조 주시기를 부탁 드리겠습니다.

설명 순서는 하기와 같이 설명 드리겠습니다. 필요한 부분이 있으시면 빠르게 찾으시면 되겠습니다.

1.      객체지향 언어란?

2.      클래스와 객체

3.      인스턴스 변수와 클래스 변수

4.      메서드

5.      메서드 오버로딩(Overloading)

6.      생성자(Constructor)

위와 같은 순서로 설명 드리도록 하겠습니다.

객체지향 언어란?

먼저 객체 지향 언어에 대해서 정의와 목적과 특징 순서대로 설명해 드리도록 하겠습니다.

1.     객체지향 언어의 정의

A.      객체지향 언어란, 현실에 존재하는 사물과 개념(class)들을 소프트웨어적으로 구현(instance)하고, 구현된 객체들이 상호작용하여 데이터를 처리하는 방식입니다.

B.       위의 설명을 이해 하려고 하면 객체의 의미에 대해서 알아야 합니다. 객체라는 것은 독립적으로 존재 있는 것이라고 보시면 되겠습니다. 예를 들어 고양이는 객체라고 있지만 고양이의 꼬리는 객체가 아니라고 있습니다. 그래서 객체 지향 언어란 위와 같은 객체를 사용하도록 지향 하는 언어라고 생각 하시면 되겠습니다. 반대의 의미로는 절차 지향 언어가 있습니다. 절차 지향이란 객체를 만들어서 필요한 부분을 따로 가져와서 사용하지 않고, 위에서 아래로 순서대로 실행 하는 언어라고 있습니다.



2.     객체지향 언어의 목적

A.      간단하게 말하면 코드의 재사용에 있습니다. 자세하게 설명 하면 클래스로 만들어 코드를 필요한 마다 인스턴스화를 통해서 객체로 만들어 필요한 만큼 사용 하는 것이 목적 입니다.

3.     객체지향 언어의 특징

이렇게 코드를 재사용 객체를 만들기 위해서 4가지(추상화, 상속, 캡슐화, 다형성) 개념을 이해 하시면 더욱 효율적으로 사용 있습니다.

A.      추상화

추상화란 간단하게 말하면 공통적인 모습을 모아 놓는 것이라고 있습니다. 예를 들어서 생각해보면 택시 버스 BMW 추상화를 한다면 자동차라고 추상적으로 설명 있습니다. 좀더 디테일 하게 들어가면 다르기는 하지만 공통적으로 자동차라고 설명해도 문제가 없습니다. 이와 같이 3가지 다른 물체의 공통점을 찾아서 정리 하는 행위? 추상화라고 있습니다.

B.       상속

상속이란 간단하게 말하면 부모의 것을 자식이 받아오는 것이라고 있습니다. 위의 자동차를 예로 들어 보면 택시, 버스 BMW 자동차를 받아서 정의 수가 있습니다. 이럴 객체가 자동차를 상속 받았다고 있습니다.

(위의 그림을 참조하면 자동차1, 2, 3 자동차(부모) 상속 받아서 새로운 자동차(자식) 되었음을 확인 있습니다.)

C.       캡슐화

캡슐화란 사용하는 사람은 기능만 알면 되고 캡슐 안에는 어떤 것이 있는지 필요없는 것을 말한다고 있습니다. 예를 들어 우리는 아플 감기가 걸리면 약국에 가서 감기 낫는 약을 달라고 합니다. 감기를 낫게 하는 이러이러한 성분을 달라고는 하지 않습니다. 이와 같이 목적에 필요한 것을 좀더 편하게 사용하도록 만들어 줍니다.


D.      다형성(polymorphism)

다형성이란 하나의 객체가 여러가지 타입을 가질 있는 것을 의미 합니다. 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조 있도록 하여 구현 하고 있습니다.



이렇게 간단하게 객체 지향언어에 대해서 설명 하였습니다. 앞으로 자세하게 다루도록 하겠습니다.

클래스와 객체(instance)

객체 지향언어를 깊게 이해 하기 위해서는 클래스와 객체에 대해서 깔끔하게 이해 하는 것이 중요합니다. 객체를 다른 말로 instance라고도 하는데 .. 따지고 보면 거의 맞는 말이지만 객체가 포괄적인 의미를 가지고 있다는 점이 조금 다른 입니다.

1.     클래스와 객체에 대해서 설명

A.      정의

클래스란? 객체를 정의해 놓은 또는 객체를 만들기 위한 설계도 라고 있다.

객체란? 사전적인 정의로 실제 존재하는 것이다. 자바 프로그램에서의 의미는 클래스를 통해서 만들어진 형태라고 있다.

인스턴스 화란? 클래스를 통해 객체를 만드는 과정이다.

B.       설계도와 건물 예시

클래스와 인스턴스화 그리고 객체(instance) 이해하기 위해서 설계도와 건물로 예시를 들겠습니다. 건물을 짓기 위해서는 설계도를 먼저 제작합니다. 그리고 설계도 대로 건물을 짓고 완성 시킵니다. 여기에서 설계도를 class라고 있고 건물을 짓는 행위를 인스턴스화 라고 있고, 건물을 객체라고 있습니다.


C.       클래스 구현 방법


위와 같은 구조를 가지고 있습니다. 클래스는 변수와 메서드로 구성 되어 있는 것을 있습니다.



위와 같이 ClassA 설계하면 위의 설계대로 변수 x 메서드 f1() 가진 객체를 만들 있습니다.

D.      클래스로 객체를 만드는 방법]

구조


위와 같이 객체를 생성하면 참조 변수를 통해서 객체의 변수와 메서드를 호출 있습니다. 여기에서 참조 변수가 나오는데 참조 변수와 일반 변수의 차이점에 대해서 확인하고 가시면 이해 하시는데 도움이 입니다.

E.       일반 변수 vs 참조 변수

참조 변수란? 주소를 저장하는 변수

일반 변수란? 값을 저장 하는 변수

그렇기 때문에 참조 변수는 값을 가지고 있지 않고 위치를 들고 있기 때문에 참조 변수 + 일반 변수 혹은 참조변수 + 메서드 이렇게 호출해서 사용을 하는 입니다.

F.       객체 값을 사용 하는 방법

[구조]

객체 변수: 참조변수.객체변수명

                         Ex) ClassA ca = new ClassA();

                            ca.x=10;

객체 메서드: 참조변수.객체메서드명

                         Ex) ClasA ca = new ClassA();

                            ca.f1();

변수의 사용: 변수에 저장, 변수의 값의 연산 출력

메서드의 사용: 메서드 호출


위의 실습에서 보면 ClassA ca라는 참조변수를 사용해서 객체를 만들어 줍니다. 그렇게 하고 ca.x 통해서 값을 저장하고 불러올 있는 것을 확인하였고, ca.f1() 통해서 메서드를 호출한 것을 확인하였습니다.


위의 실습을 통해서 만들어둔 클래스(설계도) 바탕으로 여러 참조 변수(건물) 만든 것을 확인 있습니다. 하지만 각자가 가지고 있는 값은 다른 것을 있습니다. 이와 같이 만들어둔 클래스를 바탕으로 많은 참조 변수들을 만들 있는 것을 확인 있습니다.

인스턴스 변수와 클래스 변수

1.     인스턴스 변수

A.      인스턴스 변수란

객체마다 갖는 고유한 변수 참조 변수 별로 다르게 구분지어서 가질 있는 변수라고 생각하시면 되겠습니다.

B.       특징

인스턴스를 생성할 만들어 지며, 각각의 인스턴스 마다 자신의 값을 갖고 있습니다.

 인스턴스마다 다른 값을 가져야 생성

인스턴스 생성(new 클래스명();) 메모리에 생성

C.       인스턴스 변수 생성 사용 방법


2.     클래스 변수

A.      클래스 변수란..

모든 객체가 동일한 값을 갖는 변수. , 모든 참조변수의 클래스 변수는 동일한 값을 가집니다.

B.       클래스 변수 특징

모든 인스턴스 참조변수가 같은 저장 공간을 공유

클래스가 처음 메모리에 로딩 생성

인스턴스 참조변수 없이 사용 가능. , 클래스명만 활용하여 사용 가능

C.       클래스 변수 생성 사용 방법



위에서 사용구조에서 중요하게 확인해야 부분은 사용하는 방법이 2가지라는 입니다. 첫번째는 클래스명을 활용하여 사용 두변재는 기존 instance변수 사용법과 같이 사용 있습니다. 저렇게 변수의 값을 바꾸게 되면 클래스를 참조 하고 있는 객체 모두의 값을 변환 시킨다는 것을 알고 계셔야 합니다.

3.     실습 진행


위의 코드에서 보듯이 static으로 지정한 클래스 변수와 인스턴스 변수의 값을 변경하였 어떻게 영향을 주는지 보여주고 있습니다. 클래스 변수를 변경하면 클래스 변수 모든 객체의 값이 변경 되지만 instance변수를 변경하면 해당 참조변수의 변수 값만 변경 되는ㄴ 것을 확인 있습니다.

메서드

1.     메서드란?

A.      정의

                               i.           여러명령들의 나열 묶음

                              ii.           입력 값을 받아서 내부에서 처리 결과를 출력 또는 반환 하는 역할


B.       특징

                               i.           메서드는 몀버 함수(member function)라고도 불리며, 클래스 내부에서 생성

2.      메서드의 사용목적

A.      여러 명령들을 하나의 이름을 호출(사용)함으로써, 번에 명령을 내리고자 사용하는 것이 바로 메서드다.


위의 Snapshot 같이 필요한 명령들을 묶어서 메소드명(계산 혹은 슈퍼카파원온) 활용하여 준비된 명령들을 실행 있습니다. 이렇게 메서드를 통해서 반복적으로 사용되는 명령들을 묶어서 편하게 사용하는 것이 메서드의 사용 목적 입니다.

3.     메서드 사용방법

A.      일반 메서드의 구조


위의 Snapshot 같이 먼저 반환 타입을 정의하고 메서드명 그리고 실행 시킬 명령 마지막으로 반환 값을 지정 하면 되겠습니다. 이런 메서드를 호출 때에는 메서드(); 통해서 호출하여 사용하면 명령1 명령2 실행이되고 값을 리턴하도록 실행이 되겠습니다. return하는 값에 대한 정의는 return이라는 명령어 뒤에 정의 하시면 되겠습니다.

B.       매개변수를 활용한 메서드의 구조

일반적인 메서드의 구조 외에 매개변수를 활용한 메서드가 있습니다. 보통 함수를 정의 인풋 값에 추가적인 연산을 처리 해서 아웃풋 값을 만든다라고 정의를 합니다. 그래서 자바 프로그램에서도 인풋값을 활용하여 메서드를 만들 있도록 방법을 만들어 두었습니다.


위의 SnapShot 같이 메서드를 정의 메서드 옆에 변수를 지정 하면 input값을 받을 있도록 설정 있게 됩니다.

그리고 호출할 때도 메서드 괄호 안에 지정한 input값을 넣어주면 활용할 있습니다.


C.       반환 타입 정리

일반적인 반환 타입 앞의 포스트에서 자료형에 대해서 정리 하였습니다. 반환타입에서 반환이 있을 경우 String, float, int 자료형을 지정하여 반환 타입을 지정 수가 있습니다. 그리고 반환을 원하는 값을 return 뒤에 값을 넣으면 값이 반환이 됩니다. 그런데 만약 반환 값이 없다면 “void”라는 키워드를 입력 합니다. 그래서 저희가 지금가지 실습 했었던 main함수에서는 반환 값이 없었기 때문에 void 적었던 입니다.


Void  반환 타입이 없다는 의미 입니다!!!!!!

 

4.     실습 코드


위의 코드와 같이 매개변수를 활용한 메서드와 사용하지 않은 메서드를 만들어 보았습니다. 그리고 반환이 있는 경우와 없는 경우에 대해서 실습해 보았습니다. 위와 같이 반환이 없을 경우에는 void 쓰고 반환이 있으면 반환 타입을 정하고 return 활용하여 반환 변수를 입력하시면 됩겠습니다.

메서드 오버로딩(Overloading)

위에서 배운 메서드는 3가지를 기준으로 서로 다르다고 정의를 하고 있습니다.

매서드명: 매서드 명이 다르다면 당연히 다르다는 것을 있습니다.

매개변수 개수: 매서드의 개수가 다르면 다른 case이기 때문에 다르다고 인식을 합니다.

매개변수 타입: 변수 타입조차 명확하게 정의를 주어야 합니다.

1.     정의

오버로딩은 매개 변수의 개수와 타입은 다르지만 이름이 같은 메서드를 여러 정의 하는

하나의 메서드 가지고 다양한 경우(매개변수 개수와 타입이 다른 경우) 대한 문제 해결하는 기법

2.     매개 변수 오버로딩 방법


위의 snapshor 같이 변수명을 통일시키고 타입이 다를 경우(int, double)정의 그리고 매개변수의 개수가 다를 경우(2à3) 정리해 주면 오버로딩이 사용 되겠습니다. 이렇게 되어서 우리가 사용하고 있는 많은 함수들이 오류 없이 많은 경우에 대해서 실행이 가능하게 되는 입니다.

3.     오버로딩 실습

위의 코드와 같이 다양한 경우에 대해서 오버로딩을 해보았습니다. 심지어 숫자 뿐만 아니라 문자열도 정의 있다는 점을 확인하시면 좋을 같습니다.

생성자(Constructor)

지금까지는 변수 값을 초기화 경우에 우리는 참조변수를 활용하여 값을 초기화 하였습니다. 하지만 클래서에서 instance 만들 실행 하는 생성자를 활용하여 이러한 역할을 하는 기능에 대해서 알아보도록 하겠습니다.

1.      생성자란?

객체 생성시 호출되어, 변수들을 초기화 하거나 생성시 필요한 명령을 실행 하는 메서드

[특징]

-      클래스와 이름이 같음

-      리턴 타입, 반환 값이 없음

2.      기본 생성자

[구조]


위의 SnapShot 같은 구조로 구현하고 호출 합니다.

[실습 코드]



위의 실습 코드와 같이 new CellPhone() 실행 객체가 생성이 실행이 되는 것을 확인 수가 있습니다. 이렇게 기본 생성자에 대해서 알아 보았습니다.

3.      매개변수 생성자

앞에서 배운 기본 생성자로 객체가 생성 값을 입력 받아서 할당 있는 방법이 없습니다. 이번에 배우는 것은 객체를 생성 고정된 값이 아닌 사용자가 입력 하고 싶은 값을 넣을 있는 생성자에 대해서 알아 보도록 하겠습니다.

[구조]


위와 같이 기본생성자의 구현부 구조에서 괄호 사이에 변수를 정의해서 넣으면 매개변수를 가진 기본 생성자가 만들어 집니다. 역시 호출할 괄호사이에 변수 타입에 맞는 값을 넣어주면 값을 매개변수로 인식하고 객체를 생성 합니다.

[실습코드]



위의 Snapshot처럼 기본생성자와 매개변수 생성자를 활용한 객체 생성을 진행하면서 위에서 배웠던 생성자에 대해서 익숙해 지고 이해 하실 있을 이라고 믿습니다. 실습을 꾸준히 실행해 보시기를 바라겠습니다.

이렇게해서 이번 포스트에서 클래스와 메스드에 대해서 간단하게 정리해 보았습니다.

앞으로 자바의 객체지향 언어를 활용하기 위해서는 깊게 알아 필요가 있습니다. 그래서 클래스에 대해서 살표보도록 하겠습니다.

감사합니다. 글을 읽어 주셔서..

Comments