OOP Basic(Object Oriented Programming)
객체(Object)
-의사나 행위가 미치는 대상(사전적 의미)
-구체적, 추상적 데이터의 단위(학생,회원,생산 등등)
-시간이나 사건의 흐름에 따른 프로그래밍(대표 언어 : c언어)
일어난다 -> 씻는다 -> 밥을 먹는다 -> 버스를 탄다-> 요금을 지불한다 -> 학교에 도착
-객체들 사이의 인터랙션이 일어남, 관계들이 형성됨(대표 언어 : c++,c#,java,JS,Python 등)
=>객체를 정의하고 각 객체 제공하는 기능들을 구현하고 각 객체가 제공하는 기능들 간의 소통(메세지 전달)을 통하여 객체간의 협력을 구현해야함
1.클래스는 대문자로 시작
2.java 파일 하나에 클래스는 여러 개가 있을 수 있지만, public 클래스는 하나이고, public 클래스와 .java 파일의 이름은 동일함
3.camel notation 방식으로 명명(ex: ryuSeungMin)
[OOP 기본 개념]
스택 : 함수가 호출될 때 지역 변수들이 사용하는 메모리
함수의 수행이 끝나면 자동으로 반환 되는 메모리
1.객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
2.멤버 함수 (member function)이라고도 함
3.메서드를 구현함으로써 객체의 기능이 구현 됨
4.메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는것이 좋음
예) getStudentName()
1.클래스는 객체의 속성을 정의 하고, 기능을 구현하여 만들어 놓은 코드 상태
2.실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨
가령, 학생의 클래스에서 생성된 각각의 인스턴스는 각각 다른 이름, 학번, 학년등의 값을 가지게 됨
3.new 키워드를 사용하여 인스턴스 생성
1.생성된 인스턴스는 동적 메모리(heap memory) 에 할당됨
2.C나 C++ 언어에서는 사용한 동적 메모리를 프로그래머가 해제 시켜야 함 ( free() 난 delete 이용) 그러나 JAVA에서 Gabage Collector 가 주기 적으로 사용하지 않늠 메모리를 수거
3.하나의 클래스로 부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 됨
객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
클래스 : 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수 : 클래스의 속성, 특성
메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 : 생성된 인스턴스의 메모리 주소 값
-생성자 기본 문법
<class_name>([<argument_list])
{
[<statements]
}
1.객체를 생성할 때 new 키워드와 함께 사용 - new Student();
2.생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new 와 함께 호출 됨
3.객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출 함
4.생성자는 반환 값이 없고, 클래스의 이름과 동일
5.대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private 으로 선언되는 경우도 있음
-클래스에는 반드시 적어도 하나 이상의 생성자가 존재
-클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음
-클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어 줌 -> public Student(){}
└즉 클래스에 생성자가 명시되어있을 경우 기본 생성자는 사용할 수 없음, 기본생성자도 따로 만들어 주면 사용가능
-매개 변수가 없음, 구현부가 없음
1.클래스형으로 변수를 선언
2.기본 자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다름
3.참조 자료형을 사용 할때는 해당 변수에 대해 생성하여야 함 (String 클래스는 예외적으로 생성하지 않고 사용할 수 있음)
접근 제어 지시자 (accesss modifier)
1.클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
2.private : 같은 클래스 내부에서만 접근 가능 ( 외부 클래스, 상속 관계의 클래스에서도 접근 불가) -> 접근 제어자를 선언함으로써 객체를 사용함에 있어서 오류를 막을 수 있음!
3.default : 같은 패키지 내부에서만 접근 가능 ( 상속 관계라도 패키지가 다르면 접근 불가)
4.protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없음
5.public : 클래스의 외부 어디서나 접근 할 수 있음