본문 바로가기
코딩 공부/CS

객체지향 프로그래밍

by 현장 2022. 8. 31.

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

  • 자바는 대표적인 객체지향 프로그래밍 언어이다.
  • 실제 세계를 객체로 나누고 객체들 간의 상호작용을 의미한다.

출처 : https://velog.io/@smj0818/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8

▶ 객체지향 프로그래밍 구성요소

1. 객체 (object)

  → 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간 (클래스의 인스턴스)

 

2. 클래스(Class)

  → 객체를 정의하는 틀 또는 설계도, 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메서드(method)로 구성

 

3. 메서드(Method)

  → 클래스 내의 함수, 프로그램이 실행되고있을때 클래스에서 생성된 인스턴스와 관련된 동작을 정의

 

public class Main {

	public static void main(String[] args) {
    	    // 1. 클래스 데이터 타입으로 객체 참조 변수 선언
            // 2. 클래스 생성자 메서드로 새로운 객체 생성 -> data영역과 method영역 생성
            // 3. 주소 값을 객체 참조 변수에 할당
            User u01 = new User(); 
        
            u01.Id = "id001"; // 생성된 객체의 data영역의 id에 "id001"을 입력
            System.out.println(u01.id); //생성된 객체의 data영역의 id에 "id001"을 꺼내옴
	}

출력

id001

 

 

※ 스택 영역과 힙 영역

  → 스택은 정적 메모리를 힙은 동적 메모리가 저장되는 영역

          ☞ 스택은 함수,지역변수,매개변수가 저장되며 LIFO 방식으로 관리되지만 힙 영역은 전역 변수를 다루며 사용자가 직접 관리해야 하는 메모리 영역입니다.

 

※ 도트 연산자

  1. 인스턴스 변수에서 함수와 변수를 분리합니다.
  2. 패키지에서 하위 패키지 및 클래스에 액세스할 수 있습니다.
  3. 클래스나 패키지의 멤버에 접근하게 한다.

- 클래스의 이름

  • 자바 식별자 작성 규칙에 따라야한다.
  • 한글 이름도 가능하나, 영어 이름으로 작성한다.
  • 알파벳 대소문자는 서로 다른 문자로 인식한다.
  • 첫 글자와 연결된 다른 단어의 첫 글자는 대문자로 작성하는 것이 관례이다.

- 클래스의 구성 멤버

 

▶ 객체 지향 프로그래밍 특징

1. 추상화

  → 객체의 공통적인 속성과 기능을 추출하여 정의하는 것입니다.

 

2. 캡슐화

  → 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것으로 외부 객체는 객체 내부 구조를 알지 못하며 객체가 노출해 제공하는 필드와 메소드만 이용 가능합니다.

 

※ 정보은닉 : 객체 내부 구현을 숨김으로 객체가 반드시 정해진 매소드와 상호작용하도록 유도

  → 캡슐화와 정보은닉 두 개념은 객체의 응집도와 독립성을 높여 객체의 모듈화를 지향

      ☞ 재사용에 용이하고 유지보수가 쉬워진다.

 

3. 상속

  → 상위(부모) 객체의 필드와 메소드를 하위(자식) 객체에게 물려주는 행위로 하위 객체는 상위 객체를 확장해서 추가적인 필드와 메소드를 가질 수 있습니다.

  • 상위 객체를 재사용해서 하위 객체를 빨리 개발 가능
  • 반복된 코드의 중복을 줄임
  • 유지 보수의 편리성 제공
  • 객체의 다형성 구현

 

4. 다형성

  → 같은 타입이지만 실행 결과가 다양한 객체를 대입할 수 있는 성질 (

  • 객체를 부품화시키는 것 가능
  • 유지보수 용이


▶ 객체지향 프로그래밍의 장단점

1. 장점

  • 재사용성
  • 생산성 향상
  • 자연적인 모델링
  • 유지보수의 우수성

2. 단점

  • 개발 속도가 느림
  • 실행 속도가 느림
  • 코딩 난이도 상승