느리더라도 꾸준히

회고록(10) - OOP기초 본문

(CodeStates)Daily memoir

회고록(10) - OOP기초

테디규 2022. 11. 4. 00:50

1. 지금 현재, 당신의 기분이나 느낌을 표현해 주세요.

오늘 세션이 끝나고, 다른 동기들의 질문을 보고있었는데, 배운개념을 넘어서 좀더깊은 원리를 궁금해하는 질문들이 있었다. 특히 JVM이 어떻게 동작하는가? 와 같은 질문을 봤는데, 내가 막연히 궁금해 했다가 넘어가자 하고 넘어갔던 거라서 그 부분을 알아보려고 노력했다는 사실이 개발자스러웠다.

나도 궁금한 개념이나 작동원리들?을 todolist에 적어두고 내가 할수 있는 선에서 최대한 알아보자. 그리고 질문해보자. 현직 개발자에게 이것저것 질문할수 있는 기회가 어디 쉬운가?

2. 오늘 무엇을 학습한 내용 중 지금 떠올릴 수 있는 단어를 모두 나열해 주세요.

객체, OOP, 클래스, 멤버 (필드, 메서드, 내부 클래스), 생성자, 클래스 영역, 스택영역, 힙영역, static 키워드, 메서드의 오버로딩

3. 2에서 작성한 단어를 가지고, 오늘의 학습 내용을 설명해 보세요.

1. 객체란?

프로그래밍적으로는 속성과 기능으로 구성된 실재하는 어떤 대상

객체프로그래밍이란?

실제세상과 비슷한 역할을 하는 객체들을 만들고, 서로 상호작용을 통해 프로그래밍 하는 방식

객체의 구성요소

객체는 속성과 기능으로 구성되어 있다.

클래스와 객체의 관계

객체는 클래스의 인스턴스화를 거치며 생성됩니다. 이때 속성은 필드가 기능은 메서드가 담당하여 생성합니다.

클래스는 생성한 객체를 표현하는 커스텀 타입으로써 사용되기도 합니다.(ex) student 클래스, Car 클래스)

2.클래스

정의

객체를 생성하는데 사용되는 하나의 툴이다. 쉽게 말하면 객체를 만들기 위한 거푸집으로 볼수 있다.

이러한 클래스를 통해 만들어진 객체를 인스턴스라고 부른다. 객체는 모든 인스턴스를 포괄하는 의미라면, 인스턴스는 인스턴스를 만든 해당 클래스를 강조하기 위해서 표현되는 단어이다.

구성

클래스는 멤버인 필드,메서드, 내부클래스 와 생성자로 구성되어 있다.

필드

객체의 속성을 담당하고 있으며, 클래스의 포함된 변수를 뜻하고 있습니다. 필드는 아래 세가지로 나눌수 있습니다.

클래스변수
인스턴스변수
지역변수

클래스 변수

  • 클래스 영역에 저장되며 모든 인스턴스들이 공유하는 값을 가지고있는 변수입니다.
  • 단 공통적이므로 변경시, 많은 객체(인스턴스)들에게 영향을 끼칠수 있습니다.
    • (ex) 사람객체로 숨을쉬는지/안쉬는지, 옷을 입는지/안입는지)
  • static 키워드를 변수타입앞에 사용하여 사용할 수 있습니다.

인스턴스 변수

  • 힙 영역에 저장되며, 인스턴스를 생성했을시에만 사용할 수 있는 변수입니다.
  • 각 개별 인스턴스의 속성을 의미하고 있는 변수입니다. (ex) 사람의 취미, 재산 등)

지역 변수

  • 메서드 안에서 생성되는 변수를 말합니다.
  • 메모리 낭비를 막기위해, 메서드가 호출될때만 스택메모리에 저장되었다가 메서드 종료와 동시에 함께 사라집니다.
  • 위의 두 변수는 값이 존재해야하는 영역에 있으므로, 자동으로 초기화가 진행되지만, 지역변수는 자동으로 초기화가 되지 않습니다.

메서드

객체의 기능을 담당하고 있으며, 일련의 명령문 집합을 의미합니다.( 주로 동사!)

  • 메서드 시그니처(반환값, 메서드명, 매개변수)와 메서드 바디로 구성되어 있습니다.
  • 클래스 내부에 존재하는 메서드들끼리는 static 메서드가 아닐지라도, 객체를 생성하지 않고 서로 호출이 가능합니다.
  • 반환타입과 반환값 그리고 매개변수와 인자(호출에 필요한 값)는 서로 같은 타입이거나 자동형변환(값 작은거 -> 타입 큰거)이 가능한 타입이여야 합니다.

static 메서드

인스턴스의 변수나 메서드 참조없이 메서드를 사용하기 위해 생성합니다.

우리가 자주 쓰는 String.format(매개변수), Math.max(매개변수) 등은 각각의 String, Math 클래스안의 변수를 사용하지 않고, 인자값 만으로 사용할수 있습니다.

오버로딩

하나의 클래스안에 같은 이름의 메서드를 만들었을때, 오버로딩이 동작합니다.

이때 메서드의 이름 같지만, 타입의 종류나 개수가 다를때 메서드 오버로딩이 동작 할수 있습니다.

4. 설명하기 어려운 단어가 있다면, 그 이유는 무엇인가요?

객체 프로그래밍

객체간 상호작용을 프로그래밍한다는 의미가 너무 추상적으로 보인다.

5. 그 단어를 스스로 설명할 수 있기 위해서 누군가에게 질문을 한다면, 어떤 질문을 해야 할까요?

객체간 상호작용에는 어떤 것들이 있을까요?

Comments