상세 컨텐츠

본문 제목

[생활코딩] JAVA1 - 조건문 / 배열 / 반복문 / 메서드 / 클래스 / 인스턴스의 필요성

Studying (Review)/JAVA

by 잼(JAM) 2021. 12. 13. 15:51

본문

반응형

조건/반복문, method, 클래스 등이 필요한 이유는 무엇일까?

먼저 질문에 대해서 생각하기 이전에

기존의 순차적인 공부를 할 때의 문제점들에 대해 생각해보자

 

순차적으로 자바기초, 제어문, 메서드, 객체, 상속, 다형성 등을 공부할 때

기초에 대해서 안일하게 생각하거나 이전것을 배우지 않았을 때 오는 두려움

뒤의 것이 더 커보이거나 너무 어렵다고 생각하게 되는 경향이 있다

 

이러한 것을 해결하려면, 필요에 따른 공부가 필요하다

내가 기능을 구현하기 위해서 필요한 기능을 공부하려고 하다보면

중요한 기반에 해당하는 것과 그리고 필요한 지식을 습득하는게 더 쉬워진다

 

따라서 해당 언어에 포함된 기능들이 왜 필요한지 등에 대해서도

더 효과적이고 자연스럽게 체득을 할 수 있게 될 것이다.

 

그러니 순차적 학습에 너무 얽매이기 보다는

자신이 필요로 하는 것들을 차근차근 공부해 나가면

사고의 확장 측면이나, 학습적인 측면에서 모두 도움이 될 것이다

(이상은 해당 강의의 14챕터를 듣고 정리한 나의 생각이다)

 


1. 조건문(Conditional Statement)은 왜 필요할까?

특정한 조건에서 달라지는 수식이 있을 때,

조건을 더할 수 없다면 프로그램을 별도로 구성해야는 번거로움이 생긴다

 

이를 해결하기 위한 방법이 바로 조건문인 것이다.

JAVA에서는 if-else문 등이 이에 해당한다

 

예를 들어, 바로이전에 만들었던 프로그램(https://developer-jaeny.tistory.com/30)에

수익이 10000원 이하의 범위(income =< 10000)에 있을때에는

첫째 사람(dividend1)에게 배당을 몰아주는 조건을 추가한다고 할때

 

아래와 같이 조건문을 추가하면

프로그램을 별도로 구성할 필요가 사라진다.

 


2. 배열(Array)은 왜 필요할까?

변수가 여러개일 때, 변수 내용의 변동위험이 매우크다

코드작성 중간에 변수를 활용하면서 건드려질 위험이 있기 때문이다

 

그럴 때, 배열을 활용해서 변수가 바뀔 수 있는 위험을 매우 줄여줄 수 있다

각각의 변수로 활용했던 것들을 배열이라는 그릇에 담아두는 것이다

 

그릇에 담긴 순서 등을 통해 필요할때 꺼내어 쓰기 때문에

변질 혹은 오염될 위험에서 조금 멀어질 수 있다

 

그럼 이제 예제를 통해 알아보자.

 

바로 이전에 만들었던 프로그램에서 배당을 세 사람에게 각각 5:3:2라고 했을 때

이 배당에 대한 비율을 각각 변수로 표현 한다면

아래와 같은 코드로 표현될 것이다

 

 

여기서 문제는, 해당 변수와 계산식 사이에

수많은 코드들이 있다고 가정할 때

그 코드에서 해당 변수를 활용하는 경우가 생기면

해당 변수 자체의 변동 위험이 생기게 된다는 것이다

(변수를 직접 활용할때 변수를 재정의하게 될 위험)

 

따라서, 이러한 변수로 정의하지 않고

해당 내용을 그릇에 안전하게 담아 보관하는 방법이 바로 배열이다

 

이것을 배열에 담아두면 아래와 같은 코드가 완성된다

 

이와 같이 배열에 담았을 때,

조금 더 안전하게 내용을 활용할 수 있고

안전하게 관리할 수 있게 되는 것이다

 

마지막으로 확인까지 해보자

 


3. 반복문(Loop Statement)은 왜 필요할까?

같은 조건에 대한 여러가지의 경우의 수를 처리할 때

해당하는 수를 1개씩 처리하도록 구현한다면

코드가 많이 길어지는 일이 생길 수 있다

 

예를 들어, 같은 조건인 1억가지의 경우의 수가 있다면

1억줄 이상의 코드를 입력해야 하는 일이 생길 수 있는 것이다

 

하지만 반복문을 통해서 이와 같은 문제를 해결할 수 있다

해당하는 조건 아래의 반복을 통해 불필요한 중복이나 길어지는 코드를 방지할 수 있는 것이다

JAVA에서는 for과 while이 이에 해당한다

 

그럼 이제 예제를 통해 알아보자

바로 위에서 배열을 통해 세 명의 배당을 그릇에 담아 안전하게 활용하는 부분이 있었지만

결국 각 사람의 배당 금액을 나타낼때 같은 코드가 반복되는 부분이 있었다

 

이렇게 반복되는 코드를 정리하고 효율과 가독성을 높이기 위해

while이라고 하는 반복문을 통해 정리하면

아래와 같이 조금 더 깔끔한 코드가 완성된다

 

실행해서 결과를 확인해보아도

이상없이 잘 작동하는 것을 확인 할 수 있다

 


4. 메서드(Method)는 왜 필요할까?

먼저, 메서드를 간단하게 정의하자면

서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자 라고 할 수 있다

 

어떠한 코드의 연산이나 수식 등이 매우 복잡하거나 길어졌을 때

해당 수식이나 연산을 보다 효율적으로 사용하기 위해 필요한 것이 메서드이다

 

메서드라는 것을 사용함으로 보다 간결하고 효율적인 코드작성이 가능해진다

 

또 한 번 예제를 통해 비교해보도록 하자

 

 

이전에 만들었던 어플리케이션에 메서드를 대입하게 되면

보다 가독성(사용이 편리하게 짜여진)이 좋고 간결한 코드를 작성할 수 있게 될 것이다

 

이전보다 정리가 잘 된 모습을 확인 할 수 있다

또한 작동도 정장적으로 된다

 


5. 클래스(Class)는 왜 필요할까? (객체 지향의 첫 걸음)

먼저, 클래스를 간단하게 정의하자면

서로 연관된 변수(Field / Variable)와 메서드(Method)를 그룹핑하여 이름을 붙인 정리정돈의 상자 라고 할 수 있다

 

더하자면, 서로 연관된 기능이나 객체를

포괄적인 개념을 통해 묶어놓은 것을 클래스라 볼 수 있을 것 같다

 

클래스가 필요한 경우는 이러한 경우가 있을 수 있다

예를 든다면, 여러가지 성향을 가진 변수와 메서드가 혼재되어 있을때

 

일부 연관된 기능들을 클래스로 묶어놓는다면

해당 기능들에 대해서는 그 안에서도 소속관계와 연관관계를 명확하게 할 수 있을 것이다

 

다른 취지의 기능 혹은 코드나

같은 이름이라 하더라도 소속관계가 있어서 특별한 역할을 하는 코드를 구분 지을 수 있게 된다

(이러한 것을 하는것이 객체 지향을 하는 이유이기도 하다)

 


6. 인스턴스(Instance)는 왜 필요할까?

먼저, 인스턴스를 간단하게 정의하자면

하나의 클래스(Class)를 복제해서 서로 다른 데이터의 값(내부 상태)서로 같은 메서드를 가진 복제본을 만드는 것이다

 

메서드의 기능은 같지만, 들어가는 데이터의 값이 다를때

해당 값을 필요할때마다 계속해서 변경하는 패턴으로 코드를 설계한다면

해당 설계로 인해 버그가 발생할 확률이 매우 높아질 것이다

(같은 이름의 변수나 메서드를 계속 값을 바꿔주는 행위는 매우 위험할 수 있다)

 

따라서 버그발생을 방지하기 위해서 복제본을 만들어 다른 값을 넣어주게 된다면

즉, 인스턴스를 생성해서 값을 변경해주는 패턴으로 설계한다면

보다 안전하게 기능을 활용할 수 있게 된다

 

그렇다면 클래스를 복제만 하면 괜찮을까?

클래스를 여러개 복제하면 버그 유발 가능성은 낮아지지만,

동시에 유지보수성 또한 떨어질 수 있게 된다

클래스 자체의 개수가 늘어나다 보니 수정이 필요할 때

코드를 수정해야 하는 범위가 커지기 때문이다

(위의 방법은 인스턴스 생성이 아니라 그냥 클래스를 복제한 것이기 때문)

 

보다 나은 방법은 원본 클래스를 그대로 두고

이름을 바꾸어 인스턴스로 만들어 주는 방법이다!

이렇게 한다면

클래스의 수정이 필요할때도 원본 클래스만 수정해주거나

필요한 기능만 수정할 수 있기 때문에 유지보수성 측면에서 좋아지고

 

동시에 기능이 필요할때마다 새로운 인스턴스를 사용하기 때문에

버그를 유발할 가능성도 낮아지는 코드작성이 가능하게 되는 것이다

 

더해서, 인스턴스의 이름을 통해 객체화

즉 구분을 해줄 수 있는 부분도 생기기 때문에 인스턴스가 필요한 것이다! 

반응형

관련글 더보기

댓글 영역