본문 바로가기

Web Development/Java

[Java] 객체지향개념1

객체지향언어?

1. 객체지향언어의 역사

절차방식의 프로그래밍 언어를 객체지향방식으로 극복하려고 탄생.

= (기존의 절차지향적) 프로그래밍 언어 + 객체지향개념

 

2. 객체지향언어의 특징

▶ 기존의 프로그래밍 언어 + 몇가지 규칙 추가된 형태

▶ 코드의 재사용성이 높음

▶ 코드의 관리가 쉬움

▶ 신뢰성이 높은 프로그램의 개발을 가능하게 함

-> 코드의 중복, 코드의 불일치를 줄임. 재사용성이 높고 유지보수가 용이하다는 것이 가장 큰 장점

 

클래스와 객체?

1. 클래스와 객체의 정의와 용도

(1) 클래스 : 클래스란 객체를 정의해 높은 것

      ▶ 객체를 생성하는 데에 사용됨

      e.g. 제품 설계도, TV 설계도

(2) 객체 : 실제로 존재하는 것. 사물 또는 개념.

      ▶ 객체의 속성과 기능에 따라 다른 용도

      e.g. 제품, TV

-프로그래밍에서는 객체를 생성하면 클래스에 정의된 내용대로 메모리에 객체가 생성됨.

-객체는 서로 독립적.

 

2. 객체와 인스턴스

▶ 객체 ≒ 인스턴스

: 객체는 인스턴스를 포함하는 일반적인 의미.

  인스턴스는 특정 클래스의 객체라는 것을 강조할 때 사용.

  클래스로부터 인스턴스를 생성하는 것을 '인스턴스화'라고 함.

 

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

▶ 객체는 속성과 기능의 집합

: 속성과 기능을 객체의 멤버(member)라고 함

▶ 속성은 변수로 기능은 메서드로 정의함

     e.g. 속성: 크기, 길이, 높이, 색상 ... -> 변수

             기능: 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 높이기 ... -> 메서드

 

4. 인스턴스의 생성과 사용

(1) 생성하려는 인스턴스 타입의 참조변수를 선언

      Tv = t;

(2) new 연산자를 이용하여 객체를 생성하고,
      new 연산자가 반환하는 생성된 객체의 주소가 참조변수에 저장되도록 함

      t = new Tv();

- new 연산자는 인스턴스를 생성할 클래스를 읽어서 인스턴스 생성에 필요한 메모리를 계산한 다음 메모리의 빈 공간을 찾아 객체를 생성. 마지막으로 생성된 객체의 메모리 주소를 반환. 이렇게 하면 생성된 인스턴스를 참조변수라는 리모콘으로 다룰 수 있게 됨.

- new 연산자가 메모리에 객체를 생성할 때 각 변수 변수 타입에 따른 기본값으로 자동초기화 됨

    Tv t = new Tv();   //이렇게 줄여 쓸 수도 있음

 

* 참조변수가 없으면 인스턴스를 사용할 수 없음. 사용할 수 없는 인스턴스는 JVM의 가비지컬렉터에 의해서 적절한 시기에 자동적으로 메모리에서 제거됨. 그래서 개발자는 메모리관리에 부담을 덜 수 있는 것이 java의 장점.

 

Tv t1 = new Tv();

Tv t2 = new Tv();

t2 = t1;

 

이렇게 두개의 Tv 인스턴스를 생성하고 참조변수간의 대입연산을 수행하면 참조변수 t1의 값이 t2에 저장됨.

즉 참조변수 t1과 t2 모두 t1이 참조하고 있는 인스턴스의 주소값 100번지를 가리키게 됨.

-> 참조변수 t2는 기존에 참조하고 있던 인스턴스는 다룰 수 없게 됨. (사용할 수 없는 인스턴스는 가비지컬렉터에 의해서 제거됨)

 

5. 클래스의 또 다른 정의

(1) 클래스 - 데이터와 함수의 결합

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

▶ 배열: 같은 타입의 데이터를 여러 개 저장할 수 있는 공간

▶ 구조체: 타입에 관계없이 서로 관련된 데이터를 저장할 수 있는 공간

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

     e.g. 자바의 String 클래스: 문자열을 char 배열과 관련 함수를 묶어 하나의 클래스로 정의함

 

(2) 클래스 - 사용자 정의 타입(User-defined type)

-프로그래머가 서로 관련된 변수들을 묶어서 직접 새로운 타입을 정의

-자바와 같은 객체지향언어에서는 클래스가 곧 사용자 정의 타입 (->참조형)

Time[] t = new Time[3];

 

위 코드를 실행하면 3개의 Time 인스턴스를 저장할 수 있는 객체배열이 만들어짐.

(△ 아직 값을 저장할 수 있는 공간은 만들어지지 않음)

 

t[0] = new Time();

t[1] = new Time();

t[2] = new Time();

 

이 코드를 모두 실행하면 9개의 값을 저장할 수 있는 공간이 만들어짐

 

 

출처: 남궁성의 자바의 정석 강의자료

'Web Development > Java' 카테고리의 다른 글

[Java] 캡슐화, TDA 원칙  (2) 2024.01.13
[Java] 객체지향개념3  (1) 2024.01.09
[Java] 객체지향개념2  (1) 2024.01.09
[Java] 변수 타입간의 변환 방법  (1) 2023.12.28
[Java] 기본형 변수의 종류와 크기  (1) 2023.12.28