자바는 대표적인 객체지향(Objecti Oriented Programming) 언어이다.
C언어와 같은 절차지향언어와 다른점은 자바는 모든 데이터를 객체로 취급하여 객체 중심으로 작성된다는 점이다.
OOP의 장점에는 코드의 확장성과 재활용성, 유지보수가 절차지향에 비해 개선되는 점이 있다.
이러한 객체를 만들고 구성하는 개념들을 알아보자.
객체(object)
객체란 object, 존재하는 사물 혹은 개념, 논리와 같은 무형적인 것들도 객체라 정의할 수 있다.
예를 들어 사람, 차, 책 등 물리적으로 존재하는 것과 개념적인 주문, 계산 등도 객체가 될 수 있다.
객체는 각각 독립적으로 존재하며 다른 객체와 서로 상호작용을 할 수 있다.
자바에서는 클래스에서 생성된 데이터를 객체로 정의한다.
클래스(class)
클래스는 객체를 만들기 위한 틀 혹은 설계도라 할 수 있다.
클래스는 객체의 상태를 나타내는 필드와 객체의 행동을 나타내는 메소드로 구성된다.
클래스명 작성 규칙
- 하나 이상의 문자로 이루어져야 하며 첫글자는 반드시 대문자로 작성한다.
- 첫번째 글자에는 숫자가 올 수 없다.
- $, _를 제외한 특수문자, 예약어를 사용할 수 없다.
예시)
pubilc class 클래스이름{
int property; // 속성 (멤버 필드)
void methodName(){ ... } // 메소드
}
클래스를 통해 객체를 생성하는 방법은 아래와 같다.
Car c1 = new Car();
new Car();는 데이터를 동적할당하는 부분이며 메모리의 힙 영역에 할당된다.
Car c1은 지역변수로, 선언된 구간이 종료되면 소멸되는 스택 영역에 할당이 되며 new Car(); 로 선언된 메모리를 가리키는 참조 변수가 된다.
객체는 GC에 의해 관리되며 CG의 메모리 해제 주기가 되면 힙 영역에 있던 필요없어진 객체 메모리는 해제된다.
인스턴스(instance)
클래스로 객체를 만들어 하나의 객체가 생성되어 메모리에 할당된 것을 인스턴스라고 부른다.
인스턴스는 객체가 실체화 된 것이며 그 과정을 인스턴스화라고 한다.
public class Main {
public static void main(String[] args) {
Calculate cal = new Calculate();
}
}
// Calculate 클래스에 Calculate 타입의 cal 인스턴스를 선언 및 메모리 할당
속성 (property)
속성은 클래스내에 있는 변수, 곧 객체의 상태를 말한다.
변수와 속성의 차이점은 변수는 해당 메소드와 생성자에서만 사용되고 메소드, 생성자가 종료됨과 동시에 메모리가 소멸된다.
필드는 클래스 안의 전체 메소드와 생성자에서 사용되고 객체가 소멸될때까지 존재한다.
메소드 (method)
메소드는 클래스함수, 멤버함수로도 불리며 클래스에 종속되어 인스턴스와 연결되어 있는 어떤 특정 작업을 수행하기 위한 명령문의 집합이다.
클래스에 종속되어 있기 때문에 해당 클래스에 대한 객체가 생성이 되어야 사용할 수 있다.
public class Main {
public static void main(String[] args) {
int score;
Subject sub = new Subject(); // 객체선언
sub.score = 100;
score = sub.getScore(); // 메소드 호출문
}
}
class Subject{
int subjectName;
int score;
public int getScore(){ // score 값을 리턴하는 함수
return score;
}
}
함수(function)와 메소드 (method)의 차이점
함수는 존재하는 명령문의 집합이고 로직 처리 이후 사용자가 원하는 결과를 반환할 수 있다.
클래스, 객체와 연관돼있지 않고 독립적으로 사용할 수 있고 메소드는 클래스에 속해 있는 함수를 말한다.
자바는 클래스를 벗어나 함수를 생성할 수 없는 언어로 자바에서의 모든 함수는 곧 메소드인것이다.
메소드는 함수에 포함된 개념이라 볼 수 있다.
'Language & Framework > Java' 카테고리의 다른 글
[JAVA] :: 자바 기초 3 :: Static / Singleton Patton / Array / ArrayList (0) | 2021.07.10 |
---|---|
[JAVA] :: 자바 기초 2 :: 생성자 / 오버로딩 / 접근제어자 / 정보은닉 (0) | 2021.07.06 |
[JAVA] 소켓(socket) 프로그래밍 (0) | 2021.01.20 |
[JAVA]입출력 IO & NIO (0) | 2021.01.20 |
[JAVA] 자바 컴파일은 어떻게 동작할까? (0) | 2021.01.18 |