1. 객체지향언어
1) 기존의 프로그래밍 언어와 크게 다르지 않음 : 기존 프로그래밍 언어에 몇 가지 규칙만 추가
2) 코드의 재사용성이 높음 : 새로운 코드 작성 시 기존의 코드를 이용 가능
3) 코드의 관리가 쉬움 : 코드간의 관계를 맺어 적은 노력으로 코드 변경 가능
4) 신뢰성이 높은 프로그램의 개발 가능 : 제어자와 메서드를 이용해 데이터를 보호, 코드의 중복을 제거해 불일치 오류 방지 가능
2.1 클래스와 객체, 인스턴스
클래스
: 객체를 정의해 놓은 것
: 객체를 생성하는데 사용
객체
: 실제로 존재하는 것으로 사물 또는 개념
: 속성과 기능에 따라 사용이 다름
객체(object)는 인스턴스(instance)를 포함하는 일반적 의미
인스턴스화
: 클래스로부터 인스턴스(객체)를 생성하는 것
https://kcode-recording.tistory.com/206
[JAVA] 객체지향 프로그래밍(OOP) 기초, 클래스, 객체
객체지향 프로그래밍 : 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 : 클래스 > 처리 및 데이터 부분을 객체로 생성해 사용 : JAVA, C++, C# 등 대표적 언어 존재 클래스
kcode-recording.tistory.com
https://kcode-recording.tistory.com/79
[Java] About 클래스와 객체
[클래스] : 객체의 설계도 또는 틀 (Ex. 붕어빵을 만드는 붕어빵 틀) : 객체를 정의해 놓은 것으로 객체를 생성하는데 사용 : 데이터와 함수의 결합 (구조체 + 함수) * 구조체 : 서로 관련된 여러 데
kcode-recording.tistory.com
2.2 인스턴스 생성과 사용
클래스명 참조변수명; // 객체를 다루기 위한 참조변수 선언
참조변수명 = new 클래스명(); // 객체 생성 후, 생성된 객체의 주소를 참조변수에 저장
ex)
class Main{
class Tv{
String color;
int channel;
void channelDown{channel--;}
}
public static void main(String[] args){
Tv t;
t = new Tv();
Tv t = new Tv(); // 선언과 동시에 생성 가능
t.channel = 7; // channel에 7 넣기
t.channelDown(); // channelDown 메서드 실행
System.out.println(t.channel);
}
}
2.3 클래스의 또 다른 정의
1) 데이터와 함수의 결합
- 변수 : 하나의 데이터를 저장할 수 있는 공간
- 배열 : 같은 타입의 여러 데이터를 저장할 수 있는 공간
- 구조체 : 타입에 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간
- 클래스 - 데이터와 함수의 결합(구조체 + 함수)
2) 클래스 사용자 정의 타입
- 프로그래머가 새로운 타입 정의 가능
- 서로 관련된 값을 묶어 하나의 타입으로 정의 가능
class Time{
int hour;
int minute;
int second;
}
// 여러개의 시간, 분, 초를 사용하고 싶을 경우 각각을 선언하여 다르게 사용 가능함
Time t1 = new Time();
Time t2 = new Time();
Time t3 = new Time();
// 시간을 각각 설정 가능
t1.hour = 1;
t2.hour = 2;
t3.hour = 3;
3.1 선언 위치에 따른 변수 종류
인스턴스 변수(instance variable)
: 각 인스턴스의 개별적인 저장 공간으로 인스턴스마다 다른 값 저장 가능
: 인스턴스 생성 후 참조변수.인스턴스명으로 접근 가능
: 인스턴스 생성 시 생성되며, 참조변수가 없을 때 가비지컬렉터에 의해 삭제
클래스 변수(class variable)
: 같은 클래스의 모든 인스턴스들이 공유하는 변수
: 인스턴스 생성없이 클래스이름.클래스변수명으로 접근
: 클래스가 로딩될 때 생성, 프로그램이 종료될 때 소멸
지역 변수(local variable)
: 메서드 내 선언되며, 메서드 종료 시 삭제
: 조건문, 반복문 블럭 내 선언된 지역변수는 해당 블럭을 벗어나면 삭제
3.2 메서드(method)
메서드란?
: 작업을 수행하기 위한 명령문 집합
: 값을 입력받아 처리하고 그 결과를 돌려주지만, 입력받는 값이 없고 결과를 돌려주지 않을수도 있음
메서드 장점 및 작성 지침
: 반복적인 코드를 줄이고 코드 관리 용이
: 반복 수행되는 여러 문장을 메서드로 작성
: 하나의 메서드는 한가지 기능만 수행하도록 작성
: 관련된 여러 문장을 메서드로 작성
: 클래스 영역에서만 정의 가능
메서드 호출
참조변수.메서드 이름(); // 메서드에 선언된 매개변수가 없는 경우
참조변수.메서드 이름(값1. 값2, ...); // 메서드에 선언된 매개변수가 있는 경우
class MyMath{
long add(long a, long b){
long result = a+b;
return result;
//return a+b;
}
}
3.3 return문
: 현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아감
>> 메서드의 블럭이 끝나거나 return을 만나면 메서드가 정상적으로 종료됨
* 반환값이 있는 메서드의 경우 return문이 있어야 함
* return문의 개수는 최소화하는 것이 좋음
3.4 재귀호출(recursive call)
재귀호출이란?
: 메서드 내에서 자기자신을 반복적으로 호출하는 것
: 이는 반복문으로 변경 가능하며, 반복문보다 성능이 나쁨
: 하지만, 이해하기 쉽고 간결한 코드 작성 가능
// 팩토리얼
long factorial(int n) {
long result = 0;
if(n==1) {
result = 1;
} else {
result = n * factorial(n-1);
}
return result;
}
3.5 클래스 메서드와 인스턴스 메서드
클래스 메서드(static 메서드)
: 객체 생성 없이 클래스이름.메서드이름() 으로 호출
: 인스턴스 변수나 인스턴스 메서드와 관계없는 작업을 하는 메서드
: 메서드 내 인스턴스 변수 사용 불가 >> 객체 생성이 필요하기 때문에 객체 생성 없이 클래스 메서드를 사용할 경우 에러가 날 수 있음
: 메서드 내에서 인스턴스 변수를 사용하지 않을 경우 static을 붙이는 것을 고려
인스턴스 메서드
: 인스턴스 생성 후, 참조변수.메서드이름() 으로 호출
: 인스턴스 변수나 인스턴스 메서드와 관련된 작업을 하는 메서드
: 메서드 내에서 인스턴스 변수, 클래스 변수 사용 가능
깃허브 링크 : https://github.com/Khjin06k/kostaJava/tree/main/src/day7/chap6_OOP_1
'Kosta 교육' 카테고리의 다른 글
| [Day12 - JAVA] chap9. lang 패키지_1 (0) | 2023.08.29 |
|---|---|
| [Day8 - JAVA] chap6. 객체지향언어1_2 (0) | 2023.08.28 |
| [Day12] chap8. 예외처리 (0) | 2023.08.28 |
| [Day3 - Java] 반복문 연습문제 - 피보나치 수열 나열하기 (0) | 2023.08.11 |
| [Day1 - JAVA] 자바 소개 (0) | 2023.08.09 |