준코딩

객제지향언어 본문

프로그래밍/자바

객제지향언어

Ljunhyeob - App Dev 2018. 11. 26. 13:27

객체지향이론의 기본 개념은 '실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다. ' 라는 것이다.


객체지향언어 특징

1.코드의 재사용성이 높다

2.코드의 관리가 용이하다.

3.신뢰성이 높은 프로그래밍을 가능하게 한다.



클래스와 객체


클래스의 정의 - 클래스란 객체를 정의해 놓은 것이다.

클래스의 용도 - 클래스는 객체를 생성하는데 사용된다.


객체의 정의 - 실제로 존재하는 것. 사물 또는 개념

객체의 용도 - 객체가 가지고 있는 기능과 속성에 따라 다름


유형의 객체 - 책상, 의자, 자동차, TV와 같은 사물

무형의 객체 - 수학공식, 프로그램 에러와 같은 논리나 개념.



클래스와 객체의 예


클래스                객체


제품설계도          제품

TV설계도              TV

붕어빵 기계         붕어빵



객체와 인스턴스


클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스

 라고 한다.



객체의 구성요소 - 속성과 기능


객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로는 객체는 다수의 속성과 다수의 기능을 갖는다.

-> 객체는 속성과 기능의 집합 이라고 할 수 있다.


속성 -> 멤버변수

기능 -> 메서드


TV의 속성과 기능

속성: 크기,길이,높이,색상,볼륨,채널 등

기능: 켜기,끄기,볼륨 높이기,볼륨 낮추기,채널 변경 등


객체지향 프로그래밍에서는 속성과 기능을 각각 변수와 함수로 표현한다.



class Tv{

//Tv의 속성(멤버변수)

String color;  //색상

boolean power;  //전원상태(ON/OFF)

int channel;  //채널



//Tv의 기능(메서드)

void power(){

power = !power;

}  //TV를 켜거나 끄는 기능의 메서드


void channelUp(){

++channel;

}  //TV의 채널을 높이는 기능의 메서드

void channelDown(){

--channel;

}  //TV의 채널을 낮추는 기능의 메서드 




인스턴스의 생성과 사용

-> Tv클래스를 완성했으니, 이제는 Tv클래스의 인스턴스를 만들어서 사용해 보도록 하자.


클래스명 변수명;

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


Tv t;   //Tv클래스 타입의 참조변수 t를 선언

t= new Tv();    //Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장


-----------------------------------------------------------------------------------------------------

class Tv{

//Tv의 속성(멤버변수)

String color;  //색상

boolean power;  //전원상태(ON/OFF)

int channel;  //채널



//Tv의 기능(메서드)

void power(){

power = !power;

}  //TV를 켜거나 끄는 기능의 메서드


void channelUp(){

++channel;

}  //TV의 채널을 높이는 기능의 메서드

void channelDown(){

--channel;

}  //TV의 채널을 낮추는 기능의 메서드 

}


class TvTest{

public static void main(String args[]){

Tv t;

t= new Tv();

t.channel = 7;

t.channelDown();

System.out.println("현재 채널은 "+t.channel+ "입니다.")

}

}


-------------------------------------------------------------------------------------------------


실행결과 :  현재 채널은 6 입니다.


-------------------------------------------------------------------------------------------------


*인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.


변수-하나의 데이터를 저장할 수 있는 공간

배열-같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간

구조체-서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간

클래스-데이터와 함수의 결합(구조체 + 함수) 





변수와 메서드


멤버변수를 제외한 나머지 변수들은 모두 지역변수이다.

멤버변수 중 static이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스변수 이다.




변수의 종류와 특징


변수의 종류                   선언위치                      생성시기


클래스변수                    클래스영역                클래스가 메모리에 올라갈 때


인스턴스변수                 클래스영역                인스턴스가 생성되었을 때


지역변수                    클래스 영역 이외의 영역        변수 선언문이 수행되었을 때

 (메서드, 생성자, 초기화 블럭 내부)





인스턴스변수

-> 클래스 영역에 선언, 클래스의 인스턴스를 생성할 때 만들어짐.


클래스변수

->인스턴스변수 앞에 static을 붙이기만 하면 끝


지역변수

->메서드 내에 선언되어 메서드 내에서만 사용 가능



메서드

-> 어떤 작업을 수행하기 위한 명령문의 집합이다.

-하나의 메서드는 한 가지 기능만 수행하도록 작성하는 것이 좋다

-반복적으로 수행되어야 하는 여러 문장을 하나의 메서드로 정의해 놓으면 좋다.

-관련된 여러 문장을 하나의 메서드로 만들어 놓는 것이 좋다.




return문

-> 메서드가 정상적으로 종료되는 경우는 다음과 같이 두 가지가 있다.

-메서드의 블럭{} 내의 마지막 문장까지 수행했을 때

-메서드의 블럭{} 내에 있는 문장을 수행 중 return문을 만났을 때



JVM의 메모리구조

1.메서드영역: 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일을 읽어서 분석하여 클래스에 대한 정보를 이곳에 저장한다.


2.힙: 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉 인스턴스변수들이 생성되는 공간


3.호출스택: 메서드의 작업에 필요한 메모리 공간을 제공한다.



호출스택의 특징

-메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.

-메서드가 수행을 마치고나면 사용했던 메모리를 반환하고 스택에서 제거된다.

-호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.

-아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.



기본형 매개변수와 참조형 매개변수


기본형 매개변수 - 변수의 값을 읽기만 가능

참조형 매개변수 - 변수의 값을 읽고 변경 가능



재귀호출

-메서드의 내부에서 메서드 자기 자신을 다시 호출하는 것을 재귀호출이라고 한다.

장점: 메서드를 훨씬 간단하게 할 수 있다.

단점: 효율이 떨어진다.(반복적으로 메서드를 호출하는 것이기 때문에 메서드를 호출하는데 드는 비용이 추가적으로 발생)



메서드 오버로딩

-자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.

->한 클래스 내에 같은 이름의 메서드 여러 개 정의


오버로딩 조건

-메서드 이름이 같아야 한다

-매개변수의 개수 또는 타입이 달라야 한다

-매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.

(리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.)



오버로딩의 예


가장 대표적인 것은 println메서드 이다.


void println()

void println(boolean x)

void println(char x)

void println(char[] x) 

void println(double x)

void println(float x)

void println(int x)

void println(long x)

void println(Object x)

void println(String x) 


println메서드를 호출할 때 매개변수로 넘겨주는 값의 타입에 따라서 위의 오버로딩된 메서드들 중의 하나가 선택되어 실행되는 것이다.


오버로딩의 장점

-이름을 절약할 수 있다.




'프로그래밍 > 자바' 카테고리의 다른 글

BubbleSort 버블정렬  (0) 2018.12.10
예외처리  (0) 2018.11.29
객체지향 프로그래밍-2  (0) 2018.11.29
객체지향 프로그래밍  (0) 2018.11.27
객체지향언어-1  (0) 2018.11.26
Comments