객체지향 프로그래밍이란,
컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다.
객체지향 언어의 주요 특징은 다음과 같다.
1. 코드의 재사용성이 높다
2. 코드의 관리가 용이하다
3, 신뢰성이 높은 프로그래밍을 가능하게 한다.
클래스와 객체
클래스 : 객체를 정의해놓은 것이며, 객체를 생성하는 데 사용된다.
객체 : 클래스로부터 만들어져 실제로 메모리 상에 존재하는 것
인스턴스 : 클래스로부터 만들어진 객체를 이루는 말
객체는 여러가지 속성과 기능을 가지고 있다.
이를 멤버 변수, 메서드를 이용해 구현할 수 있으며
변수는 클래스, 인스턴스, 지역 변수 총 3가지 종류로 나뉜다.
클래스 변수와 인스턴스 변수는 클래스 영역에 위치한다.
클래스 변수는 static을 인스턴스 변수 앞에 붙여서 사용한다.
(클래스 이름).(클래스 변수)의 형식으로 전역에서 인스턴스를 생성하지 않고 사용할 수 있다.
나아가 클래스 메서드(static)와 인스턴스 메서드를 설명해보자면,
클래스 메서드도 마찬가지로 (클래스 이름).(클래스 메서드이름)으로 호출할 수 있다.
인스턴스 메서드는 메서드 작업을 수행하는 인스턴스를 필요로 하는 메서드이다.
public class TestClass {
void instanceMethod() { }
static void staticMethod() { }
void instanceMethod2(){
instanceMethod();
staticMethod();
}
static void staticMethod2(){
instanceMethod(); // ERROR
staticMethod();
}
}
다음 코드에서 클래스 메서드가 인스턴스 메서드를 호출하고 있다.
이 경우 클래스 내 메서드는 객체의 생성이나 참조변수 없이 직접 호출이 가능하지만, static 메서드는 인스턴스 메서드를 호출할 수 없다.
JVM 메모리 구조
메서드 영역, 힙, 호출 스택 영역으로 나뉜다.
1) 메서드 영역 : 클래스의 클래스 파일(*.class)를 읽어 클래스 데이터를 저장
2) 힙 : 프로그램 실행 중 생성되는 인스턴스가 저장되는 곳
3) 호출 스택 : 메서드 작업에 필요한 메모리 공간을 제공
메서드가 호출되었을 때, 호출스택에 호출된 메서드를 위한 메모리가 할당되고 호출이 끝났을 때 자동으로 반환된다.
가변인자
매개변수의 개수가 고정되어 있지 않은 형태를 가변인자라고 한다.
얼마나 인자가 들어올지 예상하지 못하는 상황에서
String concatenate(STring ... str) { // 실행문 }
다음과 같이 선언하여 메서드를 호출할 때마다 배열을 생성해 편리하게 쓸 수 있다.
초기화 블럭
클래스 변수를 초기화하는 클래스 초기화 블럭,
인스턴스 변수를 초기화하는 인스턴스 초기화 블럭으로 나눠진다. +
class BlockTest{
static{
System.out.println("클래스 초기화 블럭");
}
{
System.out.println("인스턴스 초기화 블럭");
}
}
인스턴스 초기화 블럭은 단순히 { } 를 사용해서 내부에 인스턴스 변수를 초기화하는 구문을 써준다.
이 블럭은 인스턴스가 만들어질 때마다 실행된다.
클래스 초기화 블럭은 static을 붙여, 메모리에 처음 로딩될 때 한번만 수행하게한다.
'Langauge > Java' 카테고리의 다른 글
Java InputStream에서 File 객체로 변환하기 (0) | 2022.03.21 |
---|---|
Java의 정석 Chapter7.객체지향 프로그래밍2 (0) | 2022.03.13 |
Java의 정석 Chapter5. 배열 (0) | 2022.03.07 |
Java의 정석 Chapter3. 연산자 / Chapter4. 조건문과 반복문 (0) | 2022.03.07 |
Java의 정석 Chapter2. 변수 (0) | 2022.03.07 |