JAVA/기본 개념

[JAVA] 객체지향 프로그래밍, 변수,메소드,클래스 개념

soyeonisgood 2022. 7. 18. 10:15

객체지향 프로그래밍

개요

  • 실제 세계를 모델링하여 SW개발하는 방법
  • 현실세계에 존재하는 실체 및 개념들을 객체(Object)라는 독립된 단위로 구성하고 이 객체들이 메시지 교환을 통해 상호작용함으로써 전체 시스템 운영됨
  • 현실 세계의 개체(Entity)를 속성과 메소드가 결합된 객체(Object) 형태로 표현
  • 데이터와 절차를 하나의 덩어리로 묶어서 생각.  부품 조립하는 것과 같은 방법
  • ex) JAVA, C++, C#, Python 

특징

  • 데이터(상태) 중심
  • 성능보다는 개발의 편리성과 효율성 높이는데 목적이 있음
  • 쉬운 프로그램의 개발로 인한 생산성 향상 
  • 프로그램 모듈 재사용 가능
  • 프로그램의 확장 및 유지보수 용이

 

객체 (Object)

  • 객체는 특성, 행위, 정체성 세가지 특징 있다.
  •  - 특성(속성)은 해당 객체에 저장되어 있는 정보
  •  - 행위(기능)은 해당 객체가 행동하거나 반응하는 방법 결정
  •  - 정체성은 해당 객체를 다른 객체와 구별 짓게 하는 식별 값
  • 그 객체의 상태 나타내는 변수와 행동을 구현한느 메소드의 소프트웨어적인 모듈
  • 관련있는 데이터와 코드를 하나로 묶는 구성 단위
  • 인스턴스: 메모리 할당받은 상태
  • 개발 시간에는 레퍼런스 변수로 정의
  • 실행 시간에는 클래스의 인스턴스를 의미

객체의 구성

  • 객체 = 필드(멤버변수)+메소드(method), 상태(state)+동작(behaviors)
  • 상태(status): 메모리 내부에 정의된 데이터 (속성,특성,필드,멤버변수)
  • 행동(action): cpu를 통한 명령 실행의 집합=코드집합 (동작,메소드,멤버함수)
  • 클래스(Class): 객체 생성을 위해 속성(필드)와 메소드 정의하는 일종의 틀(template)
  • 객체(Object): 클래스의 인스턴스. 자신 고유의 속성을 가지며 클래스에서 정의한 행위 수행 가능
  • 속성(attribute): 객체의 데이터(필드)
  • 메소드(Method): 한 객체의 서브루틴 형태로 객체의 속성 조작에 사용됨
  • 메시지(Message): 객체 간의 통신이 이루어지는 방법, 메시지를 통해 메소드 호출되어 사용됨

 

변수

  • 필드(인스턴스 변수, 클래스 변수)
  • 지역변수: 메소드 내부에 선언된 변수. 메소드 호출 시 스택영역에 메모리 할당받고. 메소드 나가면 소멸.
  • 매개변수: 지역변수. 메소드 호출 시 스택영역에 메모리 할당받고. 메소드 나가면 소멸.

필드

  • 클래스의 여러 가지 상태에 관한 정보를 기억해 놓은 장소
  • 모든 자료 형 사용 가능, 필드에 대한 접근 제한 가능.
  • 필드(field) = 멤버변수 = 속성 = 상태 = 인스턴스변수+클래스변수(class variable, static variable)

 

인스턴스 변수

  • 객체마다 고유의 속성나타내기 위해 사용되는 변수
  • 객체가 메모리할당 받을 때마다 새로운 저장 공간 할당받음. 객체마다 메모리 할당 이루어짐.

클래스 변수

  • static 키워드
  • 모든 인스턴스들이 공통된 값 가짐
  • 객체가 아닌 클래스 이름 이용하여 외부에서 접근

레퍼런스 변수

  • 기본형 제외한 나머지 타입, 주기억장치에 저장된 객체의 주소값 가리킴
  • 배열참조, 클래스참조, 인터페이스참조형
  • 변수 자체가 값 포함X, 클래스 인스턴스에 대한 참조값만 가짐
  • 메모리만 확보된 상태이므로,  그 위치를 변수에 할당해주어야함. = 인스턴스 생성 
  •  - 클래스명 객체 = new 클래스명([인수,...])   // 선언과 동시에 인스턴스(객체)생성
  •  상수로 null 값 가질 수 있음. (레퍼런스 변수가 아닌 int형은 nullX)

 

인스턴스 메소드

  • 1) 객체 생성 
  •  - 클래스명 객체 = new 클래스명()
  • 2) 객체 이용한 접근
  •  - 객체.필드
  •  - 객체.메소드()

클래스 메소드

  • static 키워드
  • 인스턴스 생성 없이 바로 클래스 이름으로 접근 가능
  • 클래스명.필드
  • 클래스명.메소드()
  • 클래스 메소드 내에서 인스턴스 변수,메소드 접근 위해서는 똑같이 객체 생성 후 접근 가능
  • this, super 키워드 사용 X
  • 자동으로 final 메소드 되므로 overriding 불가능

 

클래스(Class)

  • 같은 종류의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것
  • 어떤 특정 종류의 객체들에 대해 일반적으로 적용할 수 있는 속성(변수)과 메소드를 정의한 소프트웨어적인 설계도 또는 프로토타입
  • 실세계에 존재하는 객체들이 가질 수 있는 상태와 행동들에 대해 소프트웨어적으로 추상화 해 놓은 것
  • 일련의 자료 구조와 그에 대한 연산을 정의한 후 이것을 마치 시스템에서 제공하는 기본형처럼 사용할 수 있는 사용자 정의 데이터 형(user define data type)
  • 객체는 클래스로부터 생성됨. 즉, 객체를 생성하는 틀(template).

클래스(Class)

  • 단일 책임의 원칙(SRP: The Single Responsibility Principle)
    • 하나의 클래스에는 한 가지 종류의 책임(기능)을 두어야한다. 응집력 높이기 위함.
  • 개방/폐쇄의 원칙(OCP: The Open-Closed Principle)
    • 확장에 대해서는 개방되어야 하지만, 변경에 대해서는 폐쇄되어야한다. 기능 확장 시 기존 클래스의 변경 최소화. 디자인 패턴 적용하는 이유이기도 함.
  • 인터페이스 분리의 원칙(ISP: Interface Segregation Principle)
  • 리스코프 치완의 원칙
  • 의존 관계 역전의 원칙