ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 초보 개발자 공부일지(JAVA) [메서드 method] with 패스트캠퍼스#3
    초보 개발자 성장 일지/FC교육 2023. 2. 22. 20:56

    앞서 이야기 나눈 함수와 메서드에 대한 개념이 도저히 구분이 안가서 메서드 강의를 몇 번이나 돌려봤는지 모르겠다.

    드디어 조금 알거 같아서 이렇게 공부 일지를 남겨본다.

    노트에 정리한 걸 먼저 공개하고 그것을 토대로 이야기를 해보자.

    


    강의를 토대로 위와 같이 정리를 해보았다!

    인스턴스까지 강의를 들어서 노트 정리를 해보았지만, 오늘은 메서드를 중심으로 이야기를 하고, 내일 힙메모리 부분을 들은 후에 인스턴스는 종합적으로 정리해 보겠다.

    (메서드 마지막에 인스턴스에 대한 이야기는 약간 나올 듯...)

    일단 메서드를 다시 한번 정리해보면,

     

    '메서드': 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수. 메서드를 구현함으로써 객체의 기능이 구현됨.

     

    (무...무슨.. 무슨 말?)

     

    강의를 들으며 작성한 코드를 보면서 내가 이해한 부분을 설명해 보겠다!

    강사님을 따라 위와 같이 코드를 짰다. Public class Student라고 되어 있는데, 클래스를 'Student'라는 이름으로 지은거라고 보면 된다.

    이 클래스는 학생이라는 객체를 만들기 위해 만든 것이다.

    int studentId; 또는 String studentName; 이라고 되어 있는 것은 맴버변수라고 해서 객체를 만들기위해 얻어야 할 정보들을 변수로 만든 것이다. 이 변수들은 객체를 위해 필요한 것으로 맴버변수라고 정의하여 부른다.

    한 학생(Object, 객체)에게서 얻을 수 있는 정보의 꾸러미? 같은 느낌이라고 보면된다.

    일상적인 언어로 생각해보면, 한 학생(Object, 객체)에게서 얻을 수 있는 것이 무엇인지 생각해 보면 된다.

    만약 저 위 시스템이 학사를 관리하는 시스템을 구축하는 것이라면, 상상해보자.

    학생을 관리하기 위해선 일단 'name'이 필요하다.

    그리고 중복 이름이 있을 수 있으니, 주민등록번호와 같은 학생 고유 번호인, 학번이 필요하다. 그걸 영어로 studentId라고 정의를 했다.

    이렇게 내가 한 대학생에게서 어떤 정보를 얻을 수 있는지 생각해보면, 맴버변수가 왜 필요한지 느껴진다.

    학생에게서 얻어야 하는 정보의 큰 카테고리를 정리한 거라고 생각하면 될거 같다.

    위에는 학번(id), 이름(name), 주소(adress)만 했지만, 더 추가할 수도 있다.

    예를 들면, 학생 성별 정보가 필요하다면, 'String gender;' 라고 변수를 만들어 줄 수 있다.

     

    그 다음으로,

    맴버변수 아래를 보자.

     

    함수에서 봤던 비슷한 모양을 볼 수 있는데, 이것들도 함수의 일종이긴 하지만, 객체를 위해 존재하는 것이다.

    객체 생성을 하기 위해 존재하는 함수인 것이다.

    이 부분이 조금 이해가 힘들었는데, 이렇게 생각해보면 될거 같다.

    앞선 함수 일지에서 a+b라는 연산 함수를 다른 클래스에서도 불러서 사용 할 수 있었다.

    하지만, 이번 Student클래스를 보면, 객체를 위한 정보들과 모두 연결되어 있다.

    ShowStudentInfo()도 위 맴버변수들을 하나의 문장으로 정리해서 보여주는 역할을 하는 것이고,

    getStudentName()도 맴버변수에 담긴 한 객체의 name 정보를 반환해주는 역할을 하는 것이다.

    setStudentName(String name)의 경우, 이미 입력된 한 객체의 name을 바꿔주는 (수정해주는) 역할을 한다.

    이렇게, Student클래스에 입려되어 있는 함수들은 모두 객체생성과 떨어질 수 없는 관계를 가지고 있다.

    이것이 함수와 메서드의 큰 차이라고 이해를 했다.

     

     

    이렇게 정리를 해보니 위에 먼저 언급한 메서드의 정의가 이해될 것이다.

    "객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수. 메서드를 구현함으로써 객체의 기능이 구현됨."

    코드를 보고 설명을 들은 것처럼 객체의 기능을 구현하기 위해 존재하는 함수인 것이다.


     

    Student 클래스를 이용해 다른 클래스에서 객체를 만들어 본 것

    그렇다면, 저걸 어떻게 사용하는 것일까?

    Student 클래스 내부에서 클래스의 기능을 구현해도 되지만, 강사님은 객체지향에 대한 개념을 이해하기 위해선 다른 클래스에서 Student클래스를 사용해 볼 것을 추천했다.

    그래서 나는 강사님을 따라 StudentTest라는 다른 클래스를 만들어, 앞서 만든 Student클래스를 구현해 보았다.

    사용법은 바로 위 사진을 보면 알 수 있다.

     

    일단 Student라는 클래스명을 써준다. 그리고 만들고 싶은 객체의 이름을 정한다. (나는 studentLee라고 지었다.) 그리고 '='을 써주고 new를 입력한 후 클래스 명을 한번 더 써준다. 아래와 같은 코드가 나온다.

     

    Student studentLee = new Student();

     

    'studentLee'라고 생성되는 객체를 인스턴스라고 표현한다고 한다.

    'new Student()'는 생성자라고 한다.

    이 부분은 다음 강의를 정독하고 내일이나 모레 일지에 설명하겠다.

     

    여하튼,

     

    저렇게 인스턴스를 생성해주고 아래와 같이 입력하면, studentLee라는 학생의 정보를 입력할 수 있다.

    studentLee.studentId = 1234;

    studentLee.setStudentName = ("LEE");

    studentLee.adress = "서울시 은평구 역촌동"

    이렇게 하면 studentLee라는 학생의 정보들이 입력되는 것이다.

     

    여기서, 잠깐!

    그런데 왜 Name과 adress는 같은 문자열인데 Name은 ( )안에 써주고, adresssms 그냥 바로 써주는 것일까?

    이건 앞서 Student클래스를 만든 코드를 보면 차이를 볼 수 있다.

    Id는 맴버변수이다. 그래서 ( )가 필요없다.

    그런데 setStudentName은 함수이다. 그래서 ( )안에 매개변수를 넣어주고, 맴버변수인 studentName으로 넘겨준다.

    이 차이가 있어서 그런것이다.

     

    인스턴스명을 입력 후 . 을 입력하면 이클립스가 친절하게 메서드들을 알려준다.

    이건 인스턴스인 studentLee를 코드입력하고 . (dot)을 쳐줬을 때 이클립스가 팝업으로 보여주는 장면이다.

    팝업에는 Student클래스에 들어있는 메소드들을 친절하게 알려준다. 심지어 어떤 자료를 넣어줘야 하는 지도 친절하게 알려준다.

    hashCode()와 같이 Student클래스에 없던 메서드들은 자바 자체가 기본으로 가지고 있는 메서드라고 생각하면 되는데, 이것들도 나중에 학습을 하면 유용하게 쓸 수 있을 것 같다.

     

    여하튼, 이렇게 객체에 기능을 구현하기 위해 클래스의 메서드를 불러오는 것을 사진을 통해 소개해 보았다.


    같은 장소, 같은 앵글이라.. 오늘은 나의 왼손을 함 넣어보았다.. 하하

    오늘도 공부 완료!

     

     

    함수와 메서드의 개념이 너무 헷갈렸는데,

    막상 이렇게 공부 일지를 정리해보니 머리 속에 어느 정도 정리가 되는 것 같다.

    정말 이 두 개념은 여러번 강의를 돌려보았다..

    여러 번 보다 보니, 둘의 미묘하고도 엄청난 차이를 발견하게 되었고, 이렇게 정리를 할 수 있게 되었다.

    인스턴스에 대한 걸 조금 언급하고 다음 강의로 넘어가서, 인스턴스는 내일쯤 정리할 수 있을 거 같다.

    힙 메모리라는 것이 나오는 것 같은데, 내일 메모리 부분도 공부를 한 후 정리해 봐야 할 것 같다.

     

    자바를 모두 이해하는 날을 위해.. 빠이팅!

     

     

     

    패스트캠퍼스 홈페이지

    http://bit.ly/3Y34pE0

     

     

     

    본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

    댓글

Designed by Tistory.