객체지향 프로그래밍은 시간과 비용에 대한 효율성을 더 좋게 만드는 프로그래밍 기법이다.
절차지향은 함수를 사용한 코드로 프로그램을 만들때마다 절차를 다 만들어줘야하고 약간의 변화에도 손이 많이 가서 유지보수/확장성 측면에서 생산성이 떨어진다. 반면 객체지향은 추상화, 캡슐화, 다형성, 상속성을 이용해 코드 재사용률을 증가시켜 재사요으 확장이 용이하다. 유지보수가 쉬워 생산성이 좋고 대형 프로젝트를 할 때 유리하다
+객체지향은 클래스 자료형을 배포할 수 있다
클래스는 객체를 정의, 객체를 생성하는데/만들어내는데 사용된다. 객체의 상태를 나타내는 필드와 객체의 행동을 나타내는 메소드로 구성, 필드는 클래스에 포함된 변수를 말하고 메소드는 특정 작업을 수행하기 위한 명령문의 집합을 말한다. 클래스를 선언할 대는 생성자(Constructor), 메소드를 필수로 만들어줘야 한다. (+필드는 선택 가능함)
선언 방법
자료형 메소드명 (자료형 변수명, 변수명…) {
명령;
}
객체 생성 후
객체참조변수이름.메소드이름();
객체참조변수이름,메소드이름
(인수1, 인수2...);
ex)
Car mycar = new Car(); //=>객체 생성
myCar.accelerate(60,3);
//마이카 인스턴스 accelerate()메소드를 호출함
: (=객체), 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체 / 객체를 소프트웨어에 실체화하면 그걸 인스턴스라 부름
// 인스턴스 생성 방법
형식) 클래스명 참조변수 = new 클래스명();
: 현실세계에 존재하는 사물을 속성(필드)과 기능(메소드)으로 구분하여 클래스로 만들어주는 방법
: 설계도
: 필드에 저장된 값을 이용해 필요한 기능을 제공하기 위한 명령들의 모임, 클래스에 포함되어 있고 객체의 행동을 나타냄
//메소드 호출 방식
참조변수.메소드명(값,값,...)
: 객체를 생성하기 위한 특별한 메소드
매개변수가 없는 생성자 자동완성
//default 생성자 자동 생성
alt+shift+s+c
//매개변수가 선언된 생성자 자동 완성
alt+shift+s+o
: 클래스에 포함되어 있고 변수, 객체의 상태를 나타냄, / 클래스에 포함된 변수들
//참조필드=참조변수, 얘가 바로 객체, 기본 변수와 다르게 주소값(리터럴값)을 저장
: 무반환형, 메소드를 호출하여 얻을 수 있는 결과가 없을 경우 사용하는 자료형
1) Setter : 객체지향에서 객체외부에서 객체의 데이터에 직접적으로 접근하는 것을 막는다 외부에서 데이터에 접근하지 않도록 막고 메소드만 공개해서 외부에서 메소드를 통해 접근하도록 유도한다 (메소드를 통해 데이터 변경)
선언 방식 )
-접근 제한자 : public
-리턴 타입, 반환형 : void
-메소드 이름 : set + 필드 이름(첫문자는 대문자)
-매개변수 타입 : 필드 타입
2) Getter : 객체 외부에서 객체 필드값을 사용하기에 맞지 않는 경우 메소드로 필드값을 가공 후, 외부로 전달한다
선언 방식 ) setFieldName(타입 fieldName)
-접근 제한자 : public
-리턴 타입, 반환형 : 필드의 리턴 타입
-메소드 이름 : get + 필드 이름(첫문자는 대문자)
-매개변수 타입 : 필드값
3)* Setter, Getter 사용 구분하는 방법 찾기!
//먼저 필드가 boolean이면 Is 메소드로 선언 (Getter, Setter 말고)
// 읽기 전용 만들기(외부에서 필드값을 읽을수만 있고 변경하지 못하게) :
Getter 메소드만 선언하거나, Setter 메소드를 private 접근 제한을 갖도록 선언하면 됨
클래스에 선언된 필드에 대해 자동으로 Getter/Setter 메뉴 생성하는 방법 :
메뉴에서 [Source] >> [Generate Getters and Setters] 선택 >> 자동생성 할 수 있는 창 열림
단축키는 [alt] +[shift]+ [S] >> 팝업 메뉴에서 [R] >> 생성메뉴 >> 필드선택 (대부분 all)
하나의 클래스에서 동일한 기능을 제공하는 메소드가 매개변수에 의해 여러개 선언해야 될 경우, 메소드명을 같게 선언하는 방법
: 상속 관계에서 부모 클래스의 메소드를 자식 //클래스에서 재선언하는 기능 - 부모 클래스의 메소드와 같은 형식으로 선언
=> 접근지정자, 반환형,메소드명,매개변수,예외 전달이 모든 같도록 선언
=> 부모 클래스의 메소드는 숨겨지고 자식 클래스의 메소드만 사용 가능
class 끝쪽에 >> extends Thread 입력
alt+shift+s+v >> run 선택후 generate
: 같은 이름의 메소드를 호출해도 상태에 따라 메소드를 선택하여 호출하는 기능 => 메소드 오버로드, 메소드 오버라이드
: 자식 클래스의 메소드에서 부모 인스턴스를 저장하기 위한 매개변수(키워드)
=> super 키워드를 이용하여 부모 인스턴스의 필드 또는 메소드에 접근하여 사용 가능
=> super 키워드를 사용하지 않아도 부모 인스턴스의 필드 또는 메소드 접근 가능
this 키워드로 필드 또는 메소드를 참조하여 없을 경우 super 키워드로 필드 또는 메소드 참조
super 키워드를 표현하는 경우
1.자식 클래스의 생성자에서 부모 클래스의 생성자를 호출하기 위해 사용
=> 생성자 호출 명령 전에 다른 명령을 작성할 경우 에러 발생
=> 부모 클래스의 매개변수가 선언된 생성자를 호출하여 부모 인스턴스 필드에 초기화 작업
2.자식 클래스의 오버라이드 메소드에서 부모 클래스의 숨겨진 메소드를 호출하기 super 사용