[Java] 클래스와 객체
programming/java

[Java] 클래스와 객체

7. 클래스와 객체

 

7.1 객체지향프로그래밍(Object Oriented Programming)의 개요

 

7.1.1 소프트웨어 위기(software crisis)

7.1.1.1 소프트웨어 위기

 

소프트웨어 규모의 대규모화, 복잡화에 따른 개발비용 증대

하드웨어 비용에 대한 소프트웨어 가격 상승폭 증가

유지보수의 어려움과 개발정체 현상 발생

프로젝트 개발 및 소요예산 예측의 어려움

신기술에 대한 교육 및 훈련의 부족

 

7.1.1.2 객체지향프로그래밍은 소프트웨어 위기를 해결하기 위한 방안의 하나임

유지보수 비용의 감소

 

7.1.2 객체지향프로그래밍(Object Oriented Programming, OOP)

과학, 군사적 모의실험(simulation)을 위해 컴퓨터를 이용한 가상세계를 구현하려는 노력으로부터 객체지향이론이 시작됨

1960년대 최초의 객체지향언어 Simula 탄생

1980년대 절차방식의 프로그래밍의 한계를 객체지향방식으로 극복하려고 노력함(C++, Smalltalk와 같은 보다 발전된 객체지향언어가 탄생)

1995년 Java가 개발되면서 객체지향언어가 프로그래밍 언어의 주류가 됨

 

7.1.3 절차지향과 객체지향

 

 

7.1.4 객체지향프로그래밍의 4대 특성

7.1.4.1 추상화(Abstraction)

추상클래스와 인터페이스

 

 

7.1.4.2 캡슐화(Encapsulation)

중요한 데이터(변수)를 숨김(정보 은닉)

public method를 통해 변수에 접근

 

7.1.4.3 상속(Inheritance)

 

7.1.4.4 다형성(Polymorphism)

상속 관계에서 다양한 동작 구현

 

 

7.2 클래스

7.2.1 자료형의 확장

 

7.2.2 클래스의 구성요소

클래스는 속성과 기능으로 구성됨

변수(속성) - 주로 private으로 설정

method(기능) - 주로 public으로 설정

 

7.2.3 class와 object

  • class: 소스 코드(설계도)
  • object(instance): class의 내용을 메모리에 생성한 것(제품)

사람이라는 1개의 클래스가 있다면 70억의 객체(인스턴스)를 만들 수 있음

object를 생성하기 위해서는 new 연산자를 사용함

new 자료형 - 동적 메모리 할당

[UML] 클래스와 객체간의 관계 표현하기 . (2011). Retrieved from https://kimgisa.tistory.com/486.

 

7.2.4 메모리 할당

7.2.4.1 정적메모리 할당

실행 전에 할당됨(compile)

자료형 변수명;

스택(stack) 영역에 할당됨

프로그램이 종료되면 자동으로 제거됨

 

7.2.4.2 동적메모리 할당

Run time에 할당됨

new 자료형;

개발자가 명시적으로 제거할 수 없음

프로그램이 종료되어도 자동으로 제거되지 않음

용량이 차면 시스템에서 자동으로 제거(Garbage Collection)

 

7.2.5 객체와 인스턴스

객체(object)와 인스턴스(instance)는 같은 의미

인스턴스화(instantiate, 인스턴스化)

클래스로부터 인스턴스를 생성하는 것

 

7.2.6 객체를 만드는 방법

자료형 객체참조변수 = new 자료형();

Tv t = new Tv();
Tv t;			// Tv 클래스의 객체참조변수가 만들어짐
t = new Tv();	// Tv 클래스의 객체가 생성되고 시작번지값을 t에 복사

 

 

7.3 접근권한 지정자(modifier)

접근 제어자 . (2014). Retrieved from https://opentutorials.org/course/1223/6061.

 

7.3.1 public

모든 위치에서 참조 가능

 

7.3.2 protected

같은 패키지 + 상속 관계가 있을 경우 참조 가능

 

7.3.3 default

같은 패키지에서 참조 가능

 

7.3.4 private

클래스 내부에서만 사용 가능

 

 

7.4 캡슐화(Encapsulation)

객체지향[캡슐화] . (2014). Retrieved from https://oraclejavastudy.tistory.com/entry/C%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B0-22-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%BA%A1%EC%8A%90%ED%99%94.