객체지향 언어
객체지향
- 80년대 초 소프트웨어의 위기 - 빠른 변화를 못 쫓아감
- 해결책으로 객체 지향 언어를 도입 (절차적 -> 객체지향)
객체지향 이 시작된건 1960년대 이지만 하드웨어가 딸려서 보편화x
- 코드의 재사용성 높고 유지보수가 용이, 중복코드 제거
- 객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙)
oop(객체지향프로그래밍) 의 4대 핵심 개념
1. 캡슐화
2. 상속
3. 추상화
4. 다형성
클래스와 객체
클래스와 객체
- 클래스의 정의 : 클래스란 객체를 정의해 놓은것.
- 클래스의 용도 : 클래스는 객체를 생성하는데 사용.
- 객체의 정의 : 실제로 존재하는것. 사물 또는 개념 , 말로 표현 할 수있는 것
- 객체의 용도 : 객체가 가지고있는 기능과 속성에 따라 다르다
객체의 구성요소
- 속성과 기능 (속성 = 변수 , 기능 = 메서드)
- 속성 : 크기,길이,높이,색상
- 기능 : 행동, 켜기 ,끄기,볼륨높이기 주로 동사
객체와 인스턴스
- 객체 : 모든 인스턴스를 대표하는 일반적인 용어
- 인스턴스 : 특정 클래스로부터 생성된 객체(예:TV인스턴스)
- 객체랑 인스턴스는 같은용어
- 클래스 -> 인스턴스화 -> 객체(인스턴스)
하나의 파일에 여러개의 클래스 작성
- 하나의 소스파일에는 하나의 클래스만 작성하는것이 바람직함
- 파일명은 public 클래스의 이름과 일치해야된다
- public 클래스는 하나 이상 이면 안된다
- public가 하나도 없는 경우 클래스명 중 아무거나 사용가능
객체의 생성과 사용
- 생성: 클래스명 변수명; 변수명 = new 클래스명();
Tv t = new Tv()
- 사용: 참조변수.객체변수 = 7; 참조변수.객체메서드();
t.channel = 7;
객체 배열
- 객체 배열 == 참조변수 배열
- Tv tv1,tv2,tv3; 를 Tv[] tvArr = new Tv[3];
- Tv[] tvArr = {new Tv(),new Tv(),new Tv(),}
클래스의 정의
- 클래스 : 1.설계도 ,2.데이터+함수 ,3.사용자정의 데이터 타입
- 변수 : 하나의 데이터를 저장할 수 있는 공간
- 배열 : 같은 종류의 여러 데이터를 하나로 저장
- 구조체 : 서로 관련된 여러 데이터(다른 타입도 가능) 저장
- 클래스 : 데이터와 함수의 결합(구조체 + 함수)
선언위치에 따른 변수의 종류
- 클래스영역 :
클래스 변수(static)(cv) = 클래스가 메모리에 올라갈 때 생성됨(따로 객체생성 안해도된다)
인스턴스 변수(iv) = 인스턴스가 생성 될 때 생성됨(객체를 생성 할 때)
- 클래스 이외(메서드)의 영역 :
지역변수 (lv) = 변수 선언문이 수행 될 때
-
클래스 변수와 인스턴스 변수의 차이점 :
공통적인 속성 = 클래스변수(cv)
개별적인 속성 = 인스턴스변수(iv)
ex) 포커카드의 숫자,문양응 개별적 속성 카드의 높이,폭 공통적인 속성이다.
-
클래스 변수(cv) 사용 할 때 : 클래스명.cv
-
인스턴스 변수(iv) 사용 할 떄 : 객체 생성 한 참조변수.iv
-
static 은 다른 객체를 생성하도 같은 메모리 공간을 공유한다.
메서드
메서드란? , 장점
- 문장들을 묶어놓은 것
- 값을 받아서 처리하고, 결과를 반환 해준다.
- 중복 코드 방지를 위함
- 코드 관리가 쉽다
- 코드를 재사용할 수 있다
- 코드가 간결해서 이해하기 쉬워진다
- 하나의 메서드는 한가지 기능만 수행하도록 작성
메서드 구조
메서드 호출
return문
- 반환타입이 void 가 아닌 경우, 반드시 return 문을 작성한다
- if 문 사용시 참,거짓 둘다 return 문 구현 해 주어야한다
- 반환 값은 메소드 타입과 같아야한다
호출 스택(call stack)
- 스택: 밑이 막힌 상자 위로 쌓이고 위에서 부터 나간다 (선입후출)
- 메서드 수행에 필요한 메모리가 제공되는 공간
- 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
기본형 매개변수
- 기본형 : read only
- 참조형 : read & write
static 메서드와 인스턴스 메서드

오버로딩(overloading)
오버로딩
- 한 클래스 안에 같은 이름의메서드 여러 개 정의 하는 것
오버로딩 성립조건
1. 메소드 이름이 같아야한다.
2. 매개변수의 개수 또는 타입이 달라야한다.
3. 반환 타입은 영향이 없다.
생성자(contstructor)
생성자
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
- 생성자는 인스턴스 초기화를 담당
생성자 작성 규칙
- 이름이 클래스 이름과 같아야 한다
- 리턴값이 없다(void 필요없음)
- 모든 클래스는 반드시 한개이상의 생성자를 가진다
기본 생성자
- 클래스이름(){}
- 매개변수가 없는 생성자
- 생성자가 하나도 없을때 만, 컴파일러가 자동으로 추가
생성자 this()
- 같은 클래스의 다른 생성자를 호출할때 사용한다
- 다른 생성자 호출시 첫 줄에서만 사용가능

참조변수 this
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스 메서드(생성자 포함)에서 사용가능
- 클래스 메서드(static)에서는 사용 불가
- 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
- this 참조변수는 생략이 가능하지만 lv,iv이름이 같으면 생략 불가능

- static 주의사항

변수의 초기화
- 지역변수(lv)는 개발자가 직접 초기화를 해야한다(사용전에 꼭!)
- 멤버변수(iv,cv)는 자동 초기화 된다
멤버변수의 초기화
- cv,iv의 초기화 (자동초기화(0으로),간단초기화(=),복잡초기화(블럭) )
- 명시적 초기화(=,대입연산자를 사용) 참조형 변수는 객체 주소로 초기화(new)
- 초기화 블럭 - 복잡한 초기화
인스턴스 초기화 블럭 : {} <- 거의 안쓴다
클래스 초기화 블럭 : static{}
- iv일때는 생성자 보통 생성자로 초기화
멤버변수의 초기화 시점
- 클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때 단 한번
- 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다

- 초기화 순서는 (자동 -> 간단 -> 복잡 순)
- 클래스는 딱 한번만 초기화 하지만 인스턴스는 객체가 생성될 때 마다 초기화 된다!