객체지향언어 특징
- 코드 재사용성이 높다
- 중복 코드 제거
- 코드 유지 보수가 용이하다
핵심개념 4가지
상속 / 캡슐화 / 다형성 / 추상화
클래스(데이터 + 함수)
- ‘객체를 정의해놓은 설계도’ 라고 생각하면 이해하기 쉽다
- 객체를 이용하기 위해 관련된 여러 데이터를 하나로 저장할 수 있는 공간
- 사용자 정의 타입 : 사용자가 원하는 타입을 직접 만들어서 사용이 가능하다
객체 ( iv 묶음 )
- 실제로 존재하는 것. 용도는 기능(변수)과 속성(메서드)에 따라 달라진다.
-객체 생성하는 법
- 클레스이름 참조변수 = new 클래스이름();
- Ex) Tv t = new Tv();
객체배열 [ 참조변수 배열 ]
- 클래스[ ] 배열 이름 = new 클래스[ ] ;
- Ex) Tv[ ] tvArr = new Tv[3];
- 생성 후 반드시 객체를 생성해야만 사용할 수 있다
- Ex) tvArr[0] = new Tv() ;
- Ex) tvArr[1] = new Tv() ;
- Ex) tvArr[2] = new Tv() ;
- 생성 후 반드시 객체를 생성해야만 사용할 수 있다
변수의 종류 ( 선언위치에 따른 변수의 종류 )
- 영역
- 클래스 영역
- iv : 객체를 생성해야 사용가능 , 인스턴스가 생성될때 생성됨
- cv : 객체 생성 필요 X , 아무때나 사용가능 , 자동으로 생성된다
- (클래스가 메모리에 로드시 생성)
- 메서드 영역
- lv : 클래스 영역외에 생성되며, 메서드 종료시 자동종료된다.
- 변수선언문이 생성되었을 때 생성된다.
- ( 메서드 , 초기화 블럭, 생성자 )
- lv : 클래스 영역외에 생성되며, 메서드 종료시 자동종료된다.
- 클래스 영역
인스턴스 변수와 클래스 변수
- 객체의 속성
- iv : 숫자 , 무늬 등 개별속성
- EX) 참조변수 변수이름
- C.kind = “HEART”;
- cv : 폭 , 높이 등 공통속성
- 사용시 EX) 클래스이름.변수이름
- iv : 숫자 , 무늬 등 개별속성
- cv는 하나의 저장공간을 공유하기 때문에 항상 공통된 값을 갖는다
지역변수
lv는 메서드내에 선언된 변수. 속한 영역이 다른 lv는 중복된 이름이어도 상관이 없다
메서드 ( 클래스안에 있어야함)
- 선언부 + 구현부로 구성되어 있다
- EX) 선언부 : 반환타입 메서드이름(타입 변수명, 타입 변수명) :: int plus (int a , int b)
- EX) 구현부 : { 메서드 호출시 실행될 코드 return (a+b); }
- 문장들을 작업단위로 묶어서 이름을 붙인 것
- 값(입력) → 처리 → 결과반환(출력)
메서드 실행흐름( 1 메서드 , 1기능)
- 객체생성 → 메서드 호출 → 내용수행 → 호출한 곳으로 반환
메서드 호출
- 메서드 이름(값1 , 값2) ; // int result = plus(3,5);
메서드의 장점
- 코드중복을 줄여준다
- 유지 보수할때 용이하다
- 코드 재사용성이 높아진다
- 코드가 간결해진다
return문
- 실행중인 메서드를 종료하고 호출한 곳으로 되돌아간다
- 반환타입이 void가 아닐 경우에는 반드시 return 문이 필요하다
- 조건식(IF문)을 사용할때 값이 false라도 return문을 작성해야한다
- 반환값이 void가 아닌경우에는 반환타입을 반드시 일치 시켜야한다
매개변수의 유효성 검사
- 적절하지 않은 값이 입력되면 값을 조절하게 하거나 return문으로 작업을 중단하고 호출한 메서드로 되돌아가게 하는 코드를 반드시 넣어주어야 한다
기본형, 참조형 매개변수
- 기본형 매개변수 : 기본형 타입(8개)이 매개변수인 경우에는 변수의 값을 읽기만 가능(Read Only)
- 참조형 매개변수 : 기본형 타입이 아닌 매개변수인 경우에는 변수의 값을 Read 와 Write 둘다 가능하다
호출스택
- 메서드 수행에 필요한 메모리에 제공되는 공간
- 메서드가 호출되면 호출스택에 메모리가 할당 , 종료되면 해제
- 맨위의 메서드만 실행중이고 나머지는 대기중
참조형 반환타입
- 객체주소를 반환한다
- 객체 주소를 반환했기 때문에 객체를 다를수 있다
재귀호출
- 메서드가 자기자신을 호출하는 것
Heap ( 힙 )
- 인스턴스가 생성되는 공간.
- 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다 ( iv 생성공간 )
메서드 영역 ( Method Area )
- 프로그램 실행중 어떤 클래스가 사용되면 JVM 은 해당 클래스파일을 읽어 클래스 정보를 저장
- 이때 cv도 이 영역에 함께 생성된다
인스턴스 메서드
- 객체 생성 후 사용가능
- 참조변수.메서드이름() 으로 호출
- 메서드내에서 iv 사용가능
- 인스턴스 멤버와 관련된 작업을 하는 메서드
static 메서드 ( 클래스 메서드)
- 클래스이름.메서드이름() 으로 호출
- iv와 달리 객체 생성이 필요하지 않다
- 메서드에서 iv를 사용할 수 없음 ( iv를 사용하지 않으면 static메서드 )
- iv를 사용할수 없는 이유 : iv를 사용하려면 객체가 있어야하는데 cv가 생성된 시점에서 객체가 있는지 없는지 모르기 때문에 iv를 사용할 수 없다
메서드간 호출과 참조
호출x
static → 인스턴스
메서드 ← 메서드
호출 ㅇ
- 인스턴스 메서드가 호출되었으면 이미 객체 생성 ( iv가 이미 존재한다 )
- static 메서드는 iv 사용 불가 ( 객체가 있는지 없는지 모르기 때문 )
오버로딩 ( EX . Println )
- 한 클래스 안에 같은 이름의 메서드를 여러개 정의하는 것
- 오버로딩 성립조건
- 메서드 이름이 일치해야한다
- 매개변수 개수 또는 타입이 달라야 한다
- 반환타입은 오버로딩의 영향을 주지 않는다
- 오버로딩 장점
- 메서드 이름을 절약할 수 있다
- 이름으로 같은 기능인지 예측이 가능하다
- 가변인자 오버로딩
- 사용방법
- 타입…변수명
- Object…args
- 가변인자는 항상 마지막 매개변수이어야 한다
- 가변인자를 사용한 메서드는 오버로딩 하지 않는게 좋다
- 사용방법
생성자 ( iv 초기화 메서드 )
- 생성자 규칙
- 생성자 이름과 클래스 이름 일치
- 리턴값 없음
- 모든 클래스는 생성자를 가진다
- 기본 생성자
- 클래스 이름 () {} / (매개변수) 도 { 하는일} 도 없다
- 매개변수가 없는 생성자
- 생성자가 하나도 없을때만 컴파일러가 자동추가 해준다
- 매개변수가 있는 생성자
- 인스턴스를 생성하는 동시에 원하는 값으로 초기화 할 수 있다
- 인스턴스 생성 후 인스턴스 변수의 값을 변경하는 것보다 더 간결하다
생성자 this ( )
- 생성자에서 같은 클래스의 다른 생성자를 호출할 때 클래스 이름 대신 this를 사용한다
- 다른 생성자 호출 시 첫줄에만 사용 가능
- 다른 생성자로 인해서 호출 이전의 초기화 작업이 무의미해지기 때문.
참조변수 this
- iv와 lv를 구분하기 위해서 사용한다
- this를 사용하지 않으면 lv
- 인스턴스 자신을 가르키는 참조변수 (객체 주소가 저장되어 있다)
- 인스턴스 메서드에서 사용가능 / static은 불가
변수의 초기화
- iv와 cv는 자동초기화
- lv는 무조건 수동초기화
'Java > 자바의정석' 카테고리의 다른 글
Java_날짜와 시간 & 형식화 (0) | 2023.08.06 |
---|---|
JAVA_java.lang패키지 , 유용한 클래스 정리 (자바의정석 9장) (0) | 2023.08.02 |
JAVA_예외처리 정리 (자바의정석 8장) (0) | 2023.07.26 |
JAVA _객체지향언어 개념 -3-(자바의정석 7장) (0) | 2023.07.19 |
JAVA _객체지향언어 개념 -2- (자바의정석 7장) (0) | 2023.07.17 |