본문 바로가기

와사비크래커 IT Tip/언어

[JAVA] 객체지향 프로그래밍

728x90
반응형

1     객체지향 프로그래밍

1.1    객체지향언어

-       객체지향언어 기존의 프로그래밍 언어와 다른 전혀 새로운 것이 아니라, 기존의 프로그래밍 언어에 몇 가지 새로운 규칙을 추가한 보다 발전된 형태의 것이다. 이러한 규칙들을 이용해서 코드 간에 서로 관계를 맺어 줌으로써 보다 유기적으로 프로그램을 구성하는 것이 가능해졌다.

1.2    객체지향언어 특징

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

-       새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

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

-       코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

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

-       제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.

1.3    클래스와 객체

1.3.1     클래스와 객체의 정의와 용도

클래스란 객체를 정의해놓은 것.’ 또는 클래스는 객체의 설계도 또는 틀’ 이라고 정의할 수 있다.

클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.

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

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

객체의 정의는 실제로 존재하는 것’ 이다. 우리가 주변에서 볼 수 있는 사물들이 곧 객체이다. 객체지향 이론에서는 사물과 같은 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주하며, 프로그래밍에서의 객체는 정의된 내용대로 메모리에 생성된 것을 뜻한다.

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

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

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

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

1.3.2     객체와 인스턴스


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

객체와 인스턴스

1.3.3     객체의 구성요소 – 속성과 기능

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

-       객체는 속성과 기능의 집합이라고 할 수 있으며, 객체가 갖고 있는 속성과 기능을 그 객체의 멤버(구성원)라 한다.

-       클래스란 객체를 정의한 것이므로 클래스에는 객체의 모든 속성과 기능이 정의되어있다.

-       클래스로부터 객체를 생성하면, 클래스에 정의된 속성과 기능을 가진 객체가 만들어지는 것이다.

속성과 기능

1.3.4     인스턴스의 생성과 사용

-      인스턴스를 생성하는 방법은 여러 가지가 있지만 일반적으로 다음과 같이 한다.

인스턴스의 생성과 사용

1.4    변수와 메서드

1.4.1     선언 위치에 따른 변수의 종류

-        인스턴스 변수 (Instance variable)

n  각 인스턴스의 개별적인 저장공간으로 인스턴스마다 다른 값을 저장할 수 있다.

n  인스턴스 생성 후, “참조변수. 인스턴스변수명”으로 접근할 수 있다.

n  인스턴스를 생성할 때 생성되고, 참조 변수가 없을 때 가비지 컬렉터에 의해 자동으로 제거된다.

-        클래스 변수 (Class variable)

n  같은 클래스의 모든 인스턴스들이 공유하는 변수이다.

n  인스턴스 생성 없이 “클래스이름. 클래스변수명”으로 접근할 수 있다.

n  클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸된다.

-        지역 변수 (Local variable)

n  메서드 내에 선언되며 메서드의 종료와 함께 소멸된다.

n  조건문, 반복문의 블록({}) 내에 선언된 지역변수는 블록을 벗어나면 소멸된다.

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

-        인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있다.

-        클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하기 때문에 항상 공통된 값을 갖는다.

1.4.3     메서드 (Method)

-        메서드의 정의

n  메서드란 작업을 수행하기 위한 명령문의 집합을 의미한다.

n  어떤 값을 입력 받아서 처리하고 그 결과를 돌려준다. 이 때, 입력 받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.

-        메서드의 장점과 작성지침

n  반복적인 코드를 줄이고 코드의 관리가 용이하게 된다.

n  반복적으로 수행되는 여러 문장을 메서드로 작성한다.

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

n  관련된 여러 문장을 메서드로 작성한다.

-        메서드 정의 방법

n  메서드는 클래스 영역 안에서만 정의할 수 있다. , 메서드 내에 메서드를 정의할 수 없다.

1.4.4     return 문

-        메서드가 정상적으로 종료되는 경우

n  메서드의 블록({})의 끝에 도달했을 때 메서드가 종료된다.

n  메서드의 블록({})을 수행 도중 return문을 만났을 때 메서드가 종료된다.

-        return

n  현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아 가는 것을 의미한다.

n  반환값이 없는 경우와 반환 값이 있는 경우가 있는데, 반환값이 없는 경우는 return문만 써주면 되고, 반환값이 있는 경우는 return문 뒤에 반환 값을 지정해 주어야 한다.

n  반환값이 있는 메서드는 모든 경우에 return문이 있어야 한다.

n  return문의 개수는 최소화하는 것이 좋다.

1.4.5     메서드 호출

-        메서드 호출 방법

1)     메서드에 선언된 매개변수가 없는 경우

참조변수. 메서드명( );

2)     메서드에 선언된 매개변수가 있는 경우

참조변수. 메서드명(값1, 값2, …);

1.4.6     JVM의 메모리 구조

-        메서드 영역 (Method Area)

n  클래스 정보와 클래스 변수가 저장되는 곳이다.

-        호출 스택 (Call Stack)

n  메서드의 작업 공간이다.

n  메서드가 호출되면 메서드 수행에 필요한 메모리 공간을 할당 받고, 메서드가 종료되면 사용하던 메모리를 반환한다.

-        (Heap)

n  인스턴스가 생성되는 공간이다.

n  new 연산자에 의해서 생성되는 배열과 객체는 모두 힙에 생성된다.

JVM  메모리 구조

 

-        호출 스택의 특징

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

n  메서드가 수행을 마치면 사용했던 메모리를 반환한다.

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

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

호출 스택 과정

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

-        기본형 매개변수

n  변수의 값을 읽기만 할 수 있다.

-        참조형 매개변수

n  변수의 값을 읽고 변경할 수 있다.

1.4.8     클래스 메서드와 인스턴스 메서드

-        인스턴스 메서드

n  인스턴스 생성 후 “참조변수. 메서드이름()”으로 호출한다.

n  인스턴스 변수나 인스턴스 메서드와 관련된 작업을 하는 메서드이다.

n  메서드 내에서 인스턴스 변수를 사용할 수 있다.

-        클래스 메서드

n  객체 생성 없이 “클래스이름. 메서드이름()”으로 호출한다.

n  인스턴스 변수나 인스턴스 메서드와 관련 없는 작업을 하는 메서드이다.

n  메서드 내에서 인스턴스 변수를 사용할 수 없다.

n  메서드 내에서 인스턴스 변수를 사용하지 않는다면 static을 붙이는 것을 고려한다.

1.5    메서드 오버 로딩

1.5.1     메서드 오버 로딩 개념

-        메서드 오버 로딩이란 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 의미한다.

1.5.2     오버로딩의 조건

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

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

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

 

 

반응형

'와사비크래커 IT Tip > 언어' 카테고리의 다른 글

[JAVA] 변수의 초기화  (0) 2020.09.03
[JAVA] 생성자 (Constructor)  (0) 2020.09.02
[JAVA] 배열  (0) 2020.09.01
[JAVA] 조건문과 반복문  (0) 2020.08.31
[JAVA] 연산자  (0) 2020.08.31