객체지향 프로그래밍
OOP (Object Oriented Programming)
객체지향 프로그래밍 = 자바 ? (❌)
자바는 OOP의 하나일 뿐 자바 자체가 객체지향 프로그래밍은 아니다.
객체란?
눈에 보이는 모든 사물, 세상에 존재하는 모든 것
➤ 객체와 인스턴스의 차이는 무엇일까?
Object 와 instance는 같은 때 사용하는데 차이가 있을까?
여러 글들에서 객체와 인스턴스의 차이를 두지 않고 있는데 용어의 사용에서 차이가 있다고 해서 궁금해졌다.
이 부분은 정확하진 않지만 많은 글들을 참고해봤다.
객체는 객체를 선언하고 아직 메모리를 차지하기 전의 상태를 얘기하고
인스턴스는 실제로 메모리가 할당된 상태를 말한다고 한다. (인스턴스화 한다고 한다)
객체는 청사진을 토대로 이런 물건을 만들어야겠다 라고 생각하고 아직 실물은 없는 거고
인스턴스는 실제로 물건을 만들어서 실물로 만든 상태인 것이다...
왜 이 두가지에 차이를 두는지 아직은 잘 모르겠다. 🤔
공부하다보면 언젠가 깨닫게 되지 않을까..
※ instantiate (인스턴스화) : 클래스로부터 객체를 만드는 과정, 컴파일러가 클래스 정보를 토대로 힙 메모리에 객체를 만들 공간을 지정하고 클래스 정보를 옮겨서 인스턴스를 만드는 일련의 과정을 의미합니다. 쉽게 말해 청사진을 토대로 만드는 과정
Class
- 클래스명은 일반적으로 대문자로 시작
- 객체를 여러개 만들어낼 수 있는 틀, 설계도, 청사진
- 필드(속성), 메소드(기능), 생성자로 구성됨
field (멤버변수)
클래스 내의 속성을 나타냄
자바의 변수의 종류
1. 클래스 변수 (=static 변수 =정적변수)
static int serialNum = 1001;
- 클래스가 생성될 때 함께 생성됨
- 인스턴스 변수와 같은 위치에서 선언하지만 static이 앞에 붙음
- 선언된 클래스에 존재
- 인스턴스로 클래스 변수에 접근가능 ☞ 인스턴스명.변수명
- 클래스명으로도 접근 가능 ☞ 클래스명.변수명
- 어떻게 접근하든 같은 클래스 변수로 도착함
- 보통 하나의 변수를 여러 객체에서 공통으로 사용할 때 클래스 변수로 만듬
2. 인스턴스 변수
int inst = 100;
- 인스턴스가 생성될 때마다 생기는 변수
- 인스턴스마다 다른 힙 메모리에 저장됨
- 반드시 인스턴스를 생성해야만 접근 가능
3. 지역변수
- 메소드에 선언된 변수
- 메소드가 끝나면 스택 메모리에서 사라짐
static
- 클래스의 멤버에 사용가능
- static이 붙은 멤버는 정적멤버 (static member)
- static이 붙은 변수(클래스 변수)는 인스턴스를 생성할 때마다 양산되지 않음
- 클래스명과 포인터로도 접근 가능
- 프로그램이 실행될 때 딱 한번만 스택 메모리 공간에 공간 할당됨
method
- 클래스 내의 기능을 담당
- 함수
- 메소드는 클래스변수와 같은 공간에 저장됨(메소드 영역) 같은 클래스로 만든 인스턴스는 모두 하나의 메소드를 공유함
- method signature와 method body 로 나뉨
접근제어자 반환타입 메서드명(매개 변수) { // method signature
메소드 내용 // method body
}
- 반환타입이 없으면 void ☞ return 안써줘도됨
- 반환타입이 있으면 return 뒤에 반드시 같은 반환타입을 넣어줘야함
- 반환타입은 기본 변수뿐 아니라 참조 변수도 가능
- 포인트(.)를 이용해서 인스턴스 내부의 메소드 호출
- 메소드 호출 시 괄호() 안에 넣어주는 값을 인자(argument)라고 부름
method Overloading
- 클래스 안에 같은 이름의 메소드를 여러개 정의하는 것
- overload는 사전적으로 과적하다, 부담을 지우다 라는 의미
- 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다르게하는 기술
- 자주사용하는 오버로딩으로는 println() 메소드가 있음
- 안에 넣어주는 인자에 따라 다른 println()메소드 호출됨
'TIL(Today I Learned)' 카테고리의 다른 글
5/12 (목) 자바 상속(Inheritance) (0) | 2022.05.12 |
---|---|
5/11 (수) 객체지향 프로그래밍 기초2 (생성자) (0) | 2022.05.11 |
5/9 (월) 자바 배열 / 계산기 만들기 (0) | 2022.05.09 |
5/6 (금) 자바 제어문 (0) | 2022.05.07 |
5/4 (수) JAVA 기초 (0) | 2022.05.05 |