kh 정보 교육원 13,14일차
객체 지향 언어
객체 지향 특성 캡슐화 : 객체를 캡슐로 싸서 내부를 볼 수 없게 하는것
외부의 접근으로부터 객체 보호
클래스 (class) : 객체 모양을 선언한 틀(캡슐화)
메소드(멤버 함수)와 필드(멤버변수)는 모두 클래스 내에 구현된다
객체 지향의 특성 상속
상위 개체의 속성이 하위개체에 물려진다
부모클래스 : 수퍼 클래스
하위 클래스 : 서브 클래스 . 수퍼클래스를 재사영하고 새로운 특성을 추가한다
다형성
같은 이름의 매소드가 클래스나 객체에 따라 다르게 동작하도록 구현
메소드 오버로딩,메소드 오버라이딩 ...
메소드 오버로딩
같은 이름이지만 다르게 작동하는 여러 메소드
메소드 오버라이딩
수퍼클래스의 메소드를 서브클래스마다 다르게 구현
객체 지향 언어의 목적
1. 소프트웨어의 생산성 향상
2. 실세계에 대한 쉬운 모델링
절차지향 프로그래밍 : 작업 순서 표현,작업을 함수로 작성한 함수들의 집합
객체지향 프로그래밍 : 객체들간의 상호작용, 클래스 혹은 객체들의 집합으로 프로그램 작성
클래스는 객체를 만들어 내기 위한 설계도 혹은 틀, 객체의 속성과 행동 포함
객체는 클래스의 모양 그대로 찍어낸 실체 프로그램 실행중에 생성되는 실체 인스턴스
클래스 : 소나타자동차, 사람, 붕어빵틀
객체 : 출고된 실제 소나타 100대, 나 너 윗집사람 아랫집 사람, 구워낸 붕어빵들
클래스 선언
class 키워드로 선언 {로 시작하여}로 닫는다 이곳에 모든 필드와 메소드를 구현한다.
class Circle은 Circle이름의 클래스를 선언한다
접근권한 public,defualt,protected,private
필드와 메소드
필드 : 객체 내에 값을 저장하는 멤버변수
메소드 : 함수이며 객체의 행동(행위)를 구현한다
생성자
클래스의 이름과 동일한 특별한 메소드
객체가 생성될 때 자동으로 한 번 호출되는 메소드
개발자는 객체를 초기화하는데 필요한 코드 작성
객체 생성 및 접근
반드시 new 키워드를 이용하여 생성한다
new는 객체의 생성자 호출
객체 생성과정
객체에 대한 레퍼런스 변수 선언
객체 생성 - 메모리 할당 - 객체 내 생성자 코드 실행
개체의 멤버 접근- 객체 레퍼런스 멤버
생성자 개념
객체가 생성될 때 초기화를 위해 실행되는 메소드
특징
메소드,생성자 이름은 클래스와 동일
생성자 여러개 작성 가능(오버로딩)
생성자는 new를 통해 객체를 생성할 때 객체당 한 번 호출
생성자는 리턴 타입을 지정할 수 없음
생성자의 목적은 객체 초기화
개발자가 생성자를 작성하지 않았으면 컴파일러가 자동으로 기본 생성자 삽입
기본 생성자
매개 변수 없고 아무 작업 없이 단순 리턴하는 생성자, 디폴트 생성자라고도 부름
클래스에 생성자가 하나도 선언되지 않은 경우, 컴파일 러에 의해 자동으로 삽입
this 레퍼런스
객체 자신에 대한 레퍼런스
this.멤버 형태로 멤버 사용
this가 필요한 경우
객체의 멤버 변수와 메소드 변수의 이름이 같은 경우
다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때
메소드가 객체 자신의 레퍼런스를 반환할 때
this()로 다른 생성자 호출
클래스 내의 다른 생성자 호출
생성자 내에서만 사용 가능
반드시 생성자 코드의 제일 처음에 수행
public Book() {
System.out.println("생성자가 호출되었음");
this(null, null, 0); // 생성자의 첫 번째 문장이 아니기 때문에 컴파일 오류
객체 배열
클레스 이름 [] 변수;
변수 = new 클레스 이름[5]
생성 및 사용
Circle [] c;
c = new Circle[5];
for (int i = 0; i < c.length; i++) // c.length은 배열 변수의 크기로서 5
c [i] = new Circle(i);
for (int = i; i < c.length; i++) // 배열에 있는 모든 Circle 객체의 면적 출력
System.out.print((int)(c[i].getArea()) + " ");
여러 클래스를 만들어 정보 입력받고 출력하는 프로그램 실습을 진행했는데 머리 터질것 같다..
낼 셤이라 빨리 자야겟다