일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- label
- text to speech
- C언어
- 연결리스트
- Android
- xocde
- 예외처리
- swift baekjoon
- storyboard
- 플러터
- Android Studio
- FLUTTER
- Xcode
- IOS
- 안드로이드스튜디오
- android java
- 버블정렬
- 자바
- 커스텀팝업
- 보호와 보안
- Swift
- 준코딩
- TextField
- 안드로이드
- 백준
- deeplink
- 링크드리스트
- BAEKJOON
- customPopup
- Firebase
- Today
- Total
준코딩
객제지향언어 본문
객체지향이론의 기본 개념은 '실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다. ' 라는 것이다.
객체지향언어 특징
1.코드의 재사용성이 높다
2.코드의 관리가 용이하다.
3.신뢰성이 높은 프로그래밍을 가능하게 한다.
클래스와 객체
클래스의 정의 - 클래스란 객체를 정의해 놓은 것이다.
클래스의 용도 - 클래스는 객체를 생성하는데 사용된다.
객체의 정의 - 실제로 존재하는 것. 사물 또는 개념
객체의 용도 - 객체가 가지고 있는 기능과 속성에 따라 다름
유형의 객체 - 책상, 의자, 자동차, TV와 같은 사물
무형의 객체 - 수학공식, 프로그램 에러와 같은 논리나 개념.
클래스와 객체의 예
클래스 객체
제품설계도 제품
TV설계도 TV
붕어빵 기계 붕어빵
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스
라고 한다.
객체의 구성요소 - 속성과 기능
객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로는 객체는 다수의 속성과 다수의 기능을 갖는다.
-> 객체는 속성과 기능의 집합 이라고 할 수 있다.
속성 -> 멤버변수
기능 -> 메서드
TV의 속성과 기능
속성: 크기,길이,높이,색상,볼륨,채널 등
기능: 켜기,끄기,볼륨 높이기,볼륨 낮추기,채널 변경 등
객체지향 프로그래밍에서는 속성과 기능을 각각 변수와 함수로 표현한다.
class Tv{
//Tv의 속성(멤버변수)
String color; //색상
boolean power; //전원상태(ON/OFF)
int channel; //채널
//Tv의 기능(메서드)
void power(){
power = !power;
} //TV를 켜거나 끄는 기능의 메서드
void channelUp(){
++channel;
} //TV의 채널을 높이는 기능의 메서드
void channelDown(){
--channel;
} //TV의 채널을 낮추는 기능의 메서드
인스턴스의 생성과 사용
-> Tv클래스를 완성했으니, 이제는 Tv클래스의 인스턴스를 만들어서 사용해 보도록 하자.
클래스명 변수명;
변수명 = new 클래스명();
Tv t; //Tv클래스 타입의 참조변수 t를 선언
t= new Tv(); //Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
-----------------------------------------------------------------------------------------------------
class Tv{
//Tv의 속성(멤버변수)
String color; //색상
boolean power; //전원상태(ON/OFF)
int channel; //채널
//Tv의 기능(메서드)
void power(){
power = !power;
} //TV를 켜거나 끄는 기능의 메서드
void channelUp(){
++channel;
} //TV의 채널을 높이는 기능의 메서드
void channelDown(){
--channel;
} //TV의 채널을 낮추는 기능의 메서드
}
class TvTest{
public static void main(String args[]){
Tv t;
t= new Tv();
t.channel = 7;
t.channelDown();
System.out.println("현재 채널은 "+t.channel+ "입니다.")
}
}
-------------------------------------------------------------------------------------------------
실행결과 : 현재 채널은 6 입니다.
-------------------------------------------------------------------------------------------------
*인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.
변수-하나의 데이터를 저장할 수 있는 공간
배열-같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
구조체-서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
클래스-데이터와 함수의 결합(구조체 + 함수)
변수와 메서드
멤버변수를 제외한 나머지 변수들은 모두 지역변수이다.
멤버변수 중 static이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스변수 이다.
변수의 종류와 특징
변수의 종류 선언위치 생성시기
클래스변수 클래스영역 클래스가 메모리에 올라갈 때
인스턴스변수 클래스영역 인스턴스가 생성되었을 때
지역변수 클래스 영역 이외의 영역 변수 선언문이 수행되었을 때
(메서드, 생성자, 초기화 블럭 내부)
인스턴스변수
-> 클래스 영역에 선언, 클래스의 인스턴스를 생성할 때 만들어짐.
클래스변수
->인스턴스변수 앞에 static을 붙이기만 하면 끝
지역변수
->메서드 내에 선언되어 메서드 내에서만 사용 가능
메서드
-> 어떤 작업을 수행하기 위한 명령문의 집합이다.
-하나의 메서드는 한 가지 기능만 수행하도록 작성하는 것이 좋다
-반복적으로 수행되어야 하는 여러 문장을 하나의 메서드로 정의해 놓으면 좋다.
-관련된 여러 문장을 하나의 메서드로 만들어 놓는 것이 좋다.
return문
-> 메서드가 정상적으로 종료되는 경우는 다음과 같이 두 가지가 있다.
-메서드의 블럭{} 내의 마지막 문장까지 수행했을 때
-메서드의 블럭{} 내에 있는 문장을 수행 중 return문을 만났을 때
JVM의 메모리구조
1.메서드영역: 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일을 읽어서 분석하여 클래스에 대한 정보를 이곳에 저장한다.
2.힙: 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉 인스턴스변수들이 생성되는 공간
3.호출스택: 메서드의 작업에 필요한 메모리 공간을 제공한다.
호출스택의 특징
-메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.
-메서드가 수행을 마치고나면 사용했던 메모리를 반환하고 스택에서 제거된다.
-호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
-아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.
기본형 매개변수와 참조형 매개변수
기본형 매개변수 - 변수의 값을 읽기만 가능
참조형 매개변수 - 변수의 값을 읽고 변경 가능
재귀호출
-메서드의 내부에서 메서드 자기 자신을 다시 호출하는 것을 재귀호출이라고 한다.
장점: 메서드를 훨씬 간단하게 할 수 있다.
단점: 효율이 떨어진다.(반복적으로 메서드를 호출하는 것이기 때문에 메서드를 호출하는데 드는 비용이 추가적으로 발생)
메서드 오버로딩
-자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.
->한 클래스 내에 같은 이름의 메서드 여러 개 정의
오버로딩 조건
-메서드 이름이 같아야 한다
-매개변수의 개수 또는 타입이 달라야 한다
-매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
(리턴타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.)
오버로딩의 예
가장 대표적인 것은 println메서드 이다.
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)
println메서드를 호출할 때 매개변수로 넘겨주는 값의 타입에 따라서 위의 오버로딩된 메서드들 중의 하나가 선택되어 실행되는 것이다.
오버로딩의 장점
-이름을 절약할 수 있다.
'프로그래밍 > 자바' 카테고리의 다른 글
BubbleSort 버블정렬 (0) | 2018.12.10 |
---|---|
예외처리 (0) | 2018.11.29 |
객체지향 프로그래밍-2 (0) | 2018.11.29 |
객체지향 프로그래밍 (0) | 2018.11.27 |
객체지향언어-1 (0) | 2018.11.26 |