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

  • 컴퓨터 프로그램을 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다.
  • 각각의 객체는 메서지를 주고받고, 데이터를 처리할 수 있다.
  • 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태와 행위로 이루어진 객체로 만드는 것이다.
  • 이 객체들을 마치 레고 블록처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다.
  • 객체는 변수와 메소드를 묶은 것이다.

객체

  • 객체란 '의사나 행위가 미치는 대상'이며 이를 코드로 구현한 것이 클래스이다.
  • 클래스가 메모리 공간에 생성된 상태를 인스턴스라고 한다. 생성된 클래스의 인스턴스를 객체라고도 한다.

클래스

  • 멤버 변수와 메서드로 구성되어 있다.
  • 클래스란 객체를 추상화시킨 것이다. 객체의 속성과 기능을 코드로 만든 것이 클래스이다. 객체의 속성을 멤버변수로, 기능을 메서드로서 코딩한 것이 클래스이다.
  • 클래스의 전체 이름은 패키지이름.클래스이름이다.
  • 클래스 이름이 같다고 해도 패키지 이름이 다르면 클래스 전체 이름(class full name)이 다른 것이므로 다른 클래스가 된다.
    • ex) aaa 패키지 하위의 Student 클래스의 실제 이름은 aaa.Student이고, bbb 패키지 하위의 Student 클래스의 실제 이름은 bbb.Student이다.
  • 클래스형
    • 객체 자료형 또는 참조자료형이라고 한다.
  • public static void main(String[] args)
    main()함수는 자바 가상 머신(Java Virtual Machine, JVM)이 프로그램을 시작하기 위해 호출하는 함수다.
    클래스 내부에 만들지만 클래스의 매서드는 아니다.
  • 사용하려는 클래스가 같은 패키지에 있다면 바로 사용할 수 있다. 만약 다른 패키지에 있다면 import문을 사용해서 사용하려는 클래스를 불러와야 한다.

멤버 변수(member variable, 속성 property, 특성 attribute)

  • 클래스 내부에 선언하여 객체 속성을 나타내는 변수
  • 멤버 변수를 인스턴스 변수라고도 부른다.

멤버 함수 또는 메서드

  • 클래스 내부에서 멤버 변수를 사용하여 클래스 기능을 구현한 것
  • 클래스 내부에서 사용하는 멤버함수를 메서드라고 한다.
  • 메서드는 함수에 객체 지향 개념이 포함된 용어로 이해하면 된다.
  • 메서드 이름은 해당 클래스를 사용하는 코드의 입장에서 짓는 것이 좋다.

패키지

  • 클래스 파일의 묶음
  • 패키지의 계층 구조를 만드는 작업은 소스코드를 어떠한 계층 구조로 관리할지 구성하는 것이다.
  • 계층 구조를 잘 구성해야 소스 코드 관리와 유지보수가 편리하다.

인스턴스

  • 클래스를 구체화 한 것
    즉, 클래스를 실제 사용할 수 있도록 메모리 공간(힙 메모리)에 올린다는 뜻이다. 그리고 인스턴스를 가리키는 클래스형 변수를 "참조 변수"라고 한다.
  • 인스턴스를 생성하는 코드
    클래스형 변수_이름 = new 생성자;
Student studentAhn = new Student();
  • 위의 코드는 Student 클래스 자료형으로 studentAhn 변수를 선언하고 new Student();로 Student 클래스를 생성하여 studentAhn에 대입한다는 뜻이다.
  • 이 때 studentAhn을 참조변수라고 하고, 이 변수가 생성된 인스턴스를 가리킨다. + 인스턴스가 저장된 메모리를 studentAhn 변수가 가리킨다.
  • stduentAhn 변수는 지역 변수이다.
  • 지역 변수는 스택 메모리에 생성된다. 그리고 인스턴스는 힙 메모리에 생성된다. + 지역 변수 studentAhn에 생성된 인스턴스를 대입하는 것은 stduent Ahn에 인스턴스가 생성된 힙 메모리의 주소를 대입한다는 것과 같은 의미이다.
  • 참조변수를 사용하면 인스턴스의 멤버변수와 메서드를 참조하여 사용할 수 있다. 이 때 도트 연산자(.)를 사용한다.

힙 메모리(heap memory)

  • 프로그램에서 사용하는 동적 메모리(dynamic memory)공간을 말한다.
  • 일반적으로 프로그램은 스택, 힙, 데이터 이렇게 세 영역을 사용하는데, 객체가 생성될 때 사용하는 공간이 힙이다.
  • 힙은 동적으로 할당되며 사용이 끝나면 메모리를 해제해 주어야 한다.
  • C나 C++에서는 프로그래머가 직접 메모리를 해제해야 하지만, 자바에서는 가비지 컬렉터(garbage collector)가 자동으로 메모리를 해제해준다.

생성자

  • 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 역할을 한다.
  • 생성자는 클래스를 생성할 때만 호출한다.
  • 생성자의 이름은 클래스 이름과 같고, 생성자는 반환 값이 없다.
  • 인스턴스가 생성됨과 동시에 멤버 변수의 값을 지정하고 인스턴스를 초기화하기 위해 생성자를 직접 구현하여 사용하기도 한다.
  • 프로그래머가 생성자를 직접 추가하면 디폴트 생성자는 만들어 지지 않는다.

디폴트 생성자

  • 생성자가 없는 클래스는 클래스 파일을 컴파일할 때 자바 컴파일러에서 자동으로 생성자를 만들어 준다. 자동으로 만들어 주는 생성자를 디폴트 생성자(default constructor)라고 한다.

오버로드(overload)

  • 메서드 이름이 같고 매개변수만 다른 경우를 '오버로드'라고 한다.

생성자 오버로드

  • 생성자의 이름이 같고 매개변수가 다른 경우 생성자 오버로드(constructor overload)라고 한다.

this

  • this는 생성된 인스턴스 스스로를 가리키는 예약어이다.
  • this를 사용하여 생성된 인스턴스 자신의 주소 값을 반환할 수 있다.

접근 제어자(access modifier)

  • 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있다. 이러한 예약어를 접근 제어자라고 한다.
  • 접근제어자를 통해 정보 은닉(information hiding)을 한다.
  • public: 선언한 변수나 메서드는 외부 클래스에서도 접근이 가능하다.
  • private: 선언한 변수나 메서드는 선언된 클래스 내부에서만 접근할 수 있다.
  • protected: 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고 그 외 클래스에서는 접근할 수 없다.
  • 접근 제어자를 지정 안하는 경우: default이며 같은 패키지 내부
    에서만 접근할 수 있다.

getter, setter

  • 멤버 변수 값을 반환하는 get()메서드를 getter, 멤버 변수 값을 지정하는 set() 메서드를 setter라고 부른다,

출처: do it 자바프로그래밍 입문

profile
정팔입니다.

0개의 댓글