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)
- 리스코프 치완의 원칙
- 의존 관계 역전의 원칙