티스토리 뷰

객체 지향 프로그래밍

캡슐화

항상 요구 사항은 추가되거나 변경될 수 있다

1. 객체의 의인화

현실 세계와는 다르게 가상 세계에서의 객체는 능동적이다.

2. 클래스 설계

- 객체가 형태를 갖추면 비슷한 객체들끼리 타입으로  묶어 클래스를 추상화한다.

- 외부와 내부를 구분 지어야 한다. 외부와의 협력은 public 인터페이스를 통해서만 한다.

- 객체가 능동적이기 위해서는 외부로부터의 간섭을 최소화해야 한다.

3. 객체의 특징

1. 캡슐화 - 객체의 세부적인 상태는 감추고 메시지는 오직 public 인터페이스로만 주고받는다.

2. 단일 책임 - 모든 객체는 맡은 일을 외부의 도움 없이 할 수 있어야 한다.

3. 응집도 - 밀접하게 연관되어 있는 일만 수행하고 관련이 없는 일은 다른 객체에게 위임해야 한다.

훌륭한 객체는 외부와 내부의 구분이 잘 이루어져있다. 외부에서 알지 못하는 내부의 상태를 구현이라고 하고
외부에서 접근 가능한 부분을 public 인터페이스라고 한다.

함수형 프로그래밍

함수를 일급 객체로 간주한다.

MVC 아키텍처

- 모델 (Model) : 컨트롤러가 호출할 때 요청에 맞는 역할을 수행하는 영역이다. 비즈니스 로직을 수행하는 부분이다.

- 뷰 (View) : 사용자에게 보여지는 화면을 만드는 역할을 한다. 사용자와의 상호작용을 위한 인터페이스가 있는 영역이다.

- 컨트롤러 (Controller) : 일종의 조정자 또는 중재자로서, 클라이언트로부터 온 요청을 수행하는 모델 컴포넌트 (서비스 레이어) 를 호춣한다. 수행이 완료된 이후에는 뷰 (View) 로 결과를 반환한다.

Git flow vs GitHub flow vs GitLab flow

GitLab flow 의 장점: 단순하고 릴리즈와 머지 등에 발생할 수 있는 오버헤드를 줄여준다.

Integer 과 int

Wrapper Class 와 Primitive 타입

차이점

제너릭이나 Collection 에서는 Wrapper class 만 사용할 수 있다. null 이 필요하거나 비교가 필요할 때 Wrapper class 를 사용하면 유용하다.

== 와 equals() 의 차이

== 는 메모리 주소를 비교하는 것이고, equals() 는 내용을 비교하는 것이다.

Call by Value, Call by Reference

Stack 영역에 있는 변수가 수정되지 않는 것은 값만 가져오는 것이기 때문이다.

그러나 객체를 참조하고 있는 변수를 가져온 경우에는 같은 객체를 참조하기 때문에 객체도 변한다.

둘 다 Call by Reference 이다.

Garbage Collection

Garbage Collector 의 구조
Reachability 와 Unreachability

stop the world 가 있다.

young generation 과 old generation 이 있다.

eden 과 survivor 영역이 있다.

minor GC 와 full (major) GC 가 있다.

mark and sweep 으로 이루어진다.

reachable 과 unreachable 을 분리한다.

 

JVM

Interpreter vs JIT compiler

한 줄씩 명령어 단위로 해석해서 실행하는 인터프리터와, 모두 native code 로 변환해 캐시에 저장하여 한 번에 실행하는 컴파일러가 있다.

Stack / Heap / Method Area / PC Register

  • Stack: 스레드 하나당 가지고 있고, 변수들을 저장하는 스택과 Native 코드를 저장하는 스택이 있다.
  • Heap: 동적으로 할당되는 객체들을 저장하며, GC 가 활동하는 영역이다.
  • Method Area: 상수를 가지고 있는 Runtime constant pool 을 가지고 있으며, 모든 스레드가 공유하는 메모리 영역이다.
  • PC Register: 실행되고 있는 명령어의 주소값을 가지고 있다. 스레드마다 하나씩 부여된다.

String

string constant pool 이 존재하여 equals 메서드가 가능하게 만든다. intern() 이 실행되어서 String 을 리터럴로 생성할 때 constant pool 에 있으면 주소값을 반환하기 때문에 리터럴로 선언되면 == 가 true 를 반환하는 것이다.

인터페이스 vs 추상 클래스

  • 인터페이스: 상수와 추상 메서드 외에는 가질 수 없다.
  • 추상 클래스: 추상 메서드 하나만 가지고 있어도 추상 클래스이다.

 

.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함