Java 객체지향 Study 1회차

Geun Bo Kim·2023년 4월 8일
0

스터디

목록 보기
2/6

객체 지향이란?

  • 신동현: 설계이다. 객체 지향 프로그래밍은 현실 세계의 객체를 컴퓨터 프로그램 안에서 설계하는 것이라고 할 수 있다.
  • 김은서: 객체 지향을 구글링 하면 가장 기본적으로 다음과 같은 정의가 나온다.

    객체 지향 프로그래밍 (Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

    이 설명을 찬찬히 뜯어보면, 우리가 실제로 프로젝트를 맡게 되면 고객 정보나 결제 수단 등 필요한 정보가 있을 것이다. 그걸 데이터라고 하고, 비슷한 요소의 것들끼리 묶어 이름표를 붙혀주는 걸 추상화라 이해하면 수월할 것 같다. 우리 스터디원들을 모두 모아 추상화시키면 자바 스터디원이라고 추상화 될 수 있다. 객체 또한 일상에서 보던 말이 아니라 주춤할 수 있는데, 눈에 보이는 모든 것이 객체가 될 수 있다는 걸 기억하면 더 쉽게 다가갈 수 있다. 객체는 모두 상태와 행위를 가지고 그 객체들 사이를 끈끈하게 이어주며 서로 영향을 주고 받을 수 있도록 설계하는 것이 객체 지향 프로그래밍의 큰 틀이라 볼 수 있다. 객체를 레고 조각으로 비유하자면 레고 조각을 모두 모아 조립해 하나의 완성작을 만들듯이 객체를 모아 조립해 하나로 완성시킨다. 그러므로 객체 지향의 특징은 부품화와 재사용성이 있는데, 더 깊게 들어가는 내용을 쉽게 이해하려면 자바에 대한 더 깊은 이해가 있을 수록 좋으니 스터디를 진행하며 차근차근 같이 얘기 해 보면 좋겠다. 객체 지향 프로그래밍 참고 글: https://jongminfire.dev/객체지향-프로그래밍이란 다형성 참고 글: https://choi3950.tistory.com/25

객체의 필드와 메서드 나누기

구조체란?

프로그래밍에서 데이터 처리를 위한 데이터 저장 형태의 발전 과정 중 하나로 발전과정은 다음과 같다.

변수 → 배열 → 구조체 → 클래스

변수: 하나의 데이터를 저장할 수 있는 공간

배열: 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간

구조체: 서로 관련된 여러 데이터를 종류에 관계 없이 하나의 집합으로 저장할 수 있는 공간

클래스: 데이터와 함수의 결합 (구조체 + 함수)

  • 송우근: 배열을 선언할 때는 다음과 같다. 데이터 타입[] 배열명 = {}; 해당 배열에서 데이터 타입을 없앴다고 이해하면 수월하다. 수학의 집합을 원소들의 모임으로 봤을 때, 집합과도 유사하다. 배열도 구조체에 포함된다.
  • 질문 (김은양) 자바에서는 구조체라는 개념을 처음 보는데 프로그래밍을 하면서 클래스와 같이 선언할 수 있는 형태인가?
    • 신동현 구조체는 C언어의 개념이므로 자바에서는 구조체를 선언할 수 없는 형태라고 생각한다.
    • 황석빈: C언어에서 쓰이는 구조체는 메서드 선언이 가능하다. 하지만 구조체에서 클래스로 넘어갈 때 객체의 개념이 바뀐다. 구조체는 선언을 통해 바꿀 수는 있지만 기본적으로 public 형태이고, 클래스는 캡슐화라는 개념이 더해져 있는 형태이다.
    • 김은서: 책에서도 데이터 저장 형태의 발전 과정 중 하나라 소개했기 때문에, 처음에는 하나만을 저장하는 변수에서, 변수의 모음인 배열로 발전하고, 하나의 데이터 타입만을 가졌던 배열에서 데이터 타입에 관계 없이 모두 집합할 수 있는 구조체의 형태로 발전하고, 여기에 함수를 더해 클래스의 형태로 발전했다고 생각하면 될 것 같다.

클래스와 인스턴스

  • 문제 (신동현)
    • 이 코드에서 주석처리된 부분을 실행하면 컴파일 에러가 발생하게 되는데, 왜 발생하게 되는건지 이유를 설명해주세요.

      public class Main {
          public static void main(String[] args) {
              int age = 25;
              Person person = new Person(age);
              //int test = person;
          }
      }
    • 설명 (답변) 과 관련 질문

      인스턴스는 참조변수를 통해서만 다룰 수 있고, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다. 위 코드에서는 Person 클래스의 인스턴스를 생성하고, 해당 인스턴스를 참조하기 위해 person 참조변수를 사용한다. 하지만, age 변수는 기본형 변수이므로 객체의 주소를 저장할 수 없기 때문에 int test = person; 코드는 컴파일 오류가 발생한다.

profile
미래는 개발이다

0개의 댓글