JAVA

6주차 객체 지향 프로그래밍 체험

pocacola912 2026. 4. 14. 19:02

+들어가며

 이번에 해본것은 과목 이름이기도 한 객체 지향 프로그래밍 체험이다. 솔직히 그전까지의 코딩 학습들은 메소드 정도에서 강좌가 종강되었고 기껏해야 하나의 클래스에서 여러 메소드를 사용하여 기능을 구현하는 것들 정도라 솔직히 이번 강의는 꽤나 이해하고 감을 잡기까지 걸렸다. 이번 내가 정리할 것은 이론 정리보단 내가 이번에 실습하면서 느낀 것들이나 기억해야하는 것들을 위주로 정리하도록 하겠다

.

+간략한 내용정리

OOP는 주요속성과 기능을 파악후 추상화 하여 부품 객체를 먼저 만들고 하나 씩 조립해 가는 기법으로 객체는 데이터와 기능이 결합된 캡슐화된 것이다.이때 중요한 것이 어떤 객체가 어떤 일을 처리할 것인지 구조와 순서들을 설계하는 것으로 내가 기존해 했던 구현화는 이를 위한 기본 바탕이 되는 지식이고 각각의 독립적인 기능을 만들어 나가는데 사용하게 된다. 예시를 들면 자판기처럼 각 버튼이 어떤 일을 할 것인지 디스플레이는 어떤 것을 할 것인지 등 각 기능들을 세분화하여 객체로 캡슐화하는 것이 중요하기에 각 객체들 관의 상호작용, 그 관계성을 파악하는 것이 매우 중요하다. 주요한 4가지 속성으론 캡슐화, 추상화, 상속, 다형성인데 각각 숨기고 보호하는 것, 본질파악, 일반화와 재활용, 같은 이름을 사용해도 기능은 다를 수 있음을 뜻한다.

 

+본론-내감정들

인사이드 아웃이라는 영화에선 주인공을 조종하는 다양한 감정들이 조종간을 잡고 행동들을 하는 내용인데 이러한 특성이 이번 실습 때 꽤나 들어맞아서 나만의 인사이드 아웃을 만들어보는 것을 실습 주제로 선정했다. 밑은 그 코드 들인데 사진을 보면서 설명해보겠다.

이 클래스에서 중요하게 생각했던건 이 클래스가 이후 유진수 클래스에서 변수명으로서 이용이 되기 때문에 내가 그 배열 변수에 어떤 값을 넣어야하는지 그렇게 하기 위해선 어떻게 생성자를 사용해야하는지에 대한 고민이 필요했고 int value를 받는 생성자만 만든 상태에선 밑의 감정친구들인 버럭이와 슬픔이가 생성되지 못해 오류가 발생해서 아무것도 없는 나의감정들이라는 생성자를 만들어 주는 것이 포인트였다.

다음은 개인적으로 메인보다 더 중요하다고 생각하는 유진수 클래스이다. 메인은 밑에 적은 코드를 보며 설명할꺼지만 사용자의 감정 기복을 기록하는 횟수인 N을 받는 것과 이후 행동 선택지 정도를 while문과 if 문을 통해 구현 하는 것뿐 실제로 기능하는 것들은전부 여기에 있다. 이 코드를 작성하면서 내가 구현하고자 한 것은 나의 삶의 일부로 평소에도 가챠게임을 좋아하기도 하고 또 지금처럼 과제도 하는 평범한 삶을 살아가는데 이때의 활동에 따른 내 감정 지수를 만들고 그에 따른 내 심리 상태를 이후 사용자에게 출력해주는 프로그램이다. 그렇기에 기본생성자로 감정지수,카운트값,emos라는 배열변수를 세팅했고 이후 사용자가 입력할 N값을 받아 배열의 크기를 정하도록 했다. 여기서 많이 해맸던 부분은 저 배열 변수인데 처음엔 저것 역시 기존의 배열처럼 작동하는 줄 알고 그냥 emo[this.count] = 1 과 같은 형태로 값을 저장하려고 시도 했었는데 이게 오류가 발생하여 크게 고생했었다. 이후  클래스이름으로 정의된 배열 변수는 그 클래스를 여러개 저장하는 배열의 형태로 존재하는 것을 알게되고 new class명(값)과 같은 형태로 작성하여 무사히 구현할 수 있었다. 또 현재의 감정지수를 보여주는 메소드, 각 활동들에 따른 메소드를 만들었지만 기본적인 골자가 감정지수의 값을 확인하고 이후 그 값에 따른 숫자 값을 배열에 저장, 사용자가 감정기록을 요구할때 저장된 수를 반복문으로 하나하나 훑으며 각 숫자에 따른 감정 단어 문자열로 번역하여 출력하는 거라 형태로 구성했다. 지금 내 코드는 행동에 따라 감정지수가 깎여 나간 상태에서 각기 다른 감정 값을 배열에 저장하도록 지시했는데 만약 이 부분을 수정한다면 감정 지수의 값을 좀 더 세밀하게 만들어서 행동에 따라 느끼는 감정이 다른 것이 아닌 감정 지수가 얼마나 깎여 나가서 현재 이러한 감정을 느끼고 있습니다와 같은 형태로 수정하면 보다 괜찮은 프로그램이 될 것 같다.

위의 메인이 약간 잘렸지만 크게 문제는 없다. 아까 위에서의 설명과 같이 메인에선 얼마나 그 값을 저장할 것인지에 대한 N을 받는 메소드가 있었는데 간단히 Scanner를 사용해서 N값을 받는 간단한 형태라 더욱. 메인에선 이제껏 만들었던 것들을 하나하나 불러와 실행하는 형태로 사용자가 선택지에 따른 숫자 값을 입력하면 그에 따른 기능을 수행하도록 구성했다. a는 내가 만든 유진수 클래스이며 다른 클래스를 호출할때도 메소드를 호출하는 것과 같이 a.메소드명();의 문법구조를 하고 있다는 점이 좀 신기했다. 클래스도 메인의 복잡성을 줄이기 위해 기능들을 메소드로 분리시킨 것 처럼 클래스도 그에 대한 확장인 것일까? 조금씩 자바 문법들의 공통된 특징이 눈에 보이기 시작한 것 같다. 반복문은 while로 만들어서 사용자가 원하는 타이밍에 멈출 수 있도록 만들었고 종료시의 대사도 간략하게 표현해봤다. 

이건 내가 만든 감정 클래스 들인데 간단히 캐릭성에 맞게 대사들을 적어보고 각 대사들을 호출할 수 있게 메소드로 나눠둔 것이다. 여기서 배워야 할 점은 상위 클래스 여기선 나의감정들이라는 클래스의 메소드를 호출할때는 super을 사용한다는 점이고 이 역시 다른 메소드를 호출하는 것과 유사한 super.메소드명의 문법 구조를 하고 있다는 것이다.

+마치며

1학년때 교양 수업으로 창의컴퓨팅이라는 강의를 들은 적이 있었는데 거기선 주로 스크레치를 다뤘으며 게임이나 창의적인 프로그램을 만들어서 하드웨어랑 결합해보는 것을 했었다. 거기선 장면이 지나갈 때 배경에 따른 코드를 작성하고 또 하나의 캐릭터를 클릭해 그 캐릭터가 어떤 움직임이나 활동을 할 것인지에 대한 코딩을 했던 기억이 있는데 이번에 한 실습 활동이 그것과 굉장히 유사하고 또 익숙한 느낌을 받아서 문법적인거나 작동중 어떻게 값들이 움직이는 것인가에 대한 내용은 오류를 다소 겪었지만 부담이 크게 가진 않았던거 같다. 다만 클래스배열 자료형이나 파일 오류가 발생할때의 대처법 같은건 배우지 않아 독학하거나 도움을 받게 된 부분이 갠적으론 아쉽게 다가온다. 

'JAVA' 카테고리의 다른 글

5주차 나의 위치를 체감하기  (0) 2026.04.05
4주차 배열  (0) 2026.03.29
3주차 비교문과 반복문  (0) 2026.03.22
2주차 변수와 자료형  (0) 2026.03.15