자바 객체지향 1
-
객체지향 언어
- 코드의 재사용성이 높고 유지보수가 용이. 중복 코드 제거핵심개념
- 캡슐화
- 상속
- 추상화
- 다형성
- 클래스의 정의 : 클래스란 객체를 정의해 놓은 것
- 클래스의 용도 : 클래스는 객체를 생성하는데 사용
- 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념
- 객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름 -
객체 = 속성(변수) + 기능(메서드)
- 객체 : 모든 인스턴스를 대표하는 일반적 용어
- 인스턴스 : 특정 클래스로부터 생성된 객체 (예: Tv인스턴스)
Q. 클래스가 왜 필요한가?
A. 객체를 생성하기 위해
Q. 객체가 왜 필요한가?
A. 객체를 사용하기 위해
Q. 객체를 사용한다는 것은?
A. 객체가 가진 속성과 기능을 사용하려고
-
객체의 생성과 사용
//1 .객체의 생성 Tv t; //클래스명 변수명; t = new Tv(); //변수명 = new 클래스명(); //2. 객체의 사용 t.channel = 7; t.channelDown(); System.out.println("현재 채널은" + t.channel + "입니다.");
-
클래스 1.설계도 2.데이터+함수 3.사용자 정의 타입
class Variables { int iv; // 인스턴스 변수 static int cv; //클래스 변수(static변수, 공유변수) void method() { int lv = 0; // 지역변수 } }
- 클래스 변수(static) : 클래스가 메모리에 올라갈 때 생성 -> 객체생성 필요x, 참조변수 필요x, 그냥 사용가능
- 인스턴스 변수 : 인스턴스가 생성되었을 때 생성
- 지역변수 : 변수 선언문이 수행되었을 때 생성
❓ CV : 모든 객체가 공유하는 값
- 메서드
1 .작업단위로 문장들을 묶어서 이름 붙인 것
2 .값(입력)을 받아서 처리하고, 결과를 반환(출력)
int add (int x, int y) { int result = x + y; return result; //결과를 반환 }
-
return문
- 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다. -
호출 스택(call stack)
- 메서드 수행에 필요한 메모리가 제공되는 공간
- 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
- 스택(stack) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다. -
기본형 매개변수
- 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다.
- 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다.⛔ 6-23 기본형 매개변수 다시 ⛔
class Data { int x; } class Ex6_6 { public static void main (String[] args) { Data d = new Data(); d.x = 10; System.out println("main() : x = " + d.x); change(d.x); System.out.println("After change(d.x)"); System.out.println("main() : x = " + d.x); } static void change(int x) { //기본형 매개변수 x = 1000; System.out.println("change() : x = " x); } }
⛔ 6-24 참조형 매개변수 다시 ⛔
class Data2 { int x; } class Ex6_7 { public static void main(String[] args) { Data2 d = new Data2(); d.x = 10; System.out.println("main() : x = " + d.x); change(d); System.out.println("After change(d)"); System.out.pringln("main() : x = " + d.x); } static void change(Data2 d) { //참조형 매개변수 d.x = 1000; System.out.pringln("change() : x = " + d.x); } }
-
인스턴스 메서드
- 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
- 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용가능 -
static 메서드 (클래스 메서드)
- 객체생성 없이 '클래스이름. 메서드이름()'으로 호출
ex) Math.random(), Math.round()
- 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수(iv) 사용불가class MyMath { long a, b; //인스턴스 변수 long add() { //인스턴스 메서드(iv 사용) return a+b; } static long add(long a, long b) { //클래스 메서드(static 메서드) return a+b; } } class MyMathTest { public static void main(String args[]) { System.out.println(MyMath.add(200L, 100L); //클래스메서드 호출 MyMath mm = new MyMath(); //인스턴스 생성 mm.a = 200L; mm.b = 100L; System.out.println(mm.add()); //인스턴스메서드 호출 } }
-
static 사용방법
- 속성(멤버변수)중에서 공통 속성에 static을 붙인다.
- 인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다.⛔ 6-27 static 변수/메서드와 instance 변수/메서드 관계 정리 다시 ⛔
-
오버로딩 (overloading)
- 한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것오버로딩이 성립하기 위한 조건
1 .메서드 이름이 같아야 한다.
2 .매개변수의 개수 또는 타입이 달라야 한다.
3 .반환 타입은 영향없다. -
생성자(constructor)
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
- 인스턴스 생성시 수행할 작업(iv 초기화)에 사용생성자 규칙
1 .이름이 클래스 이름과 같아야 한다.
2 .리턴값이 없다(void 안붙임)
3 .모든 클래스는 반드시 생성자를 가져야 한다. -
기본생성자
- 매개변수가 없는 생성자
- 생성자가 하나도 없을 때만, 컴파일러가 기본 생성자 자동 추가
(기본생성자가 반드시 있어야함) -
생성자 this()
- 생성자에서 같은 클래스의 다른 생성자 호출할 때 사용
- 다른 생성자 호출시 첫 줄에서만 사용가능 -
참조변수 this
- 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.
- 인스턴스 메서드(생성자 포함)에서 사용가능
- 지역변수 (lv)와 인스턴스 변수(iv)를 구별할 때 사용
Car(String color, String gearType, int door) {
//this.color는 iv, color는 lv
this.color = color;
this.gearType = gearType;
this.door = door;
}
class MyMath {
long a, b; //this.a, this.b
MyMath(int a, int b) { //생성자
this.a = a;
this.b = b;
}
long add() { //인스턴스 메서드
return a+b; //return this.a+this.b;
}
static long add(long a, long b) { //클래스 메서드(static메서드)
return a+b;
}
}
- 변수의 초기화
- 지역변수(lv)는 수동 초기화 해야함(사용전 반드시)
- 멤버변수(iv, cv)는 자동 초기화된다.멤버변수의 초기화 방법
1 .명시적 초기화(=) - 간단초기화
2 .초기화 블럭 {}/ static{} - 복잡초기화
3 .생성자(iv초기화) - 복잡초기화
클래스 변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한번
인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다
Author And Source
이 문제에 관하여(자바 객체지향 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mm_0028/자바-객체지향저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)