책 내용 질문하기
질문이요
도서
2020 시나공 정보처리기사 필기 : NCS 기반 전면 개편 [기본서]
페이지
0
조회수
539
작성일
2020-05-19
작성자
탈퇴*원
첨부파일
교제에는 없는내용이긴 한데 클래스(객체지향)설계 5가지 원칙을 자바코드로 설명해 주실수있나요? 제가 자바로 이해하기가 편해서ㅠㅠ
답변
2020-05-20 11:09:33

안녕하세요 길벗수험서 운영팀입니다.

 

캡슐화, 정보 은닉, 추상화, 상속성, 다형성  말씀하시는건가요?

 

캡슐화는 그저 특정 기능을 구현하기 위한 클래스, 인터페이스, 라이브러리 등의 묶음입니다.

웹 페이지에서 '주문' 이라는 버튼을 눌렀을 때 수행해야 하는 [기능]을 구현하기 위한 클래스, 인터페이스, 라이브러리 등을 하나로 묶어두었다면 그것이 캡슐화죠.

 

정보 은닉은 캡슐화 시 해당 기능을 사용하기 위한 인터페이스만을 노출해두고, 나머지는 전부 public이 아닌 private, protected, package 등의 접근지정자를 통해 외부 접근을 제한해둔 것입니다. 괜히 개인 정보등을 저장해둔 클래스나 변수의 이름이 외부에 노출되서 털리는 일을 방지하기 위함이죠.

 

추상화는 형태만 잡아주는 상위 클래스를 하나 더 만드는 개념입니다.

(예시)개인정보를 저장하는 클래스는 다양한 기능을 포함해야 합니다. 이름, 비밀번호, 주소, 세션id 요청, 로그 기록 등등 세부적인 코드는 상당히 길 것입니다. 이걸 단순화한 상위 클래스를 하나 만든다고 가정하세요.

class Member() {

  int 이름;

  String 비밀번호;

  String 주소;

  int 세션id_request(매개변수 선언) {return 변수}

  int 로깅(매개변수 선언) {return 변수)

}

위가 많이 생략된것 같지만 저게 답니다. 저게 추상화에요. 저기에 해봐야 기본값이나 매개변수나 리턴 변수가 채워지고, (아주)기본적인 로직 정도만 추가됩니다.

상세한 로직(세션id 요청 방법에 대한 로직 등)은 이후 코드에서 위 Member 클래스를 상속받아 사용하는 다른 클래스에서 세세하게 작성될 것입니다. 저것처럼 기본적인 형태만을 잡아주는 것이죠. ("회원은 이러한 형태로 저장되어야 해"라고 말하는 느낌의 클래스)

 

상속성은 상위 클래스를 가져와 하위 클래스에서 좀더 상세히 사용할 수 있게 해주는 것입니다. 상위 클래스에서 이미 정의된 것을 사용할 수도 있고 재정의 할 수도 있죠.

 

다형성은 위에서 말한 상속 받은 후 '재정의'하는 것을 의미합니다.

위의 추상화에서 선언한 member 클래스는 다른 많은 클래스에서 상속받아 사용할 수 있습니다. 그런데, 두 메소드 세션id_request()와 로깅()의 처리방식이 모두 같을까요? 장담할 수 없습니다. 이렇게 다르게 구현할 수 있다는 것(같은 메소드명을 다르게 구현이 가능하다는 것)이 다형성입니다.

 

다형성은 위에서 설명한 상속의 확장 개념 외에도 하나의 클래스에서 같은 이름의 메소드에 대해 다양한 방식으로 정의해둔 것을 얘기하기도 합니다.

class A {

 int add(int i, int j) { 로직 }

 int add(int i) { 로직 }

}

이런 것 처럼요. 이경우 add() 메소드를 호출했을 때 인수가 두 개면 첫번째 메소드를, 한 개면 두번째 메소드를 호출합니다.

 

행복한 하루되세요 :)

  • 관리자
    2020-05-20 11:09:33

    안녕하세요 길벗수험서 운영팀입니다.

     

    캡슐화, 정보 은닉, 추상화, 상속성, 다형성  말씀하시는건가요?

     

    캡슐화는 그저 특정 기능을 구현하기 위한 클래스, 인터페이스, 라이브러리 등의 묶음입니다.

    웹 페이지에서 '주문' 이라는 버튼을 눌렀을 때 수행해야 하는 [기능]을 구현하기 위한 클래스, 인터페이스, 라이브러리 등을 하나로 묶어두었다면 그것이 캡슐화죠.

     

    정보 은닉은 캡슐화 시 해당 기능을 사용하기 위한 인터페이스만을 노출해두고, 나머지는 전부 public이 아닌 private, protected, package 등의 접근지정자를 통해 외부 접근을 제한해둔 것입니다. 괜히 개인 정보등을 저장해둔 클래스나 변수의 이름이 외부에 노출되서 털리는 일을 방지하기 위함이죠.

     

    추상화는 형태만 잡아주는 상위 클래스를 하나 더 만드는 개념입니다.

    (예시)개인정보를 저장하는 클래스는 다양한 기능을 포함해야 합니다. 이름, 비밀번호, 주소, 세션id 요청, 로그 기록 등등 세부적인 코드는 상당히 길 것입니다. 이걸 단순화한 상위 클래스를 하나 만든다고 가정하세요.

    class Member() {

      int 이름;

      String 비밀번호;

      String 주소;

      int 세션id_request(매개변수 선언) {return 변수}

      int 로깅(매개변수 선언) {return 변수)

    }

    위가 많이 생략된것 같지만 저게 답니다. 저게 추상화에요. 저기에 해봐야 기본값이나 매개변수나 리턴 변수가 채워지고, (아주)기본적인 로직 정도만 추가됩니다.

    상세한 로직(세션id 요청 방법에 대한 로직 등)은 이후 코드에서 위 Member 클래스를 상속받아 사용하는 다른 클래스에서 세세하게 작성될 것입니다. 저것처럼 기본적인 형태만을 잡아주는 것이죠. ("회원은 이러한 형태로 저장되어야 해"라고 말하는 느낌의 클래스)

     

    상속성은 상위 클래스를 가져와 하위 클래스에서 좀더 상세히 사용할 수 있게 해주는 것입니다. 상위 클래스에서 이미 정의된 것을 사용할 수도 있고 재정의 할 수도 있죠.

     

    다형성은 위에서 말한 상속 받은 후 '재정의'하는 것을 의미합니다.

    위의 추상화에서 선언한 member 클래스는 다른 많은 클래스에서 상속받아 사용할 수 있습니다. 그런데, 두 메소드 세션id_request()와 로깅()의 처리방식이 모두 같을까요? 장담할 수 없습니다. 이렇게 다르게 구현할 수 있다는 것(같은 메소드명을 다르게 구현이 가능하다는 것)이 다형성입니다.

     

    다형성은 위에서 설명한 상속의 확장 개념 외에도 하나의 클래스에서 같은 이름의 메소드에 대해 다양한 방식으로 정의해둔 것을 얘기하기도 합니다.

    class A {

     int add(int i, int j) { 로직 }

     int add(int i) { 로직 }

    }

    이런 것 처럼요. 이경우 add() 메소드를 호출했을 때 인수가 두 개면 첫번째 메소드를, 한 개면 두번째 메소드를 호출합니다.

     

    행복한 하루되세요 :)

  • 관리자
    2020-05-21 10:09:44

    안녕하세요 길벗수험서 운영팀입니다.

     

    시험 범위에 해당하지 않는 부분에 대해서는 간단한 답변만이 가능합니다.

     

    다만 검색해보니 자바 소스를 기반으로 설명된 링크 몇 군데가 있어 아래 첨부해드립니다.

     

    http://www.nextree.co.kr/p6960/ 

    https://dev-momo.tistory.com/entry/SOLID-%EC%9B%90%EC%B9%99 

     

    행복한 하루되세요 :)

  • *
    2020-05-20 15:04:20

    아뇨 아뇨 클래스 설계 원칙 5가지 라고 하던데...SOLID원칙이요.

     공부하다보니 SRP OCP LSP DIP ISP 라는게 있어서요. 

    보다보니 이해가 안가서 혹시 자바코드로 설명해주실수 있나요?

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.