yooniiverse
개발 블로그
yooniiverse
전체 방문자
오늘
어제
  • 분류 전체보기
    • 운영체제
    • 네트워크
    • ~2023.02
      • 외부교육
      • 대외활동
      • 스터디
      • 동아리
      • TIL
      • IT지식
      • 기타
      • 트러블 슈팅
      • 프로그래밍
      • Python
      • Java
      • JS
      • DB(SQL)
      • JSP
      • Spring
      • 기술면접
      • 자바
      • 코딩테스트
      • 자료구조
      • 알고리즘
      • 백준 문제풀이
      • 인공지능
      • 머신러닝
      • 프로젝트
      • 안드로이드 앱개발
      • 웹개발
      • 웹 서비스
      • 웹퍼블리싱
      • Node.js 백엔드 개발
      • CS
      • 1일 1CS지식
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 정보처리기사
      • 도서 리뷰
      • 개발 관련 도서
      • 기타 도서

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yooniiverse

개발 블로그

~2023.02/외부교육

[JAVA] 객체(Object) & 캡슐화(Encapsulation)

2022. 3. 19. 13:54

 1. 3세대 언어의 탄생


  • 프로그래밍 언어의 발전 역사를 살펴보면  세대를 관통하는 중요한 키워드가 바로 "코드의 재사용성"이다.
  • 기능을 재사용하는 2세대 절차 지향적 언어가 나왔던 이유는 어제 구현한 기능을 오늘 다시 쓰려고 보니 처음부터 다시 구현해야 하는 귀찮음을 발견했기 때문이었다.
  • 하지만 단순히 기능을 재사용하는 것보다 조금 더 복합적인 개념을 재사용할 수 있는 방법을 생각하게 되었고, 그렇게 3세대 언어인 "객체 지향적 언어(Object Oriented Programming)"이 탄생하게 되었다.

 

 

2. 객체란


  • 객체는 클래스의 변수를 뜻한다.
  • 즉 객체 지향 프로그래밍에서는 단순히 데이터를 저장할 구조체 혹은 기능을 단독적으로 재사용하는 것이 아니라 그 모든 것이 합쳐져 있는 클래스 자체를 통째로 재사용하는 것을 지향한다.
  • 따라서 프로그램을 기능의 집합으로 생각하던 절차 지향적 프로그래밍과는 다르게 객체 지향 프로그래밍에서는 프로그램을 더 작은 프로그램들의 집합으로 보게 된다.
  • 어떤 객체를 만들어서 그 객체의 메서드를 실행시켜 결괏값을 받아보게 될 때, 커다란 주 프로그램에서는 그 작은 프로그램 내부가 어떻게 돌아가는지 알 필요가 없다.
  • 또한 앞으로 필요에 따라서 작은 프로그램들을 만들게 되겠지만, 그 작은 프로그램들을 모아서 하나의 커다란 프로그램을 만들어 목표를 달성하는 것이 주가 된다.

 

 

3. 관련 용어


  • 클래스는 내부적으로 필드와 메서드로 이루어져 있다.
    • 필드 : 해당 클래스 변수 안에 어떤 값을 저장할지 지정한 것
    • 메서드 : 해당 클래스 변수들이 공통적으로 실행시킬 수 있는 기능
  • static 키워드
    • static이 붙은 메서드는 우리가 클래스 변수를 선언하지 않고도 곧장 사용 가능하다.
    • 절차 지향적 관점에서는 매우 올바른 방법이지만 객체 지향적 관점에서는 당연히 매우 잘못된 일이다.
    • 우리가 어떤 기능을 클래스에서 끌어다 쓸 때에는 그 클래스 변수를 선언하여 힙 영역 공간에 해당 클래스에 필요한 공간을 마련하고 그곳에서 내부적으로 해당 기능을 실행하는 식으로 진행이 된다.
    • 만약 static이 붙을 경우 해당 메서드의 모든 코드 내용을 전부 실행 영역(method 영역)에 등록시켜버리게 된다.
    • 따라서 앞으로 만들게 될 프로그램 안에는 오직 메인 메서드만 static 메서드가 된다.
  • 상속(Inheritance)
    • 프로그래밍에서 상속이란 부모 클래스의 코드를 자식 클래스가 한 번 더 적어주지 않더라도 그대로 받아서 쓸 수 있게 만드는 것이다.
    • 자바의 모든 클래스는 java.lang.Object를 직간접적으로 상속받게 된다.
    • 직접적으로 상속을 받는 경우는 바로 윗 부모가 java.lang.Object인 경우이고, 간접적으로 상속을 받는 경우는 윗 부모가 다른 클래스이지만 최종적으로 가장 높은 부모가 java.lang.Object인 경우이다.
  • 오버라이드(Override) 
    • 단, 부모 클래스가 물려준 메서드가 반드시 자식 클래스가 쓰기 편하다는 보장은 없다.
    • 따라서 필요에 따라서는 부모 클래스가 물려준 메서드 대신 자식 클래스가 똑같은 이름의 메서드를 "재정의" 해주어야 하는데, 이러한 메서드 재정의를 "오버라이드(Override)"라고 부른다.
    • 오버라이드를 할 때 주의해야할 점은 메서드의 선언식이 부모 클래스의 해당 메서드 선언식과 완전히 똑같아야 한다는 것이다.
  • 오버로드(OverLoad)
    • 오버로드란 똑같은 이름의 메소드를 파라미터만 다르게 해서 여러 개를 만들어 주는 방법을 말한다.
    • 이름을 통일 시킴으로써 똑같은 목표를 가진 메서드를 다양한 파라미터에 대비해줄 수 있게 된다.
  • 생성자(Constructor)
    • 생성자란 해당 클래스의 변수가 생성될 때 필드의 초기값이나 추가적인 작업이 필요할 경우 작성하는 특수한 메서드이다.
    • 우리가 특별히 생성자를 만들어주지 않더라도 자바가 기본적으로 제공해주는 생성자가 있는데, 이 기본 생성자의 경우 해당 크래스 변수의 필드를 초기화만 하는 역할을 한다.
    • 초기화 시에 만약 해당 필드가 기본형 데이터 타입이면 0으로 초기화를 하고, 참조형 데이터 타입의 필드일 경우에는 null로 초기화한다.
    • 필요에 따라서는 직접 생성자를 만들어 줄 수도 있는데, 이때 주의할 점은 만약 파라미터가 있는 생성자만 만들어주면 더 이상 파라미터가 비어있는 생성자를 호출할 수 없다.
    • 만약 나의 객체(=클래스 변수)에 파라미터가 있는 생성자와 파라미터가 없는 생성자 모두 필요하다면 둘 다 만들어주어야 한다.

 

 

4. 캡슐화


  • 캡슐화란 클래스 내부의 내용을 숨겨서 외부가 해당 클래스를 오직 객체를 통째로 만들어서 사용할 수 있게 만드는 것이다.
  • 캡슐화의 개념은 데이터의 은닉화와도 연결이 되는데, 데이터의 은닉화는 해당 클래스의 모든 필드를 외부가 볼 수 없게 설정하고 메서드들 중에서 외부가 사용할 것이 아니면 전부 다 볼 수 없게 설정하는 것이다.
  • 즉 클래스의 특정 메소드를 사용하려면 메서드만 따로 불러와서 사용하는 것이 아니라, 해당 클래스 객체를 통째로 만들어야 사용할 수 있게 만드는 것이다.
  • 이 캡슐화와 데이터 은닉화에서 중요해지는 것이 바로 "private" 접근 제한자이다.

 

 

5. private 접근제한자


  • private 접근 제한자가 걸려있는 필드에 값을 저장하거나 저장된 값을 불러올때에는 직접적으로 객체이름.필드이름 으로 접근하는 것이 아니라 해당 객체의 메소드를 사용해서 간접적으로 접근하게 된다.
  • 필드에 값을 넣는 메소드를 setter 메소드라고 부르고 저장된 값을 불러오는 메소드를 getter 메소드라고 부른다.
  • setter 메소드는 주로 다음과 같은 형태를 가진다.
public void set필드이름(필드와 같은 파라미터) {
    this.필드이름 = 파라미터;
}
  • getter 메소드는 주로 다음과 같은 형태를 가진다.
public 필드타입 get필드이름() {
    return 필드이름;
}

 

'~2023.02 > 외부교육' 카테고리의 다른 글

[JAVA] MVC 패턴  (0) 2022.03.20
[JAVA] 콜렉션(Collection)  (0) 2022.03.19
[JAVA] 배열의 동적 할당(Dynamic Allocation)  (0) 2022.03.16
[JAVA] Call By Valeue(값에 의한 호출) & Call By Reference(참조에 의한 호출)  (0) 2022.03.15
[JAVA] 메서드(Method)  (0) 2022.03.12
    '~2023.02/외부교육' 카테고리의 다른 글
    • [JAVA] MVC 패턴
    • [JAVA] 콜렉션(Collection)
    • [JAVA] 배열의 동적 할당(Dynamic Allocation)
    • [JAVA] Call By Valeue(값에 의한 호출) & Call By Reference(참조에 의한 호출)
    yooniiverse
    yooniiverse

    티스토리툴바