Java | OOP(1)

Dana·2021년 11월 8일

구조적인 프로그래밍이란?

  • 절차로 구성된 프로그램에서 기능별로 잘라 구조를 만든 형태

왜 필요한지?

  • 프로그램을 효율적으로 관리하기 위해 생김
  • 프로그램을 기능별로 구성하기 위해 생김
  • 절차적 프로그램에서 진화함

어떻게 활용하는지?

  • 기능별로 함수를 만듦
  • 함수를 보고 프로그램이 어떤 기능을 하는지 짐작할 수 있음
  • 프로그램의 흐름을 알 수 있음

함수

Class의 생성과 사용

  • 기능 설명 면에서는 TV
  • 클래스를 바탕으로 객체 생성하는 건 냉장고
  • 참조변수 선언은 강아지를 생각하면 됨

클래스는 말그대로 설계도이다.(이하 클래스=설계도) 클래스 즉, 설계도를 한 번 정의 해놓으면 TV든 냉장고든 계속 찍어낼 수 있다. 클래스(설계도)를 참조해서 객체를 생성해낸다.(new) 만들어낸 냉장고, TV는 그저 객체이다. 클래스로부터 인스턴스화 된 것이다. 이 녀석들은 이름이 없는데, 사용하기 위해선 이름이 필요하다. (강아지로 예를 들기에 강아지는 너무 귀엽지만, 이름을 지어주는 예시로는 강아지만한 게 없다.) 우리는 생성된 객체에 이름을 지어줘야한다. 그래야 불러서 사용할 수 있다.

TV 설계도에서는 1)속성과 2)기능을 정의해준다. TV로 예를 들어보겠다.
1) TV의 속성인 가격, 색, 브랜드 등...
2) TV의 기능인 전원 on, off, 볼륨 UP, Down...

속성인 가격, 색, 브랜드 등은 멤버변수,
기능인 전원 on/off와 같은 기능들은 앞으로 메서드로 부를 것이다.


문제상황

  • 예를 들어, 우리는 성적입력 프로그램을 만들고자 함. 국,영,수 점수를 입력받으려고 하는데 중복이 너무 싫음.
  • Exam 이라는 걸 하나 만들어서 국,영,수 점수를 그걸 한번에 관리하고 싶음

해결

  • Exam 이라는 클래스를 만들어서 int 국, 영, 수 선언해주면 그 방에는 국,영,수 이름이 생성됨
  • Exam은 참조형일까? 기본형(값)일까?
    참조형임(int 이런 애들 말고는 참조형)
  • 참조형은 기본적으로 null 값을 가지고 있음 (초기화)
Exam exam; 
exam = new Exam(); //우리가 설계한 방이 생성됨
exam.kor = 30;
  • exam.kor = 30; → exam 안에 있는 kor 방에 30을 넣어달라는 뜻인데
  • new 를 통해 생성을 안했으니 공간이 없는데 넣으려는 거랑 똑같음
  • new 를 통해서 새로 만들어줘야 쓸 수 있음 (메모리에 실제로 존재하게됨) 그렇지 않으면 이름만 존재함
Exam exam = new Exam(); 
  • 참조변수는 공간이 존재하지 않음 (객체의 이름임, 객체를 불러서 사용하려면, 강아지나 친구처럼)
  • exam 은 참조변수 (포인터와는 개념이 다름, 포인터는 포인터 자체가 공간임, 그래서 포인터의 포인터도 존재 가능)
  • 만든 다음에 그 방에 .을 찍으면 거기에 정의된 기능들 쓸 수 있음
  • 객체를 TV, 냉장고로 생각해도 좋음, 강아지로 생각해도 좋음
profile
잘하는 건 아닌데 포기하지 않을 거야. 난 키가 별로 크진 않지만 농구를 포기하지 않을 거야. 쓸 데 없는 배움은 없다.

0개의 댓글