본문 바로가기

멋쟁이사자처럼_부트캠프/Java

[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 부트캠프 13기: Java 5일차 메서드의 선언, 캡상추다, 그리고 패키지

1. 메서드의 선언

 

정리

  • new 연산자를 사용할 때마다 메모리에 인스턴스가 생성된다.
  • 인스턴스는 더 이상 참조되는 것이 없을 때, 나중에(언제 될지는 모른다. 보통 메모리가 부족할 때) 가비지 컬렉션(Garbage Collection) 된다.
  • static한 필드는 클래스가 로딩될 때 딱 한번 메모리에 올라가고 초기화 된다.
  • 인스턴스 메소드(static이 안붙은 메소드)는 인스턴스를 생성하고나서 레퍼런스 변수를 이용해 사용할 수 있다.
  • 클래스 메소드는 클래스명. 메소드명() 으로 사용가능하다.
  • 메소드 안에 선언된 변수들은 메소드가 실행될 때 메모리에 생성되었다가, 메소드가 종료될 때 사라진다.

 

 

 


객체지향 프로그래밍(OOP) : 캡상추다(캡슐화, 상속, 추상화, 다형성).

 - 좋은 객체는 응집도는 높고 결합도(Coupling)는 낮다. (응높결낮)


캡슐화

- 데이터(필드)와 메서드(동작)를 하나로 묶고, 외부로부터 데이터를 보호하는 개념

  (객체지향 프로그래밍(OOP)의 핵심 원칙 중 하나)

캡슐화의 핵심 목표

  1. 데이터 보호:
    • 외부 코드가 직접 데이터를 수정하거나 잘못된 값을 입력하지 못하도록 보호.
  2. 정보 은닉(Information Hiding):
    • 내부 구현 세부사항을 감추고, 필요한 기능만 외부에 공개.
  3. 접근 제어:
    • private, protected, public 등의 접근 제어자를 사용하여 클래스 내부 데이터의 접근 범위를 제한.

캡슐화의 특징

  1. 클래스 내부에 데이터를 숨김:
    • 필드를 private으로 선언하여 외부에서 직접 접근하지 못하도록 함.
  2. 간접 접근 제공:
    • 데이터를 안전하게 수정하거나 읽을 수 있도록 getter와 setter 메서드를 제공.

캡슐화의 장점

  1. 데이터 보호:
    • 필드 값을 직접 수정하지 못하도록 하고, 유효성 검사를 통해 잘못된 값을 방지.
  2. 유지보수 용이:
    • 클래스 내부의 구현을 수정해도 외부 코드에 영향을 주지 않음.
  3. 코드의 재사용성 증가:
    • 캡슐화된 클래스를 재사용하거나 확장하기 쉬움.
  4. 가독성 향상:
    • 내부 구현을 감추고, 필요한 기능만 제공함으로써 코드의 가독성을 높임.

캡슐화와 접근 제어자

접근 제어자 같은 클래스 같은 패키지 하위 클래스 외부 클래스
public O O O O
protected O O O X
(default) O O X X
private O X X X

 

결론

캡슐화는 객체지향 프로그래밍에서 데이터를 보호하고 안정적인 동작을 보장하기 위한 중요한 개념임. 데이터와 메서드를 하나로 묶어 클래스 내부의 구현을 감추고, 필요한 부분만 공개함으로써 안전하고 유지보수하기 쉬운 코드를 작성할 수 있음.

 


상속(Inheritance)

- 기존 클래스(부모 클래스)의 특성과 동작을 새로운 클래스(자식 클래스)에 물려주는 것.

 

  • 코드 재사용성을 높이고, 계층 구조를 형성.
  • extends 키워드를 사용하여 상속 구현.

 

 


추상화(Abstraction)

- 불필요한 세부사항을 숨기고, 필요한 핵심적인 기능에만 집중.

 

  • 추상 클래스(abstract class)와 인터페이스(interface)를 통해 구현.
  • 개발자가 필요한 기능의 틀만 제공하고, 구체적인 구현은 상속받은 클래스에서 처리.

 

 


다형성(Polymorphism)

 - 같은 이름의 메서드가 여러 형태로 동작할 수 있도록 함

 

  • 메서드 오버로딩과 오버라이딩, 그리고 상속 관계에서의 동적 바인딩을 포함.
  • 부모 클래스의 참조 변수로 자식 클래스 객체를 참조할 수 있음.

 

 

 


요약: "캡상추다" 정리

특징 설명 주요 키워드
캡슐화 데이터 보호 및 정보 은닉. 외부에 필요한 기능만 공개. private, getter, setter
상속 부모 클래스의 특성을 자식 클래스가 물려받아 재사용 가능. extends, super
추상화 복잡한 구현을 숨기고, 핵심적인 기능에만 집중. abstract class, interface
다형성 하나의 이름으로 다양한 형태의 동작을 수행. method overriding, method overloading

 


패키지

 - Java에서 클래스를 논리적으로 묶는

  • 비슷한 기능을 하는 클래스나 인터페이스를 그룹화하여 코드 관리와 충돌 방지를 도와줌.
  • 패키지는 폴더와 동일한 구조로 파일 시스템에 저장됨.

패키지의 주요 목적

  1. 코드 관리:
    • 관련 있는 클래스와 인터페이스를 그룹화하여 관리하기 쉽게 만듦.
  2. 클래스 이름 충돌 방지:
    • 동일한 이름의 클래스를 다른 패키지에서 사용할 수 있음.
  3. 접근 제어:
    • default 접근 제어를 사용하면 동일한 패키지 내에서만 클래스에 접근 가능.

패키지 이름 규칙

  1. 소문자 사용:
    • 패키지 이름은 모두 소문자로 작성.
    • 예: com.example.myapp
  2. 역방향 도메인 이름 사용:
    • 충돌 방지를 위해 일반적으로 도메인 이름을 역순으로 사용.
  3. 파일 경로와 일치:
    • 선언된 패키지는 파일 시스템의 디렉터리 구조와 일치해야 함.
    • 예: package com.example.myapp;는 com/example/myapp 디렉터리에 저장.

2. 패키지 사용

  • 다른 클래스에서 패키지에 포함된 클래스를 사용하려면 import 선언 필요.
  • 예시)
 

 

- 패키지가 없으면 클래스 충돌이 발생하거나, 코드 관리가 어려움. 따라서 대규모 프로젝트에서는 패키지 사용이 필수적임. 따라서 패키지는 Java 코드의 논리적 그룹화클래스 충돌 방지를 위해 필수적인 요소이다.