22/05/22

안은주·2022년 5월 30일
0
💡 Spring 강의 듣고 이해하기!!

[학습내용]


객체지향 프로그래밍

객체란?

  • 객체는 말 그대로 어떤 특정 객체를 나타낸다.
  • 객체는 동작을 하는 모든 물체라고 이해하면 된다.
  • 세상의 모든 것, 모든 물체는 객체가 될 수 있다.
  • 우리가 사는 세상은 모두 객체로 이루어져 있다. 그렇기 때문에 객체 지향 프로그래밍이 현실게계를 가장
    잘 반영한 프로그래밍 방법이라는 말이 있다.

예를 들어

# **핸드폰** : 전화를 건다, 전화를 받는다, 번호를 누른다 등등의 동작을 하는 객체이다.
# **마우스** : 오른쪽 클릭을 한다, 왼쪽 클릭을 한다, 드래그를 한다 등등의 동작을 하는 객체이다.
# **가방** : 물건을 넣는다, 지퍼를 잠근다 등등의 동작을 하는 객체이다.
  • 자바에서 이런 객체는 클래스로 표현되고 객체들이 하는 동작은 클래스의 내부 메소드(프로시저)로 표현된다.

객체 지향이란?

  • 프로그램의 실행의 단위를 단순이 데이터의 처리 방법으로 나누는 것이 아니라, 특정 객체들을 만들어서 이들의 상호 연결을 통해 프로그래밍을 구현한다.
  • 객체 지향 프로그래밍은 우리의 현실과 가장 밀접한 관련이 있는 프로그래밍 방법이다.
  • 객체는 기능을 하는 물체라고 생각하면 된다.
# **자동차** : 달린다, 멈춘다, 핸들을 꺾는다 등의 기능을 하는 객체
# **사람** : 먹는다, 달린다, 잔다, 등의 기능을 하는 객체
# **학생** : 먹는다, 간다, 탄다, 등의 기능을 하는 객체

객체지향의 기본 구성 요소

  • 클래스(Class) - (객체의 설계도 = 틀)
    • 공통된 속성과 연산을 갖는 객체의 집합
    • 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀
    • 클래스에 속한 각각의 객체를 인스턴스(Instance)라고 함.
  • 객체(Object) - (클래스를 이용해 만든거)
    • 클래스의 인스턴스로, 실제로 메모리상에 할당된 것
    • 자신 고유의 속성을 가지며, 클래스에 정의된 행위를 수행
    • ex) 사람, 자동차, 주문, 생산, 관리
  • 메소드(Method) - (클래스에 선언된 함수)
    • 특정한 기능을 정의해놓은 명령의 집합.
    • 메소드는 속성(변수)을 변화시키는 데에 사용한다.
      • 정적 메소드는 정적 변수들을 변화시키고, 인스턴스 메소드는 객체의 속성을 변화시킨다.
    • 꼭 속성을 변화시키는 것은 아니고, 주요 기능이 속성을 변화시키는 것이다.

객체지향의 특징

💥상속

  • 기본 클래스(Car)의 공통 속성과 기능을 물려받고, 더 필요한 부분은 자식 클래스에서 추가하고 변경하는 것.
  • 이 때 기본 클래스는 부모클래스 (또는 상위 클래스), Parent, Super, Base class 라고 부름.
  • 기본 클래스 기능을 물려받는 클래스는 자식클래스(또는 하위클래스), Child, Sub, Derived class라고 부름.
  • 코드 재사용이 가능하며, 공통 기능의 경우 기본 클래스 코드만 수정하면 된다는 장점이 있음.

💥 추상화

  • 하위 객체들의 공통적인 속성,메소드를 추출하여 상위객체로 만든 것. 이는 객체 모델링이라고도 함.

자동차 객체

  • 속성 : 차종, 현재기어, 속도 ...
  • 행위 : 시동을건다, 속도를높인다, 속도를줄인다, 시동을끈다 ...

저가형 자동차 객체 (자동차 객체 상속)

  • 속성 : 차종, 현재기어, 속도 ...
  • 행위 : 시동을건다, 속도를높인다, 속도를줄인다, 시동을끈다 ...

고급형 자동차 객체 (자동차 객체 상속)

  • 속성 : 차종, 현재기어, 속도, 드라이브모드 ...
  • 행위 : 시동을건다, 속도를높인다, 속도를줄인다, 시동을끈다, 네비게이션켜기드라이브모드_변경 ...
  • 즉, 저가형 자동차와 고급형 자동차의 공통적인 속성과 메소드를 자동차 객체로 추상화함.
  • 상속받은 클래스는 석성과 메소드를 재정의하거나 새롭게 추가할 수 있음.

  • 토끼, 치타, 고양이, 사자는 기어다니고, 소리내고, 꼬리가 있고 공통적인걸 동물로 묶음.

💥 추상클래스 vs 인터페이스

https://myjamong.tistory.com/150

💥 캡슐화

  • 캡슐화란 객체의 속성과 함수를 하나로 묶은 것이다.
  • 객체 외부에서는 객체 내부 정보를 직접 접근하거나 조작할 수 없고, 외부에서 접근할 수 있도록 정의된 오퍼레이션을 통해서만 관련 데이터에 접근할 수 있다. (getter,setter)
  • 캡슐화의 장점은 객체의 세부내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류발생이 적으며 재사용이 용이하다.
  • 정보 은닉이란 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.
  • 자바는 이러한 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공
    • private
    • public
    • default
    • protected

참고 자료 👉🏻 https://velog.io/@turtle601/객체-4대-특성-캡슐화정보은닉

💥 다형성

  • 자동차라는 클래스를 상속받은 K3, 아반떼, 테슬라 모델은 자동차라는 공통적인 기능은 다 가지고 있고,
    상속 받아서 서로 다른 속성이나 기능을 추가할 수 있음.
  • 상속과 연관있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러형태(객체)로 재구성 되는 것을 말한다.
  • 쉽게 말하면 한 부모의 밑에서 태어난 자식들이 조금씩 다르다는 것이다.
  • 오버로드(Overload) 또는 오버라이드(Override)가 다형성의 대표적인 예라 할 수있고, 
    이것을 구현하는 걸 오버로딩(Overloading)과 오버라이딩(Overriding)이라고 한다.

오버라이딩은 하위 클래스(자식)가 상위 클래스(부모)에서 만들어진 메서드를 자신의 입맛대로 다시 재창조해서 사용하는 것을 말한다.

오버로딩은 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현하는 것을 말한다.

오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 개수나 데이터 타입이 달라야 한다.


JVM

  • JVM Java Virtual Machine (자바 가상 머신)의 줄임말.
  • 자바 가상 머신 JVM(Java Virtual Machine)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어.
  • 자바 코드를 컴파일하여 .class 바이트 코드로 만들면 이 코드가 자바 가상 머신 환경에서 실행. J
  • VM은 자바 실행 환경 JRE(Java Runtime Environment)에 포함되어 있음.
  • 현재 사용하는 컴퓨터의 운영체제에 맞는 자바 실행환경 (JRE)가 설치되어 있다면 자바 가상 머신이 설치되어 있다는 뜻입니다.

Java는 어떠한 플랫폼에 영향을 받지 않는다.

  • JVM을 사용하면 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작하도록 할 수 있습니다.

.class 파일은 바이트 코드라고 하는데 사람이 쓰는 자바 코드에서 컴퓨터가 읽는 기계어로의 중간 단계라고 생각하시면 됩니다.

- C언어와 Java 비교

https://blog.kakaocdn.net/dn/bSyyF2/btruTDnDSKz/73EXAY7aiTWRzHKlM2OFpK/img.png

C언어의 경우

  • C언어로 작성된 Test.c가 있음
  • 이 Test.c를 윈도우 컴파일러를 사용해서 컴파일하면 Test.exe가 만들어짐.
  • 윈도우 컴파일러로 컴파일되었기에 Test.exe는 윈도우에서만 실행되는 실행 파일.
  • 리눅스 운영체제에서는 실행 못함. 즉 C / C++에서는 컴파일 플랫폼과 타겟 플랫폼이 다를 경우에는 프로그램이 동작하지 않음.
  • 만약 이 Test.exe 파일을 리눅스 운영체제에서 실행하려면 리눅스 환경을 타겟으로 크로스 컴파일을 해서 리눅스 운영체제에 맞는 실행 파일을 새로 만들어야 함.

https://blog.kakaocdn.net/dn/56cSc/btruTEtjRXJ/r1JNTkEuEeY8cSKtqcXCRK/img.png

Java의 경우

  • Java의 경우에는 Java언어로 작성된 Test.java는 컴파일하면 Test.class 파일이 생성.
  • 생성된 바이트 코드는 각자의 플랫폼에 설치되어 있는 자바 가상 머신(JVM)이 운영체제에 맞는 실행 파일로 바꿔줌.
  • 즉, Java에서는 C언어와는 달리 JVM을 사용하기 때문에 각자의 플랫폼에 맞게끔 컴파일을 따로따로 해줘야 할 필요가 없음.
  • 하나의 바이트 코드로 JVM이 설치되어 있는 모든 플랫폼에서 동작이 가능.

※ Java는 플랫폼에 종속적이지 않지만 JVM은 플랫폼에 종속적이다.

  • Java는 컴파일된 바이트코드로 어떤 JVM에서도 동작시킬 수 있기 때문에 플랫폼에 의존적이지 않음.
  • 하지만 반대로 자바 가상 머신(JVM)은 플랫폼에 의존적.
  • 즉 리눅스의 JVM과 윈도우의 JVM은 서로 다름.
  • 자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 함.
  • 따라서 오라클은 대부분의 주요 운영체제뿐만 아니라 웹 브라우저, 스마트 폰, 가전기기 등에서도 자바 가상 머신을 손쉽게 설치할 수 있도록 지원.

자바 프로그램의 실행 과정과 JVM

https://blog.kakaocdn.net/dn/bXdEIg/btru3sF159q/aS1KNKZS4xGeQTnRnZuoy1/img.png

  • 우리가 자바로 .java 코드를 작성하고 파워쉘이나 터미널에 있는 자바 컴파일러인 javac에 컴파일 명령을 내리면 .class 파일이 만들어짐.
  • 이후 이 바이트 코드는 클래스 로더를 통해 JVM Runtime Data Area로 로딩되고,
  • 로딩된 .class 바이트 코드를 실행할 컴퓨터에 깔린 JVM에 가져다주면 그 컴퓨터가 이 프로그램을 실행할 때 이 JVM이 그때그때 기계어로 해석.

🗒 MEMO

💡 잠이 부족해서 너무 힘들다ㅜㅠ

회고🤔


오늘은 또 스프링 공부 하려고 했는데 WIL 쓰느라 두시간 날렸다.ㅎㅎ

이번주 WIL 키워드는 “객체지향 프로그래밍" 과 “JVM”이었다.

객체지향의 의미는. 의미만은 정말 잘 알겠는데 막상 코드로 실천하려면 정말 어려운 것 같다.

그래서 객체지향을 부셔보겠다는 생각으로 2시간을 썼다,,ㅎ

이게 맞는건진 모르겠는데 여튼!

이번엔 이해 잘 됐으니까 코드 짤 때도 잘 정리가 됐으면 좋겠다.

profile
우당탕탕 개발일지🤣

0개의 댓글