객체지향 프로그래밍(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 자바프로그래밍 입문