본문 바로가기
일기/항해99

[항해99 6기] 2주차 개발일지 회고 (객체 지향 프로그래밍과 JVM정리)

by 고구밍 2022. 3. 20.

 

 

 

목차 

더보기

0. 느낀점

 

1. 객체 지향 프로그래밍 (Object Oriented Programming)

- 객체란?

- 객체 간의 관계

- 객체 지향 프로그래밍

- 객체 지향 vs 클래스 지향 장단점

- 키워드

- getter, setter를 사용하는 이유

 

2. JVM (Java Virtual Machine)

- JVM이란?

- JVM필요성

- JVM특징

 

3. 참고사이트

 

 

느낀점

더보기

주특기인 백엔드 Spring을 배우면서, 처음으로 객체 지향 프로그래밍과 JVM을 경험해 보았습니다.

 

처음으로 Getter와 Setter를 사용해 보니 데이터베이스에 정확하고 일관성있는 정보를 주는 방식이 신기했습니다.

 

또한 아래와 같이 python와 html만 다루다가 객체지향이라는 개념을 처음 배우니 힘든 한 주였던 것 같습니다.

패키지 (폴더) .java파일 / html
contllor ~Controller
domain ~
~Repository
~RequestDto
~Timestamped
service ~BlogService
static index.html

 

비록 이해가 안되는 부분이 많았지만, 최대한 많이 익히면서 개념과 원리에 익숙해 져야겠다는 생각이 들었습니다.

 

 

 

 

객체 지향 프로그래밍

더보기

1.객체란?

 

물리적으로 존재하거나(자동차, 책, 사람),

추상적인 것(회사, 날짜) 중에서 자신의 속성과 동작을 가지는 모든 것을 말합니다.

객체는 속성(필드)과 메소드(동작)로 구성된 자바 객체로 모델링 할 수 있다.

 

 

2. 객체 간의 관계

 

객체 지향 프로그램에서는 객체는 다른 객체와 다른 객체와 관계를 맺고 있다.

 

집합 관계
완성 품과 부품의 관계

사용 관계
객체가 다른 객체를 사용하는 관계

상속 관계
종류 객체와 국체적인 사물 객체 관계 

 

 

3. 객체지향 프로그래밍

 

부품 객체를 만들고 이것들은 하나씩 조립해서 완성된 프로그램을 만드는 기법

ex) 슬라이딩 배너

(next,prev 버튼, auto 기능, 정지버튼 기능등의 부품 객체를 모두 조립하여 하나의 슬라이딩 객체가 완성

 

 

4. 객체 지향 vs 클래스 지향 장단점

구    분 객체지향 클래스지향
처리 방식 문제를 여러 개의
객체 단위로 나누어 처리하는 방식 
문제를 여러 개의 함수로
나누어 순차적으로 호출하여  처리하는 방식
장       점 최근 가장 많이 사용하는 방식임
협업이 중요한 대형 프로젝트에 적합함
간단하고 소규모 프로젝트에 용이함
비교적 배우기 쉬움
단       점 학습 난이도가 높음
개발자의 활용 능력이 중요함
오래된 방식이며 협업으로
진행하는 큰 프로젝트에는 적합하지 않음

 

5. 키워드

 

이    름 특    징
클래스
어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 
속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것으로 
객체를 만들기 위한 메타정보라고 볼 수 있음

인스턴스
클래스에서 정의한 것을 토대로 
실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터

추상화

객체 지향 프로그래밍에서는 '추상화' 라는 단어를 여러 군데 붙일 수 있음
여기서 말하는 추상화는 추상 클래스나 추상 클래스가 갖는 추상 메서드를 의미하기보다는 클래스를 설계하는 것 자체를 의미한다.​
즉, "공통의" 속성이나 기능을 묶어 이름을 붙이는 것이다.​
캡슐화

코드를 재 수정 없이 재활용하는 것 )

관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 객체 재활용이 원활​
접근 제어자를 통한 정보 은닉)
객체가 외부에 노출하지 않아야 할 정보 또는 기능을
접근제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근하도록 할 수 있기에
코드의 수정이 일어났을 때 책임이 있는 객체만 수정하면 되기에 영향 범위를 예측하는데 수월함
상속


부모 클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하고 기능의 일부분을
변경해야 할 경우 상속 받은 자식 클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것
다중상속은 불가)
클래스의 상속 관계에서 혼란을 줄 수 있기 때문에 상속은 반드시 하나만 가능하고
필요에 따라 인터페이스를 사용할 수 있게 함
다형성

하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것
오버라이딩)
부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는 것
오버로딩)
같은 이름의 함수를 여러 개 정의하고, 
매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것
Getter

자료에 무언가 더하거나 빼고 주는 것이 가능
Setter setter에서 유효 범위를 넘은 정수가 들어왔을 때의
처리를 하고 나서 set하거나 예외 처리를 해버릴 수 있는 것

 

6. getter, setter 를 사용하는 이유

 

멤버변수에 직접 접근하지 못하게 private으로 접근 지정자를 설정하고 public으로 getter, setter 메서드를 만드는 것을 많이 해왔다.​

 

-> 그러면 아무나 접근 가능한데 왜 private을 할까?

 

-> getter, setter를 사용하면 

 

->메서드를 통해서 접근하기 때문에, 메서드 안에서 매개변수같이 

어떤 올바르지 않은 입력에 대해 사전에 처리할 수 있게 제한하거나 조절할 수 있기 때문이다.​

 

 

데이터의 정확성일관성을 유지하고 보증하는 것   

 

ex) 물건의 가격은 음수일 수 없다. -> (price > 0)

음식의 가격, 갯수가 음수가 온다면 데이터 형식에 맞지 않기 때문이다.

 

 

JVM (Java Virtual Machine)

더보기

1. JVM이란?

JAVA Virtual Machin의 약자로

가상머신이란 프로그래밍의 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.

JVM역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다.

 

JAVA와 OS사이에서 중개자 역할을 수행하여-> JAVA가 OS에 구애받지 않고 재사용을 가능하게 해준다.

메모리관리, Garbage collection을 수행한다.

스택기반의 가상머신이다.

 

 

 

2. JVM필요성

한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위해

동일한 기능의 프램이더라도 메모리 관리에 따라 성능이 좌우다.

메모리 관리가 되지 않은 경우 속도저하 현상이나 튐김 현상 이 일어 날 수 있다.

 

 

3. JVM특징

 

스택 기반의 가상 머신
대표적인 컴퓨터 아키텍처인 인텔 x86 아키텍처나
ARM 아키텍처와 같은하드웨어가 레지스터 기반으로 동작하는 데 비해 

JVM은 스택 기반으로 동작
한다.
심볼릭 레퍼런스
기본 자료형(primitive data type)을 제외한 모든 타입(클래스와 인터페이스)

명시적인 메모리 주소 기반의 레퍼런스가 아니라 심볼릭 레퍼런스를 통해 참조한다.
가비지 컬렉션
(garbage collection)

클래스 인스턴스는 사용자 코드에 의해 명시적으로 생성되고 

가비지 컬렉션에 의해 자동으로 파괴된다.
기본 자료형을 명확하게
정의하여 플랫폼 독립성 보장

C/C++ 등의 전통적인 언어는 플랫폼에 따라 int 형의 크기가 변한다.

JVM은 기본 자료형 명확하게 정의하여 호환성을 유지하고 플랫폼 독립성을 보장한다.

네트워크 바이트 오더
(network byte order)

자바 클래스 파일은 네트워크 바이트 오더를 사용한다.

인텔 x86 아키텍처가 사용하는 리틀 엔디안이나,
RISC 계열 아키텍처가 주로 사용하는 빅 엔디안 사이에서

플랫폼 독립성을 유지하려면 고정된 바이트 오더를 유지해야 하므로
네트워크 전송 시에 사용하는 바이트 오더인 네트워크 바이트 오더를 사용한다.

네트워크 바이트 오더는 빅 엔디안이다.

 

 

 

3. 참고사이트

더보기

객체 지향 프로그래밍

https://webclub.tistory.com/155

 

객체지향 프로그래밍이란?

객체지향 프로그래밍 정의 객체지향 프로그래밍(Object Oriented Programming)은 문제를 여러 개의 객체 단위로 나눠 작업하는 방식을 말합니다. 이 방식은 오늘날 가장 많이 사용하는 대표적인 프로그

webclub.tistory.com

https://jeong-pro.tistory.com/95

 

객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)

객체 지향 프로그래밍(Object Oriented Programming) 여러 소프트웨어 관련 IT기업 신입사원 기술면접에서 면접자들 긴장을 풀어줄 겸 워밍업으로 자주 나오는 질문이다. "객체 지향 프로그래밍에 대해

jeong-pro.tistory.com

JVM

 

https://asfirstalways.tistory.com/158

 

#자바가상머신, JVM(Java Virtual Machine)이란 무엇인가?

#JVM이란? JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다 (가상머신이란 프로그램의 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.) JV

asfirstalways.tistory.com

https://d2.naver.com/helloworld/1230

 

 

객체지향 프로그래밍이란?

객체지향 프로그래밍 정의 객체지향 프로그래밍(Object Oriented Programming)은 문제를 여러 개의 객체 단위로 나눠 작업하는 방식을 말합니다. 이 방식은 오늘날 가장 많이 사용하는 대표적인 프로그

webclub.tistory.com