[Java] Java 객체지향, 프로그래밍 구조 정리
기본 용어
클래스(class)
- Java에서 객체를 생성하기 위한 일종의 설계도
- 흔히 붕어빵(객체)를 만들기 위한 붕어빵 틀(클래스)이라고 비유함
- 객체가 가지는 속성(필드)와 동작(메서드)으로 이루어져 있음
- 이들은 생략될 수도 있고, 하나 이상 작성될 수도 있음
- Java를 실행 시 클래스는 JVM 메모리의 클래스 영역(Class Area)에 로드됨
- 객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도가 클래스
객체(object)
- 물리적으로 존재하거나 추상적으로 생각할 수 있는 것들 중
- 자신의 속성을 가지고 있고, 다른 것과 비교하여 식별 가능한 것을 말함
- 자신 고유의 속성을 가지는 물리적, 추상적인 모든 대상을 일컫는 것이 바로 객체
인스턴스(instance)
- 클래스가 붕어빵 틀이라면, 그 틀을 통해 생석된 객체(붕어빵) 하나하나를 해당 클래스의 인스턴스라고 함
- 클래스를 사용하여 힙 영역(Heap Area)에 새로운 인스턴스(객체)를 생성할 수 있음
- 즉, 인스턴스란 현실의 객체를 소프트웨어 내에서 구현한 실체
- 대체로 객체와 인스턴스는 혼용해서 표현
프로그래밍 구조
프로퍼티(property)
- 프로퍼티를 알기 전에 자바빈을 먼저 알아야 함
- 자바빈(JavaBean)이란, 일반적으로 자바로 작성된 클래스들을 말함
-
객체지향 언어인 자바에서 객체는 고유한 속성(특징)을 가짐
- 그 속성을 칭하는 단어를 프로퍼티(property)라고 함
- 이 속성의 진짜 모습, 즉 ‘실체’를 담는 곳이 필드(field, 멤버변수)라고 함
- 프로퍼티는 아래와 같은 명명 규칙을 갖고 있으며, 흔히 getter/setter를 묶어 프로퍼티라 부름
- 프로퍼티 값을 구하는 메서드는 get으로 시작함
- 프로퍼티 값을 변경하는 메서드는 set으로 시작함
- get과 set 뒤에는 프로퍼티의 이름 첫 글자를 대문자로 바꿈
- set 메서드는 1개의 파라미터를 갖음
메서드(method)
- 자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메서드(method)를 가짐
- 그 중에서 메서드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있음
- 중복되는 코드의 반복적인 프로그래밍을 지양하기 위해 메서드를 사용함
- 모듈화로 인해 코드의 가독성도 좋아짐
- 프로그램에 문제가 발생하거나 기능의 변경이 필요할 때도 손쉽게 유지보수가 가능함
캡슐화(encapsulation)
- 캡슐화(encapsulation)란 연관된 목적을 가지는 변수와 메서드를 하나의 클래스로 묶어 외부에서 쉽게 접근하지 못하도록 은닉하는 것
- 캡슐화는 중요한 데이터를 쉽게 바꾸지 못하도록 할 때 사용됨
- 캡슐화를 하는 가장 큰 이유는 정보 은닉에 있음
- 외부에서 내부의 정보에 접근하거나 변경할 수 없게 직접적인 접근을 막음
- 객체가 제공하는 필드와 메서드를 통해서만 접근이 가능하도록 함
- 접근을 제한함으로써 유지보수나 확장 시 오류의 범위를 최소화할 수 있음
-
객체 내의 정보 손상과 오용을 방지하고 데이터가 변경되어도 다른 객체에 영향을 주지 않아 독립성이 좋음
- 캡슐화는 아래와 같은 접근제어자를 통해 이루어짐
- public: 접근 제한 없음
- protected: 동일한 패키지 내에 존재하거나 파생 클래스에서만 접근 가능
- default: 아무런 접근 제한자를 명시하지 않으면 default 값이 되며, 동일한 패키지 내에서만 접근 가능
- private: 자기 자신의 클래스 내에서만 접근 가능
상속(inheritance)
- 상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미
- 상속은 캡슐화, 추상화와 더불어 객쳊 히야 프로그래밍을 구성하는 중요한 특징 중 하나임
-
상속을 이용하면 기존에 정의되어 있는 클래스의 모든 필드와 메서드를 물려받아, 새로운 클래스를 생성할 수 있음
- 기존에 정의되어 있던 클래스를 부모 클래스(parent class), 상위 클래스(super class) 또는 기초 클래스(base class)라고 함
- 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class), 하위 클래스(sub class) 또는 파생 클래스(derived class)라고 함
- 자바에서 클래스의 상속은 다음과 같은 장점들을 가짐
- 기존에 작성된 클래스를 재활용할 수 있음
- 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스를 작성해 놓으면, 자식 클래스에서는 해당 멤버를 작성하지 않아도 됨
- 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련함
다형성(polymorphism)
-
다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미
-
자바에서는 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 함
- 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 같거나 적어야 참조 가능
-
다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나임
-
특정 타입의 참조 변수로는 당연히 같은 타입의 인스턴스를 참조할 수 있음
- 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수와 같기 때문
-
부모 클래스 타입의 참조 변수로도 자식 클래스의 타입을 인스턴스를 참조할 수 있음
- 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 적기 때문
-
자신 클래스 타입의 참조 변수로는 부모 클래스 타입의 인스터스를 참조할 수 없음
- 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 많기 때문
Reference
- https://velog.io/@dongvelop/Java-클래스-객체-인스턴스의-차이
- https://july7k.tistory.com/87
- https://lee-jung-hoon.github.io/2018/09/18/programming-spring-study-004/
- http://www.tcpschool.com/java/java_methodConstructor_method
- http://www.tcpschool.com/java/java_inheritance_concept
- http://www.tcpschool.com/java/java_polymorphism_concept
Leave a comment