TIL-Java(클래스,인스턴스)

연시아·2022년 8월 7일
0

TIL

목록 보기
51/51
post-thumbnail

22.08.07

🧡 클래스

클래스란, 서로 연관된 변수와 메소드를 그룹핑하여 이름을 붙인 것을 말합니다.
소프트웨어를 만들어가는데 있어서 구조를 결정하기 때문에 메소드, 클래스가 중요합니다.
우리가 만든 클래스는 돈계산과 관련된 코드인데, 복잡한 프로그램의 경우 돈계산과 관련되지 않는 다른취지의 코드를 섞여 있을 수 있습니다. 그러면 클래스 내의 메소드와 변수가 1억개씩 있게되면. 코드가 엉망진창이 되면서 우리가 프로그램을 만드는 생산성을 급격히 떨어뜨리는 방해요소가 될 수 있습니다. 이러한 상황에서 '클래스'를 이용할 수 있습니다. 파일의 디렉토리와 같은 역할이라고 보면 됩니다.
outline : 클래스 안의 소속되어 있는 여러가지 멤버(클래스 소속의 변수, 메소드등)을 리스트를 보여줍니다.
window -> show view -> outline 을 들어가면 됩니다.

Accounting 클래스를 만들고, AccountingClassApp 소속인 필드(전역변수)를 컷해서 Accounting 클래스의 멤버로 변경합니다.
main에서 Accounting 클랴스의 멤버를 사용하기 위해서 앞에 Accounting.변수 또는 Accounting.메소드()와 같이 앞에 클래스명을 붙여서 사용하면 됩니다.

클래스를 사용함으로써 얻을 수 있는 효과는 이전과 똑같이 동작하지만 구조는 완전히 달라진 코드를 만들었습ㅈ니다. 결과는 같습니다. 하지만 Accounting애 속해있는 valueOfSupply, Accounting에 속해있는 print()라는 것을 분명히 함으로써 소속관계를 명확히 할 수 있게 된 것입니다. 이제 다른 취지의 코드들과 뒤섞여도 상관없고 print()와 같이 흔한 이름의 메소드를 사용해도 클래스만 다르다면 같은 이름의 메소드들이 공존할 수 있게 됩니다.

💛 인스턴스

인스턴스란 하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 것을 말합니다.
Accounting의 내부적인 상태가 수십개를 세팅해서 수십개의 메소드가 호출이 됐습니다. 어쩌다가 한 번 다른 제품이 들어온다면..? 다른 제품의 대한 값으로 변수들을 셋팅하고 메소드를 호출하고.. 다시 원래 제품의 쓰려면 앞서 해놨던 세팅을 다시 해야합니다.

이 과정이 빈번하게 발생한다고 한다면, 이렇게 클래스의 내부적인 상태를 바꾸는 행위가 버그를 유발할 가능성이 굉장히 높습니다. 이 문제를 Accounting1, Accounting2 클래스를 별도로 만들어서 해결할 수 있습니다.
Accounting2에 변수값을 세팅 후 Accounting1.print()를 하여도 예리없이 잘 수행됩니다. Accounting1의 내부적인 상태는 변경되지 않기 때문입니다.


클래스를 복제해서 서로 다른 상태, 서로 같은 메소드를 갖도록 한 것입니다.
하나의 클래스로 돌려막기한 것이 아니라, 복제된 클래스를 이용해서 더 편리하고 더 버그가 적은 코딩을 할 수 있게 된다는 것입니다. 하지만, 코드가 중복되고 있습니다. 클래스의 메소드를 바꾸려면 복제한 모든 클래스의 메소드를 바꿔줘야 합니다. "중복을 줄이고, 경제성을 높이자" 자바에서 클래스를 복제할 수 있는 기능이 있습니다. 이 코드를 익스턴스를 이용해서 바꿔봤습니다.
인스턴스는 new 명령으로 복제한 클래스의 복제본입니다.
new 클래스(): 클래스를 복제하는 명령
Accounting a1 = new Accounting(); Accounting 클래스를 복제해서 a1이라는 변수에 넣고, a1의 데이터타입은 Accounting으로 선언합니다.
데이터 타입 : Accounting의 복제본만 들어올 수 있다고 알려주는 것입니다.

그리고 Accounting 클래스에 "static" 키워드가 사용되면 안되므로 전부 지워줍니다.

profile
backend developer

0개의 댓글