방명록
- JAVA 객체지향언어 기초2024년 07월 23일에 업로드 된 글입니다.작성자: gamzah반응형
1. 객체지향언어
1.1 객체지향언어의 역사
- 실제 사물의 속성과 기능을 분석한 다음, 데이터와 함수로 정의함으로써 실제 세계를 컴퓨터 속에 옮겨 놓은 것과 같은 가상 세계를 구현, 모의실험을 하는것이 객체지향의 시작.
- 1960년대 중반에 프로그래밍언어에 적용한 최초의 객체지향언어가 탄생함.(시뮬라)
1.2 객체지향언어
객체지향언어의 주요특징
- 코드의 재사용성이 높다.
- 코드의 관리가 유용하다.
- 신뢰성이 높은 프로그래밍을 가능하게 한다.
→ 프로그램의 개발과 유지보수에 드는 시간과 비용을 획기적으로 개선함
2. 클래스와 객체
2.1 클래스와 객체의 정의와 용도
클래스
- 정의 : 클래스란 객체를 정의해 놓은 것이다.
- 용도 : 클래스는 객체를 생성하는데 사용된다.
객체
- 정의 : 실제로 존재하는 것. 사물 또는 개념
- 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
- 사물(유형). 논리, 개념(무형)
2.2 객체와 인스턴스
- 인스턴스화 : 클래스로부터 객체를 만드는 과정
- 인스턴스 : 어떤 클래스로부터 만들어진 객체
2.3 객체의 구성요소 - 속성과 기능
- 속성 = 멤버변수 = 특성 = 필드 = 상태
- 기능 = 메서드 = 함수 = 행위
2.4 인스턴스의 생성과 사용
클래스명 변수명; // 클래스의 객체롤 참조하기 위한 참조변수를 선언 변수명 = new 클래스명 (); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장 Tv t; // Tv클래스 타입의 참조변수 t를 선언 t = new Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
- 인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.
- 하나의 인스턴스를 여러 개의 참조변수가 가리키는 건 가능
- 여러 인스턴스를 하나의 참조변수가 가리키는 건 불가능
2.5 객체 배열
Tv[] tvArr = new Tv[3]; // 참조변수 배열 (객체 배열)을 생성 // 객체를 생성해서 배열의 각 요소에 저장 tvArr[0] = new Tv (); tvArr[1] = new Tv (); tvArr[2] = new Tv (); // 배열의 초기화 블럭을 사용하여 한줄로도 가능 Tv[] tvArr = {new Tv(), new Tv(), new Tv()};
2.6 클래스의 또 다른 정의
- 클래스 - 데이터와 함수의 결합
```java
데이터 저장형태의 발전과정
- 변수 하나의 데이터를 저장할 수 있는 공간
- 배열 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
- 구조체 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
- 클래스 데이터와 함수의 결합 (구조체 + 함수)
- 클래스 - 사용자정의 타입
3. 변수와 메서드
3.1 선언위치에 따른 변수의 종류
변수의 종류 선언위치 생성시기 클래스 변수 클래스 영역 클래스가 메모리에 올라갈 때 인스턴스 변수 클래스 영역 인스턴스가 생성되었을 때 지역변수 클래스 영역 이외의 영역 변수 선언문이 수행되었을 때 - 인스턴스 변수
- 클래스의 인스턴스를 생성할 때 만들어짐
- 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있음
- 인스턴스마다 고유한 상태를 유지해야 하는 속성의 경우에 사용
- 클래스 변수
- 인스턴스 변수 앞에 static 붙이면 됨
- 모든 인스턴스가 공통된 저장공간을 공유함
- 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야 하는 속성의 경우에 사용
- 인스턴스를 생성하지 않아도 언제든지 쓸 수 있음
- 전역변수의 성격을 갖는다
- 지역변수
- 메서드 내에 선언, 메서드 내에서만 사용 가능
- 메서드가 종료되면 소멸됨
3.2 클래스변수와 인스턴스변수
- 클래스 변수 : 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 가짐
- 인스턴스 변수 : 인스턴스가 생성될 때 마다 생성되므로 인스턴스마다 다른 값을 유지
3.3 메서드
메서드를 사용하는 이유
- 높은 재사용성
- 한번 만들어 놓은 메서드는 여러번 호출 가능하고, 다른 프로그램에서도 사용 가능
- 중복된 코드의 제거
- 반복되는 문장들을 묶어서 하나의 메서드로 작성하여 코드 중복을 제거
- 변경사항이 발생하면 메서드만 수정하면 되므로 관리가 쉽다
- 프로그램의 구조화
- 프로그램의 흐름을 알기 쉽게 단순하게 구조화 할 수 있음
3.4 메서드의 선언과 구현
반환타입 메서드 이름 (타입 변수명, 타입 변수명, …) //선언부 { // 메서드 호출 시 수행될 코드 //구현부 }
메서드 선언부
- 선언 후에 변경사항이 발생하지 않도록 신중히 작성
- 메서드 선언부를 변경하게 되면 그 메서드가 호출되는 모든 곳도 같이 변경해야 함
반환타입 메서드이름 매개변수선언 int add (int x, int y) { int result = x + y; return result; //결과를 반환 }
매개변수 선언
- 메서드가 작업을 수행하는데 필요한 값들을 제공받기 위한 것
- 변수 타입이 같아도 타입 생략 불가
- 지역변수임
메서드의 이름
- 동사로 대부분 짓는다
- 이름만으로도 기능을 알 수 있도록 함축적이면서 의미있게 지어야 함
반환타입
- 반환타입이 없는 경우 void 사용
메서드의 구현부
- 메서드를 호출 했을 때 수행되는 문장을 적는 부분
return문
- 반환값을 호출한 메서드로 전달
- 값의 타입은 반환타입과 일치하거나 적어도 자동형변환이 가능해야 함
- 단 하나의 값만 반환할 수 있음
지역변수
- 메서드 내에 선언된 변수들은 해당 메서드 안에서만 사용할 수 있다
3.5 메서드의 호출
인자와 매개변수
- 인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 함
- 인자의 타입은 매개변수의 타입과 일치하거나 자동 형변환이 가능해야 함
메서드의 실행흐름
- 같은 클래스 내의 메서드끼리는 참조변수를 사용하지 않고 서로 호출 가능
- static 메서드는 같은 클래스 내의 인스턴스 메서드 호출 불가
- 메서드가 호출되면 실행중이던 메서드는 실행을 잠시 멈추고 호출된 메서드의 문장들이 실행됨
- 호출된 메서드 작업이 끝나면 다시 호출한 메서드로 돌아와 이후 문장 수행
3.6 return문
- 현재 실행중인 메서드를 종료하고 호출한 메서드로 되돌아간다
- void 면 생략가능하다. 컴파일러가 자동으로 추가해줌
3.7 JVM의 메모리 구조
- 메서드 영역
- 프로그램 실행 중 클래스가 사용되면 JVM이 해달 클래스의 클래스파일을 분석하여 클래스에 대한 정보를 이곳에 저장되며 클래스 변수도 이 영역에 함께 생성된다.
- 힙
- 인스턴스가 생성되는 공간, 인스턴스 변수들이 생성되는 공간.
- 호출스택
- 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.
- 메서드가 수행을 마치고나면 사용했던 메모리를 반환하고 스택에서 제거된다.
- 호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
- 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.
3.8 기본형 매개변수와 참조형 매개변수
- 기본형 매개변수 : 변수의 값을 읽기만 가능
- 참조형 매개변수 : 변수의 값을 읽고 변경 가능
3.9 참조형 반환타입
- 반환하는 값의 타입이 참조형
3.10 재귀호출
- 메서드의 내부에서 메서드 자신을 다시 호출하는 것
- 조건문이 필수적임
- 반복문보다 수행시간이 더 오래걸리지만 논리적인 간결함의 이점이 있다.
3.11 클래스 메서드와 인스턴스 메서드
- 인스턴스 메서드 : 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드
- 클래스 메서드 : 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드
- 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙임
- 클래스 변수는 인스턴스를 생성하지 않아도 사용할 수 있음
- 클래스 메서드는 인스턴스 변수를 사용할 수 없음
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
3.12 클래스 멤버와 인스턴스 멤버간의 참조와 호출
- 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수도 있다.
4. 오버로딩
4.1 오버로딩이란?
- 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것
4.2 오버로딩의 조건
- 메서드 이름이 같아야 한다
- 매개변수의 개수 또는 타입이 달라야 한다
4.3 오버로딩의 예
- println 메서드
- println 메서드를 호출할 때 매개변수 값의 타입에 따라서 오버로딩된 메서드들 중 하나가 선택되어 실행됨
4.4 오버로딩의 장점
- 같은 기능을 하는 메서드들을 타입과 개수만 다르게 해서 쓰므로 기억하기도 쉽고 이름을 절약할 수 있음
4.5 가변인자와 오버로딩
- 메서드의 매개변수 개수를 동적으로 지정해 주는 것
- '타입... 변수명' 과 같은 형식으로 선언된다
- 가변인자 외에 매개변수가 더 있다면 가변인자를 매개변수중에서 가장 마지막에 선언해주어야함
5. 생성자
5.1 생성자란?
- 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
- 생성자의 이름은 클래스의 이름과 같아야 하낟
- 생성자는 리턴 값이 없다.
5.2 기본 생성자
- 컴파일러가 자동으로 추가해주는 기본 생성자임
- 기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐임
5.3 매개변수가 있는 생성자
- 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스의 초기화 작업에 사용할 수 있음
- 인스턴스를 생성한 다음에 인스턴스 변수의 값을 변경하는 것보다 매개변수를 갖는 생성자를 사용하는 것이 코드를 보다 간결하고 직관적으로 만들어준다.
- 클래스를 작성할 때 다양한 생성자를 제공함으로써 인스턴스 생성 후에 별도로 초기화를 하지 않아도 되도록 만드는것이 바람직하다
5.4 생성자에서 다른 생성자 호출하기 -this(), this
- 생성자의 이름으로 클래스 이름 대신 this를 사용하낟 - 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다
this | 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스 메서드에 지연변수로 숨겨진 채로 존재한다 this(), this(매개변수) | 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
5.5 생성자를 이용한 인스턴스의 복사
- 똑같은 상태의 인스턴스를 추가로 생성할 수 있음
- 인스턴스 변수의 값들만 다름
6. 변수의 초기화
6.1 변수의 초기화
- 멤버변수와 배열의 초기화는 선택적이지만, 지역변수의 초기화는 필수다
6.2 명시적 초기화
- 변수를 선언과 동시에 초기화하는 것
6.3 초기화 블럭
클래스 초기화 블럭 | 클래스변수의 복잡한 초기화에 사용, 처음 로딩 될 때 한번만 수행 인스턴스 초기화 블럭 | 인스턴스변수의 복잡한 초기화에 사용, 인스턴스를 생성할 때 마다 수행
- 메서드 내에서와 같이 조건문, 반복문, 예외처리 구문등을 자유롭게 사용할 수 있음
- 초기화 작업이 복잡할 경우 사용
6.4 멤버변수의 초기화 시기와 순서
변수의 종류 선언위치 클래스변수의 초기화시점 클래스가 처음 로딩될 때 단 한번 초기화 인스턴스변수의 초기화시점 인스턴스가 생성될 때마다 각 인스턴스별로 초기화 클래스변수의 초기화순서 기본값 -> 명시적초기화 -> 클래스 초기화 블럭 인스턴스변수의 초기화순서 기본값 -> 명시적초기화 -> 인스턴스 초기화 블럭 -> 생성자 반응형'JAVA' 카테고리의 다른 글
자바 Stream API 설명 및 정리 (0) 2024.10.31 JAVA 배열의 기초 및 개념 (0) 2024.07.23 JAVA 조건문 기초 및 개념 (2) 2024.07.23 JAVA 연산자 기본개념 및 기초 (0) 2024.07.22 JAVA 변수의 개념과 기본 (0) 2024.07.22 다음글이 없습니다.이전글이 없습니다.댓글