[자바의정석]Java - 객체지향(1) #003

박정현·2022년 1월 4일
0

Java

목록 보기
3/16
post-thumbnail

객체지향 언어

객체지향

  • 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.사용자정의 데이터 타입
  1. 변수 : 하나의 데이터를 저장할 수 있는 공간
  2. 배열 : 같은 종류의 여러 데이터를 하나로 저장
  3. 구조체 : 서로 관련된 여러 데이터(다른 타입도 가능) 저장
  4. 클래스 : 데이터와 함수의 결합(구조체 + 함수)

선언위치에 따른 변수의 종류

  • 클래스영역 :
    클래스 변수(static)(cv) = 클래스가 메모리에 올라갈 때 생성됨(따로 객체생성 안해도된다)
    인스턴스 변수(iv) = 인스턴스가 생성 될 때 생성됨(객체를 생성 할 때)
  • 클래스 이외(메서드)의 영역 :
    지역변수 (lv) = 변수 선언문이 수행 될 때
  • 클래스 변수와 인스턴스 변수의 차이점 :
    공통적인 속성 = 클래스변수(cv)
    개별적인 속성 = 인스턴스변수(iv)
    ex) 포커카드의 숫자,문양응 개별적 속성 카드의 높이,폭 공통적인 속성이다.

  • 클래스 변수(cv) 사용 할 때 : 클래스명.cv

  • 인스턴스 변수(iv) 사용 할 떄 : 객체 생성 한 참조변수.iv

  • static 은 다른 객체를 생성하도 같은 메모리 공간을 공유한다.

메서드

메서드란? , 장점

  • 문장들을 묶어놓은 것
  • 값을 받아서 처리하고, 결과를 반환 해준다.
  • 중복 코드 방지를 위함
  • 코드 관리가 쉽다
  • 코드를 재사용할 수 있다
  • 코드가 간결해서 이해하기 쉬워진다
  • 하나의 메서드는 한가지 기능만 수행하도록 작성

메서드 구조

메서드 호출

return문

  • 반환타입이 void 가 아닌 경우, 반드시 return 문을 작성한다
  • if 문 사용시 참,거짓 둘다 return 문 구현 해 주어야한다
  • 반환 값은 메소드 타입과 같아야한다

호출 스택(call stack)

  • 스택: 밑이 막힌 상자 위로 쌓이고 위에서 부터 나간다 (선입후출)
  • 메서드 수행에 필요한 메모리가 제공되는 공간
  • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제

기본형 매개변수

  • 기본형 : read only
  • 참조형 : read & write

static 메서드와 인스턴스 메서드

  • 인스턴스 메서드 :
    인스턴스 생성후 -> '참조변수.메서드이름()' 으로 호출
    메서드 내에서 인스턴스 변수 사용가능

  • static 메서드 :
    ex) Math.random()
    객체 생성없이 '클래스이름.메서드이름()' 으로 호출
    메서드 내에서 인스턴스 변수 사용불가

오버로딩(overloading)

오버로딩

  • 한 클래스 안에 같은 이름의메서드 여러 개 정의 하는 것

오버로딩 성립조건
1. 메소드 이름이 같아야한다.
2. 매개변수의 개수 또는 타입이 달라야한다.
3. 반환 타입은 영향이 없다.

생성자(contstructor)

생성자

  • 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
  • 생성자는 인스턴스 초기화를 담당

생성자 작성 규칙

  • 이름이 클래스 이름과 같아야 한다
  • 리턴값이 없다(void 필요없음)
  • 모든 클래스는 반드시 한개이상의 생성자를 가진다

기본 생성자

  • 클래스이름(){}
  • 매개변수가 없는 생성자
  • 생성자가 하나도 없을때 만, 컴파일러가 자동으로 추가

생성자 this()

  • 같은 클래스의 다른 생성자를 호출할때 사용한다
  • 다른 생성자 호출시 첫 줄에서만 사용가능

참조변수 this

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

변수의 초기화

  • 지역변수(lv)는 개발자가 직접 초기화를 해야한다(사용전에 꼭!)
  • 멤버변수(iv,cv)는 자동 초기화 된다

멤버변수의 초기화

  • cv,iv의 초기화 (자동초기화(0으로),간단초기화(=),복잡초기화(블럭) )
  1. 명시적 초기화(=,대입연산자를 사용) 참조형 변수는 객체 주소로 초기화(new)
  2. 초기화 블럭 - 복잡한 초기화
    인스턴스 초기화 블럭 : {} <- 거의 안쓴다
    클래스 초기화 블럭 : static{}
  3. iv일때는 생성자 보통 생성자로 초기화

멤버변수의 초기화 시점

  • 클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때 단 한번
  • 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다
  • 초기화 순서는 (자동 -> 간단 -> 복잡 순)
  • 클래스는 딱 한번만 초기화 하지만 인스턴스는 객체가 생성될 때 마다 초기화 된다!
profile
빠샤

0개의 댓글

관련 채용 정보