[Java] 2-1. 객체지향 프로그래밍 / 변수

루키·2024년 7월 24일

Java

목록 보기
7/10
post-thumbnail

1. 객체 지향 프로그래밍 (OOP)

1-1. 객체 지향 프로그래밍이란?

  • 객체 : 주체가 아닌 것, 주체가 활용하는 것

  • 객체 지향 프로그래밍(Object-Oriented Programming) : 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.

    • OOP의 장점
      • 코드 재사용이 용이합니다.
      • 유지 보수(추가, 수정, 삭제 등)가 쉽습니다.
      • 대형 프로젝트에 적합합니다.
    • OOP의 단점
      • 처리 속도가 상대적으로 느립니다.
      • 객체가 많으면 용량이 커질 수 있습니다.
      • 설계할 때, 많은 시간과 노력이 필요합니다.

1-2. 객체 지향 프로그래밍의 특징

  • OOP is A P.I.E (캡상추다) : Abstaction - Polymorphism - Inheritance - Encapsulation (캡슐화 - 상속 - 추상화 - 다형성)의 앞글자를 딴 것으로 객체지향 언어가 갖는 4가지 특징입니다.

    • Abstraction(추상화) : 객체를 추상화해서 클래스를 구성하는 것. 즉, 공통의 속성이나 기능을 묶어 이름을 붙이는 것입니다.
    • Polymorphism(다형성) : 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것입니다. (Overriding/Overloading이 가능 : 추후 포스팅에서 자세히 설명)
    • Inheritance(상속) : 부모 클래스의 속성과 기능을 이어받아 사용할 수 있고, 기능의 일부분을 변경해야 할 경우 자식 클래스에서 해당 기능만 다시 정의해서 사용할 수 있게 하는 것입니다.
    • Encapsulation(캡슐화) : 관련된 기능과 특성을 한 곳에 모으고 분류해서 객체 재활용이 원활하도록 하는 것입니다. 또한, 데이터를 외부에 직접 노출시키지 않고 메서드를 이용해서 보호할 수 있는 것입니다. 접근 제어자를 통해 정보를 은닉하고, 제어 권한이 있는 객체에서만 접근할 수 있도록합니다.
  • Class vs Instance/Object

    • 클래스(Class) : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성/상태(Attribute)와 기능/행위(Behavior)를 멤버 변수(Variable)와 멤버 메서드(Method)로 정의한 데이터 타입으로 객체를 만들기 위한 메타 정보라고 볼 수 있습니다. 쉽게 설명해서 객체를 정의해 놓은 설계도로 생각할 수 있습니다. 클래스는 틀만 제공할 뿐, 직접 사용할 수는 없습니다.
    클래스 정의 (추상화)
    class <클래스명>
    EX)
    class Person {
        ----------
        맴버 변수 설정
        <데이터 타입> <멤버 변수명>;
        EX) String name;
        ----------
        
        ----------
        멤버 메서드 설정
        <반환 타입> <멤버 메서드명>([인자]) {
            ~~~~~~~
            메서드 작성
            ~~~~~~~
        }
        EX)
        void work() {
            System.out.println("작업 중");
        }
    }
    • 객체(Instance/Object) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 구체화 되어 실제 프로그램에서 사용되는 데이터입니다.
    객체 생성 (구체화)
    <클래스명> <객체명> = new <클래스명>();
    EX) Person p1 = new Person();
    
    객체 멤버 변수 설정
    <객체명>.<멤버변수> = <>;
    EX) p1.name = "루키";
        System.out.println(p1.name); // "루키"
    
    객체 멤버 메서드 사용
    <객체명>.<멤버메서드>();
    EX) p1.work(); // "작업 중"
    • JVM의 메모리 구조
      • meta-space : 클래스 정보 처리 (타입 정보 / Field 정보 / Method 정보)
      • stack : 메서드의 실행 공간 (thread별 관리 / 메서드 호출마다 메서드 프레임 적층 / 프레임에 로컬 변수도 적층)
      • heap : 객체의 저장 공간 (thread에 의해 공유 / Garbage Collection에 의해 정리 / 상수 풀)
        cf) Garbage Collection이란? : 어떤 객체를 메모리에 할당해서 참조하다가 더 이상 그 메모리를 참조하지 않게 되면 해당 메모리를 자동으로 비워주는 것.

2. 변수 (Variable)

2-1. 변수의 종류

  • 타입에 따른 분류

  • 선언 위치에 따른 분류

    종류선언 위치변수 종류
    맴버 변수클래스 영역(static)클래스 맴버 변수
    클래스 영역인스턴스 멤버 변수
    지역 변수함수 내부지역 변수
    함수 선언부파라미터 변수
    • 인스턴스 멤버 변수
      • 선언 위치 : 클래스 {} 영역에 선언
      • 변수의 생성 : 객체가 만들어질 때, heap에 객체 별로 생성됨
      • 변수의 초기화 : 타입별로 default값으로 초기화
      • 변수에 접근 방법 : 객체 생성(메모리 할당) 후 객체 이름으로 접근
      • 소멸 시점 : G.C에 의해 객체가 없어질 때 (명시적으로 소멸 시킬 수 없음.)
    • 클래스 멤버 변수
      • 선언 위치 : 클래스 {} 영역에 static 키워드로 선언
      • 변수의 생성 : 클래스 로더에 의해 클래스가 로딩 될 때 heap에 클래스 별로 생성됨
      • 변수의 초기화 : 타입별로 default값으로 초기화
      • 변수에 접근 방법 : 객체 생성과 무관하게 클래스 이름으로 접근
      • 소멸 시점 : 클래스가 언로드 될 때 G.C에 의해 사라짐.
    • 지역 변수 & 파라미터 변수
      • 선언 위치 : 클래스 내부의 {} 영역 이외에 선언
      • 변수의 생성 : 선언된 라인이 실행될 때 생성
      • 변수의 초기화 : 사용하기 전 명시적 초기화 필요
      • 변수에 접근 방법 : 외부에서는 접근이 불가
      • 소멸 시점 : 선언된 영역을 벗어날 때 사라짐.
profile
주니어 FrontEnd 개발자가 되기 위한 기록

0개의 댓글