PPT-6장(내용정리)
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 1절 - 객체 지향 프로그래밍 >
객체 지향 프로그램이란 ? - OOP(Object Oriented Programming)
- 객체 생성 후 조립해 완성된 프로그램을 만드는 기법
객체(Object)란 ? - 물리적 존재, 추상적인 것 중에서 자신의 속성과 동작을 가지는 모든것
- 필드(속성) (=멤버변수), 메소드(동작)
객체의 상호 작용 ? 서로간의 기능(동작)을 이용하고 데이터를 주고 받음
객체간의 관계 ? - 객체 지향 프로그램에서 객체끼리 관계를 맺으
- 집합 관계 : 완성품과 부품의 관계
- 사용 관계 : 객체가 다른 객체 사용하는 관계
- 상속 관계 : 종류객체와 사물객체의 관계
객체 지향의 특징 ? - 캡슐화(보안) : 접근제한자(Access Modifier) -> 캡슐화를 볼 수 있게 바꿔줌
- 상속 : 상위 객체의 필드와 메소드를 하위 객체에게 상속해줌
- 다형성(Polymorphsim) : 같은 타입이지만 실행 결과에 다양한 객체를 대입할 수 있음, 유지 보수 > 용이
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 2절 - 객체와 클래스 >
객체 생성 순서 ? 개발자 -> 클래스(설계도) -> 객체(완성품)
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 3절 - 클래스 선언 >
클래스 이름 규칙 ? - 하나 이상의 문자
- 첫 번째 글자에 숫자 위치 X
- $, _ 외 다른 특수 문자 사용 X
- 예약자 불가
클래스 선언&컴파일 ?
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 4절 - 객체 생성과 클래스 변수 >
new 연산자 ? - 객체 생성 역할 , heap영역에 저장됨 : new 클래스( );
- 객체 생성 후 객체 생성 번지(주소값)을 리턴해줌
클래스의 용도 ? 실행용, 라이브러리(API : Application Program Interface)용
클래스 변수 ? - new 연산자에 의해 리턴 된 객체의 번지 저장(참조 타입 변수)
- heap영역의 객체 사용하기 위해 사용
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 5절 - 클래스의 구성 멤버 >
클래스 구성멤버 ? - 필드 Field (객체 데이터 저장되는 곳)(=전역변수의 개념)(클래스 블록의 가장 첫번째에 쓰임)
- 생성자 Constructor (객체 생성시 초기화 담당=필드값 설정)(생성자명 = 클래스명)
- 메소드 Method (객체 동작에 해당되는 실행 블록)
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 6절 - 필드(field) >
필드란 ? - 객체가 가지고 있는 고유 데이터
- 객체의 현재 데이터 상태
- 필드 선언시 : 타입 필드명 = 초기값;
필드의 기본 초기값?
필드 사용(필드 값 읽고, 변경하는 작업)시 ? - 객체 내부에서 호출시 : "필드명"
- 객체 외부에서 호출시 : "변수.필드명"
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 7절 - 생성자(Constructor) >
생성자란 ? - new 연산자에 의해 호출 : new 클래스( ); -> 객체의 초기화 담당
- 필드값 설정
- 메소드 호출 -> 객체 사용할 수 있도록 준비
기본생성자(Default Constructor) ? 생성자 선언 생략시 -> 컴파일러가 기본 생성자 추가
생성자 선언 ?
필드 초기화 ? - 초기값 없이 선언 -> 객체 생성시 기본값으로 자동 설정
- 다른 값으로 초기화 : 필드 선언시 초기값 설정, 생성자의 매개값으로 초기값 설정
매개변수 = 필드명 경우 ? this를 사용 (ex : this.필드 = 매개변수;)
생성자 오버로딩(Overloading) ? 매개변수의 타입, 순서, 개수가 다른 생성자를 여러개 선언할 수 있음
(생성자 명이 같더라도 각자 다른 생성자)
다른 생성자 호출시 ? this( ) 사용
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 8절 - 메소드(method) >
메소드란 ? 실행 블록을 가지고 있음 (=객체의 동작), 메소드 호출시 중괄호 { } 안에 내용 모두 실행
메소드 선언 ?
메소드 이름 규칙 ? - 숫자로 시작 X , $와 _ 외의 특수 문자 X
- 메소드명은 소문자로 작성 (관례)
- 단어 혼합시 이어 오는 단어의 첫 글자->대문자
매소드 매개변수 선언 ? 메소드 실행시 데이터를 외부에서 받기 위해 매개변수 사용함
리턴(return)문 ? 메소드 실행 중지 -> 리턴값 지정 (리턴값이 있는 메소드는 반드시 리턴값 지정해야함, 리턴값 없을 경우->void)
메소드 호출 방법 ? - 클래스 내부 호출시 : 메소드명 호출
- 클래스 외부 호출시 : 객체 생성 후 참조 변수 통해 호출
- 객체 내부 호출시 : 메소드명 호출, 매개변수의 타입과 순서에 맞게 매개값을 제공해야함
- 객체 외부 호출시 : 클래스 참조변수 = new 클래스(매개값,...); 로 생성 후
>> 참조변수.메소드(매개값,..) / 타입 변수 = 참조변수.메소드(매개값...)
메소드 오버로딩(Overloading) ? 클래스 내에 같은 이름의 메소드를 여러개 선언 (매개변수의 타입,순서,개수가 달라야함)
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 9절 - 인스턴스 멤버와 this >
인스턴스 멤버란 ? - 객체(인스턴스)마다 가지고 있는 필드(인스턴스 필드)&메소드(인스턴스 메소드)
- 객체 소속된 멤버이므로 객체 없이 사용 불가
this ? - 객체(인스턴스) 자신의 참조(번지)를 가지고 있음
- 객체 내부 : 인스턴스 멤버임을 명확히 하기 위해 this. 사용
- 매개변수,필드명 동일시 인스턴스 필드임을 명확히 하기 위해 사용
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 10절 - 정적 멤버와 static >
정적(static) 멤버란 ? - 클래스에 고정 된 필드와 메소드 -> 정적필드, 정적메소드
- 정적 멤버는 클래스 소속 멤버임
정적 멤버 선언시 ? static 사용(메소드영역) , 객체생성X -> 클래스에 바로 접근해 사용 , 객체 내부 존재X-메소드영역에 존재O
정적 멤버 사용 ? 클래스명.필드; / 클래스명.메소드(매개값,...);
인스턴스 VS 정적멤버 ? - 인스턴스 필드 : 객체마다 가져야 할 데이터
- 정적필드 : 공용적인 데이터
- 인스턴스 메소드 : 인스턴스 필드로 작업해야함
- 정적 메소드 : 인스턴스 필드로 작업하지 않음
싱글톤(Singleton) ? 하나의 애플리케이션 안에 단 하나의 객체 생성
싱글톤 만드는 방법 ?
싱글톤 얻는 방법 ?
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 11절 - final 필드와 상수(static final) >
final필드란 ? 최종적인 값을 갖고 있는 필드를 뜻함(=값 변경 불가)
상수(static final)? (상수 = 정적 finlal 필드) 상수명 : 전부 대문자로 써야함
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 12절 - 패키지(package) >
패키지란 ? - 클래스를 기능별로 묶어 각 그룹마다 그룹 이름을 붙인것
- 클래스 선언 시 패키지 결정(클래스는 서로 같은 패키지 안에서 실행 가능)
import문 ? 패키지가 다른 클래스를 사용할 때 import를 걸고 사용한다
패키지 선언시 ? - 패키지 선언은 클래스의 가장 첫줄에 한다
- 전부 소문자로 작성, 숫자로 시작X, $나 _제외 다른 특수문자 사용 불가,
- 실무에선 회사 도메인의 역순으로 주로 만듬
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 13절 - 접근 제한자(Access Modifier) >
접근제한자란 ? 클래스 및 클래스의 구성 멤버에 관한 접근을 제한함 (클래스제한, 생성자제한, 필드와 메소드제한)
접근제한자의 종류 ? public >> protected >> default >> private
클래스의 접근 제한 ? - default : 다른 패키지에서 사용 불ㅏ
- public : 다른 개발자 사용 가능, 라이브러리 클래스 만들 시 유용
생성자 접근 제한 ? 생성자가 가지는 접근 제한의 종류에 따라 호출 여부가 결정
필드&메소드의 접근 제한 ? 클래스 내부, 패키지 내, 패키지 상호간에 사용을 고려해 선언함
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 14절 - Getter와 Setter >
private ? - 클래스 선언시 필드는 대게 private으로 접근제한을 줌
- Getter 필요성 : 읽기 전용 필드
- Setter 필요성 : 외부에서 엉뚱한 값 변경 불가
Getter란 ? - private 필드값을 리턴 해줌
- 필요할 경우 필드값 가공 가능
- 필드값 boolean일 경우 : is필드명( ) , 필드명의 첫글자->대문자
Setter란 ? - 외부에서 주어진 값 -> 필드값으로 수정, 필요경우 외부값을 유효성 검사
- set필드명(타입 변수) - 매개변수 타입은 필드의 타입과 동일
단축키 ? - get/is필드명 혹은 set필드명 작성 후 Ctrl + space 후 Enter >> 자동으로 메소드 완성
- Alt+s -> r -> Alt+a -> r >> 자동으로 메소드 완성
-----------------------------------------------------------------------------------------------------------------------------------------------------
< 15절 - 어노테이션(Annotation) >
어노테이션 ? 프로그램에게 추가적인 정부를 제공해주는 메타데이터
어노테이션 용도 ? - 컴파일러 <- 코드 작성 문법의 에러 체크(정보제공)
- 소프트웨어 개발 틀이 필드,배치시 코드를 자동 생성하도록(정보제공)
- 실행시(런타임시) 특정 기능 실행하도록(정보제공)
어노테이션 적용 대상 ?