객체지향 프로그래밍
- OOP의 장점
- 실행이 빠름
- 구조가 깔끔하고 명확
- 코드를 DRY(Don't Repeat Yourself) 상태를 유지할 수 있다
- 유지보수가 쉽다
- 높은 재사용성
Class / Object(instance) / Method
-
Class <붕어빵 틀> : 같은 종류의 집단에 속하는 속성(변수)과 행위(메소드)를 정의한것
-
Object(instance) : 클래스의 속성을 가지고 있으면서 개별적인 특성과 행위 또한 가지고 있다
- instance는 특정 객체가 어떤 클래스의 객체인지 관계 위주로 설명할 때 사용
-
Method : 클래스로부터 생성된 객체를 사용하는 방법. 객체를
Class 선언1
클래스 선언하기
Class 선언2
- 생성자가 정의된 게 없다면, 자바 컴파일러가 디폴트 생성자를 생성해줌
- 생성자 : 객체를 생성 하면서 해야할 일들, 하고싶은 일들을 강제(정의)하는 역할
- ex) student 객체 생성 시 반드시 이름을 갖고 있어야 한다.
Class의 속성
Class의 Rule
- 클래스는 대문자로 시작한다.
- 하나의 java 파일에는 하나의 클래스를 두는것이 원칙 이지만 여러개의 클래스가 존재할 수 있다.
- BUT : Public Class는 단 하나이며, Public Class 이름과 자바 파일의 이름은 동일해야 함
- 모든 클래스가 main method를 가질 필요가 없다
- BUT : 프로그램내 한가지 메인 메써드는 필요하다.
용어정리
참고 : 자바의 메모리 공간
1) 코드 영역 - 실제 프로그램 코드가 적재되는 영역
- java로 작성된 프로그램이 컴파일 후 바아너리 파일(.class)로 변환한 후 JVM을 통해 실행
- 이 파일 내의 프로그램에 대한 전체적인 코드 자체가 올라가는 영역
2) 데이터 영역 - 프로그램이 실행되는 동안 항상 접근이 가능한 변수가 저장되는 영역(global variable)
3) 스택 영역 - 메서드 내에서 정의된 지역변수가 저장되는 메모리 영역
- 함수의 호출은 자료구조 주의 하나인 스택 구조를 가짐
- Stack <LIFO-Last In, First Out> : 가장 마지막에 들어간 것이 가장 먼저 나오는 구조
(ex : 프링글스)
- 함수는 다른 함수를 호출하고ㅡ 그 함수는 또 다른 함수를 호출함. 처리가 완료되면 그 결과물을 다시 자신을 호출한 함수에게 반환함.
- 함수의 호출이 메모리에 차곡차곡 적재되고, 처리가 끝나면 메모리에서 해제됨.
- 즉, 함수 호출을 위한 메모리 관리 방식이 스택의 동작방식과 유사하기 때문에 메서드 호출을 위한 데이터가 적재되는 영역을 스택 영역이라 칭함.
4) 힙 영역 - 동적 할당을 위한 영역
- 동적할당 : 메모리에 얼만큼 할당할 지 모르는 상황에서.
- 코드, 데이터, 스택 영역은 컴파일러가 미리 공간을 예측하고 할당(Garbage Colletor : GC) 할 수 있지만, 동적 할당은 어느 시점에 어느정도의 공간으로 할당될지 정확하게 예측할 수 없기 떄문에 프로그램 실행중에 결정된다.
- new를 통해 생성하는 객체를 위한 공간.
OOP 추가(day03)
1) 클래스, 객체, 인스턴스의 의미
2) 상속
3) 다형성
4) 추상화 : 복잡함 속에서 필요한 관점만을 추출하는 행위
5) 부품화 : 프로그램은 객체가 모여 만들어짐
- ex) 컴퓨터는 모니터, 키보드, 마우스 등의 부품이 모여 이루어 진것
- 각 모니터, 키보드 마우스는 객체
6) 캡슐화, 은닉화 : 내부의 동작 방식을 숨기고 사용 방법만 노출
- 사용자는 굳이 리모컨 동작 방식을 알 필요 없음
7) 인터페이스 : 연결 가능성, 약속
- ex) 삼성, Lg 모니터는 연결 케이블이 정해진 규격에 맞게 제작되기 때문에 호환가능
- 클래스의 변수에 직접 접근하는 행위를 방지 하는 것
- 클래스 변수의 직접 접근하는 경우 데이터의 무결성을 침범할 수 있음
- 해당 변수를
private
으로 감춰두고 변수 값을 세팅하는 함수를 public
으로 오픈해서 조건문 등의 처리를 통해 변수가 아무렇게나 쓰이는 경주를 방지함
- 접근 제어자:
a) public
: 모든 Class에서 접근 가능
b) private
: 나의 Class 안에서만 접근 가능
c) default
: 같은 패키지 내에서 가능 (접근제어자 명시 없는경우 default
제어자)