본문 바로가기
JAVA

객체지향 프로그래밍

by 융디's 2024. 3. 31.
728x90
객체지향 프로그래밍

객체지향 프로그래밍

@24.03.25

객체지향 프로그래밍(Object-Oriented Programming)

💡
컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립적인 단위(=객체)들의 모임으로 구성된 것
  • 각각의 객체들은 서로 메시지를 주고받고 데이터를 처리할 수 있다.

클래스

💡
클래스의 속성인 필드와 클래스의 기능 혹은 동작인 메서드를 가진다.


@기본 형식

접근제한자 class 클래스명{
[접근제한자] [static] [final] 타입 필드명 [=초기값];
//필드
생성자;
[접근제한자][static][반환타입] 메소드명(매개변수){}
//메소드
}
  • 선언 방법
    • 첫 문자는 문자나 _ , $ 의 특수문자로 시작하며, 숫자로 시작할 수 없다.
    • 자바의 예약어는 식별자로 사용할 수 없다.
    • 대/소문자를 구분한다.
    • 식별자의 길이는 제한이 없고 공백은 포함할 수 없다.
    • 관례 클래스 명은 대문자로 시작한다.
    • 관례 단어와 단어가 만날 경우 2번째 단어의 첫 글자는 대문자로 표기
  • 클래스의 인스턴스 생성 방법

    1) new 연산자생성자를 이용하여 인스턴스 생성

    클래스명 변수명 = new 클래스명()

    2) 클래스 로더 이용

    3) 메서드에 있는 인스턴스를 복제

  • 매개변수 vs 전달인자
    • 매개변수 : 메서드의 정의 부분에 나열된 변수
    • 전달인자 : 메서드를 호출할 때 전달되는 실제 값
  • 클래스의 메소드를 호출하려면클래스에 대한 인스턴스(=객체)를 생성해야 한다!
    • static 한 메서드는 인스턴스를 생성하지 않아도, 호출 가능
  • 좋은 객체는 응집도는 높고 결합도는 낮다!

추상화

💡
현실에 있는 어떤 것을 구현할 때 실제 존재하는 여러 속성 중 불필요한 것은 버리고, 필요한 속성만 구현한 인터페이스를 제공하는 것
  • 추상화 = 객체화

캡슐화

💡
관련있는 변수와 함수를 하나의 클래스로 묶고, 접근 제한자를 통해 외부에서 쉽게 접근하지 못하게 정보를 은닉하는 것
  • 접근 제한 자 : 객체를 처음 설계할 때 이걸 누구까지 사용하게 할 거야?
    • 클래스 앞, 클래스 내부 속성, 생성자 앞에 붙을 수 있다.
    • public : 어디서든 접근 가능
    • protected : 같은 패키지 또는 자식 클래스에서 접근 가능
    • private : 클래스 내부에만 접근 가능
    • default : 같은 패키지 내 클래스에서만 접근 가능

다형성

💡
프로그램 언어의 각 요소들(상수, 변수, 함수, 메서드 등)이 다양한 자료형에 속할 수 있는
특성 ⇒
하나의 객체가 여러 가지 타입을 가질 수 있는 것

인터페이스는 하나, 어떤 타입의 객체를 넣는가에 따라 결과는 여러 개
  • 단형성 : 프로그램 언어의 각 요소가 한 가지 형태만 가지는 성질
  • 구현: 상속, 메서드 오버라이딩, 형 변환 등

자바 메모리

💡
1. new 연산자를 사용할 때마다 메모리에 인스턴스 생성
2. 인스턴스가 더 이상 참조되는 것이 없을 때
(=null) 쓰레기 값이 되며,
이를 가비지 컬렉터가 처리
3.
static 한 필드는 클래스가 로딩될 때 딱 한 번 메모리에 올라가고 초기화
4.
지역 변수는 메서드가 실행될 때 메모리에 생성되었다가, 메서드 종료 시 제거
  • 소스코드, 클래스 파일 자체는 정적 → 코드가 작성된 후에는 그 내용이 고정되어 변하지 X
    • 클래스 정보는 클래스 파일에 저장되어 있으며, 프로그램 실행 중에는 변경되지 않으므로, 클래스 정보 자체는 정적이다.
  • 실행 중에 생성되는 인스턴스와 객체는 동적이다.
    • 따라서 프로그램이 실행되면서 메모리에 할당되거나 생성된다.

패키지

💡
관련된 클래스를 모아 패키지 하나로 관리하는 것 (=폴더)


@기본 형식

package 패키지명;
  • 패키지명 : 보통 도메인 이름을 반대로 적은 후 프로젝트 이름을 붙여 생성
  • 패키지 사용 : import 패키지명.클래스명;

728x90

'JAVA' 카테고리의 다른 글

메서드 오버라이딩  (0) 2024.03.31
상속  (0) 2024.03.31
메서드 오버 로딩  (0) 2024.03.31
클래스  (0) 2024.03.31
네이밍 컨벤션  (0) 2024.03.31