728x90
객체지향 프로그래밍
@24.03.25
객체지향 프로그래밍(Object-Oriented Programming)
💡
컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립적인 단위(=객체)들의 모임으로 구성된 것
- 각각의 객체들은 서로 메시지를 주고받고 데이터를 처리할 수 있다.
클래스
💡
클래스의 속성인
@기본 형식
접근제한자 class 클래스명{
[접근제한자] [static] [final] 타입 필드명 [=초기값];
//필드
생성자;
[접근제한자][static][반환타입] 메소드명(매개변수){}
//메소드
}
필드
와 클래스의 기능 혹은 동작인 메서드
를 가진다.@기본 형식
접근제한자 class 클래스명{
[접근제한자] [static] [final] 타입 필드명 [=초기값];
//필드
생성자;
[접근제한자][static][반환타입] 메소드명(매개변수){}
//메소드
}
- 선언 방법
- 첫 문자는 문자나
_
,$
의 특수문자로 시작하며, 숫자로 시작할 수 없다.
- 자바의 예약어는 식별자로 사용할 수 없다.
- 대/소문자를 구분한다.
- 식별자의 길이는 제한이 없고 공백은 포함할 수 없다.
관례
클래스 명은 대문자로 시작한다.
관례
단어와 단어가 만날 경우 2번째 단어의 첫 글자는 대문자로 표기
- 첫 문자는 문자나
- 클래스의 인스턴스 생성 방법
1) new 연산자와 생성자를 이용하여 인스턴스 생성
→클래스명 변수명 = new 클래스명()
2) 클래스 로더 이용
3) 메서드에 있는 인스턴스를 복제
- 매개변수 vs 전달인자
매개변수
: 메서드의 정의 부분에 나열된 변수
전달인자
: 메서드를 호출할 때 전달되는 실제 값
- 클래스의 메소드를 호출하려면 → 클래스에 대한 인스턴스(=객체)를 생성해야 한다!
- static 한 메서드는 인스턴스를 생성하지 않아도, 호출 가능
- 좋은 객체는 응집도는 높고 결합도는 낮다!
추상화
💡
현실에 있는 어떤 것을 구현할 때 실제 존재하는 여러 속성 중 불필요한 것은 버리고, 필요한 속성만 구현한 인터페이스를 제공하는 것
- 추상화 = 객체화
캡슐화
💡
관련있는 변수와 함수를 하나의 클래스로 묶고, 접근 제한자를 통해 외부에서 쉽게 접근하지 못하게 정보를 은닉하는 것
- 접근 제한 자 : 객체를 처음 설계할 때 이걸 누구까지 사용하게 할 거야?
- 클래스 앞, 클래스 내부 속성, 생성자 앞에 붙을 수 있다.
public
: 어디서든 접근 가능
protected
: 같은 패키지 또는 자식 클래스에서 접근 가능
private
: 클래스 내부에만 접근 가능
default
: 같은 패키지 내 클래스에서만 접근 가능
⭐다형성
💡
프로그램 언어의 각 요소들(상수, 변수, 함수, 메서드 등)이 다양한 자료형에 속할 수 있는
특성 ⇒
하나의 객체가 여러 가지 타입을 가질 수 있는 것
⇒
인터페이스는 하나, 어떤 타입의 객체를 넣는가에 따라 결과는 여러 개
특성 ⇒
하나의 객체가 여러 가지 타입을 가질 수 있는 것
⇒
인터페이스는 하나, 어떤 타입의 객체를 넣는가에 따라 결과는 여러 개
단형성
: 프로그램 언어의 각 요소가 한 가지 형태만 가지는 성질
- 구현: 상속, 메서드 오버라이딩, 형 변환 등
자바 메모리
💡
1. new 연산자를 사용할 때마다 메모리에 인스턴스 생성
2. 인스턴스가 더 이상 참조되는 것이 없을 때
(=null) 쓰레기 값이 되며,
이를 가비지 컬렉터가 처리
3.
4.
2. 인스턴스가 더 이상 참조되는 것이 없을 때
(=null) 쓰레기 값이 되며,
이를 가비지 컬렉터가 처리
3.
static 한 필드
는 클래스가 로딩될 때 딱 한 번 메모리에 올라가고 초기화4.
지역 변수
는 메서드가 실행될 때 메모리에 생성되었다가, 메서드 종료 시 제거- 소스코드, 클래스 파일 자체는 정적 → 코드가 작성된 후에는 그 내용이 고정되어 변하지 X
- 클래스 정보는 클래스 파일에 저장되어 있으며, 프로그램 실행 중에는 변경되지 않으므로, 클래스 정보 자체는 정적이다.
- 실행 중에 생성되는 인스턴스와 객체는 동적이다.
- 따라서 프로그램이 실행되면서 메모리에 할당되거나 생성된다.
패키지
💡
관련된 클래스를 모아 패키지 하나로 관리하는 것 (=폴더)
@기본 형식
package 패키지명;
@기본 형식
package 패키지명;
패키지명
: 보통 도메인 이름을 반대로 적은 후 프로젝트 이름을 붙여 생성
패키지 사용
: import 패키지명.클래스명;
728x90