티스토리 뷰

 

 

 

메소드화

 

 

 

우리는 메소드화를 통해 코드를 refactoring 했다.

메소드를 이용하면

sum이라는 메소드를 다른 로직에도 쉽게 가져다 쓸 수 있으며

sum의 중괄호 안의 내용을 바꾸면 sum을 사용하는 모든 로직의 동시다발적 개선이 이루어져

유지보수의 편의성이 증대되고

연관된 코드를 묶어놓기 때문에 가독성이 향상된다.

 

 

 

 

이번에는 새로운 메소드가 추가되었다.

지금은 큰 문제가 없을 것이다.

하지만 사용자가 기능을 추가하기 위해 계속해서 메소드를 추가한다면?

기능은 다르지만 동일한 이름을 가져 번거로움을 주는 메소드가 생겨날 수도 있고,

메소드끼리의 충돌로 인해 오류가 발생하거나

연관된 기능을 가진 로직들 사이에 다른 기능들이 추가되어 원래의 기능을 잃게 될 수도 있다.

그래서 우리는 그룹핑에 대해 생각하게 되었고

그로 인해 등장한 것이 객체지향이다.

 

 

 

 

 

객체지향의 개념을 도입해 한 단계 더 refactoring 된 로직을 만들었다.

개념들을 나눠서 정리해보겠다.

 

클래스

 

 

 

클래스는 연관된 변수와 메소드의 집합이다.

위에서 볼 수 있듯이 설계도, 붕어빵 틀의 역할을 하는 것이 바로 클래스이다.

 

여기서 this. 는 무엇일까?


c1.setOprands(10,20); → public void setOprands(int left, int right) = 메소드의 괄호 안 변수로 값이 할당됨

 

this.left = left; = 10

this.right = right; = 20

 

this.left     ↘

                    int left, right; 의 값으로 할당되어 class Calculator의 전역에서 받아들여지게 된다.

this.right   ↗


내가 이해한 바로는 이렇다.

로직을 화면으로 살펴보며 펜으로 화살표를 그려 값을 대입하며 설명하면 더 쉬울텐데,

글로 적고 보니 더 어려워 보이는 것 같다.

개념을 가져와 설명하자면 this. 는 클래스를 통해서 만들어진 인스턴스 자신을 가리키고,

left;는 매개변수로 setOprands밖에서 접근할 수 없지만

this.left는 인스턴스 자신을 가리키기 때문에 클래스 초입에서 선언한 변수에 값이 할당되는 것이다.

 

 

인스턴스

 

 

 

인스턴스는 클래스라는 설계도로 만든 제품, 붕어빵 틀로 만든 붕어빵이다.

 

Calculator c1 = new Calculator(); 

이것이 인스턴스를 만드는 코드이다.

new Calculator(); = 객체를 만든 것을 의미하며

Calculator c1 = c1이라는 변수에 담기고 이 변수의 데이터타입이 calculator이어야 한다(객체의 형식과 같아야 한다).

 

여기서 변수에 인스턴스를 담은 이유는 변수를 통해 인스턴스를 제어해야 하기 때문이고,

우리는 int, string, double과 같은 데이터타입을 사용해왔지만 Calculator라는 데이터타입을 쓴 이유는

클래스를 만든다는 것은 사용자 정의 데이터 타입을 만드는 것과 같은 의미이기 때문이라고 한다.

 

※ 객체와 인스턴스의 차이

일반적으로 설계도인 클래스가 구체적인 실체인 인스턴스가 되었을 때 객체라고 부른다.

(클래스 → 인스턴스 = 객체)

클래스, 인스턴스의 구분 없이 포괄적으로 객체라는 말을 쓰기도 하기 때문에

나 스스로가 헷갈리는 개념은 적지 않았다.

 

 

클래스와 인스턴스 그리고 객체 - 생활코딩 (opentutorials.org)

 

 

변수는 상태라고 할 수 있고, 메소드는 행동이라고 할 수 있다.

이는 하나의 클래스를 바탕으로 서로 다른 상태를 가진 인스턴스를 만들면

서로 다른 행동을 하게 된다는 것을 의미한다고 하며

하나의 클래스가 여러 개의 인스턴스가 될 수 있다는 점이

객체지향이 제공하는 가장 기본적인 재활용성이라고 한다.

객체는 하나의 프로그램이라고 인식해야 한다.

프로그램 안에 작은 프로그램이 있다고 생각해야 하는 것이다.

'SEB_BE_41' 카테고리의 다른 글

JAVA - 유효범위  (0) 2022.07.28
JAVA - 클래스 멤버, 인스턴스 멤버  (0) 2022.07.26
JAVA - 객체 지향 프로그래밍  (0) 2022.07.22
JAVA - 입력과 출력  (0) 2022.07.22
JAVA - 메소드  (0) 2022.07.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/09   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함