250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Wildcard
- Proxy Object
- types
- HashMap
- Functional Interfaces
- dotnet
- 혼공학습단
- noncluster index
- literal
- Spring Data JPA
- 접근제어자
- 0 시작
- 혼공컴운
- entrySet
- 티스토리챌린지
- cluster index
- 인터페이스
- 오블완
- Interface
- 접근 제어자
- 혼공자바
- 혼공
- 자율학습
- Lazy loading
- Default
- 나도코딩
- java
- 인프런
- Access Modifier
- 스프링 부트 3
Archives
- Today
- Total
지금을 사는 사람
혼자 공부하는 자바 3주차 본문
728x90
[객체 지향 프로그래밍] 목차
기본미션
* 어렵거나 중요하다고 생각하는 용어를 혼공 용어 노트에 정리하고 공유하기
- 객체 : 프로그래밍에서 객체는 클래스의 인스턴스입니다. 특정 엔터티와 관련된 데이터와 동작을 캡슐화합니다. 이것은 구조와 기능을 정의하는 청사진이며, 객체는 그 청사진을 기반으로 만든 구체적인 인스턴스입니다.
- 인스턴스 : 클래스에서 객체를 만들 때 해당 클래스를 인스턴스화하여 인스턴스를 만듭니다.
- 초기화 : 초기화는 객체의 속성이나 변수의 초기 값을 설정하는 프로세스를 나타냅니다. 객체가 생성되거나 인스턴스화 될 때 발생합니다. 이 단계는 객체가 어떠한 작업이나 메서드를 수행하기 전에 올바른 데이터로 시작되도록 보장합니다
- 오버로딩 : 오버로딩은 클래스에 동일한 이름을 가진 여러 메서드가 있는 경우 발생합니다. 이를 통해 메서드는 받은 입력에 따라 다른 작업을 수행할 수 있습니다. 이것은 메서드 오버로딩(동일한 이름, 다른 매개변수) 또는 연산자 오버로딩(사용자 정의 타입에 대한 연산자의 동작 변경)일 수 있습니다.
선택미션
- 객체 지향 프로그래밍의 개념 정리하기
- 객체 지향 프로그래밍은 데이터와 동작을 결합하여 객체를 중심으로 코드를 구성하는 것이다.
- 클래스: 클래스는 클래스에서 생성된 인스턴스(객체)가 공유하는 구조와 동작을 정의하는 청사진 역할을 합니다.
- 캡슐화: 캡슐화는 객체의 내부 세부 정보를 숨기고 잘 정의된 인터페이스(메서드)를 통해서만 데이터에 액세스할 수 있도록 허용합니다.
- 상속: 상속을 사용하면 클래스(하위 클래스/파생)가 다른 클래스(수퍼클래스/기본)에서 속성과 동작을 상속하여 코드 재사용을 촉진할 수 있습니다.
- 다형성: 다형성을 사용하면 서로 다른 유형의 객체를 공통 유형의 객체로 처리하여 코드를 단순화하고 유연성을 높일 수 있습니다.
- 추상화: 추상화는 불필요한 세부 사항 없이 필수 속성과 동작을 모델링하여 복잡한 시스템을 단순화합니다.
Chapter 06 : 클래스
객체 지향 프로그래밍
- 객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능 한
객체의 상호작용
- 객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용하면서 동작
- 메소드(method) : 객체들 사이의 상호작용 수단
- 리턴값 = 전자계산기객체.메소드(매개값1, 매개값2, ...);
- 도트 연산자( . ) : 객체의 필드와 메소드에 접근할 때 사용
int result = Calculator.add(10, 20);
- 도트 연산자( . ) : 객체의 필드와 메소드에 접근할 때 사용
객체 간의 관계
- 집합 관계 : 객체는 하나의 부품이고 하나는 완성품
- 자동차와 엔진, 타이어, 핸들의 관계
- 사용 관계 : 객체 간의 상호작용
- 사람은 자동차를 사용
- 상속 관계 : 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계
- 자동차(자식)는 기계(부모)의 한 종류
객체와 클래스
- 클래스 : 설계도, 객체를 생성하기 위한 필드와 메솓드가 정의되어 있음
- 인스턴스 : 클래스로부터 만들어진 객체
- 하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있음
클래스 선언
- 식별자 작성 규칙
- 하나 이상의 문자로 이루어져야 한다. ex) Car, SportsCar
- 첫 글자에는 숫자가 올 수 없다. ex) Car, 3Car(x)
- '$', '_' 외의 특수 문자는 사용할 수 없다. ex) $Car, _Car, @Car(x), #Car(x)
- 자바 키워드는 사용할 수 없다. ex) int(x), for(x)
객체 생성과 클래스 변수
클래스 변수 = new 클래스();
- 클래스는 두 가지 용도가 있다.
- 라이브러리(API : Application Program Interface)
- 실행용 : main() 메소드 제공하는 역할
클래스의 구성 멤버
- 필드 : 객체의 고유 데이터, 부품 객체, 상태 정보를 저장
- 생성자 : 초기화를 담당. 클래스 이름으로 되어 있고 리턴 타입이 없음
- 메소드 : 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행
필드
필드 선언
String company = "현대자동차";
int maxSpeed = 300;
boolean enginStart = false;
필드 사용
- 필드값을 읽고 변경하는 작업
- 클래스 외부에서 사용할 경우 클래스 객체를 생성한 뒤 필드를 사용해야 함
Car myCar = new Car(); myCar.speed = 60;
생성자
기본 생성자
- 모든 클래스는 생성자가 반드시 존재하며 하나 이상 가질 수 있음
- 생성자 선언을 생략 시 기본 생성자를 바이트 코드에 자동 추가
생성자 선언
Car(String model, String color, int maxSpeed) {}
필드 초기화
- 객체 생성될 때 필드는 기본 초기값으로 자동 설정
- 초기값을 설정하는 방법 두가지
- 필드 선언할 때 초기값을 주거나
- 생성자에서 초기값을 주는것
// 1번
public class Korea {
String nation = "대한민국";
String name;
String ssn;
}
Korean k1 = new Korean();
// 2번
public class Korea {
String nation = "대한민국";
String name;
String ssn;
public Korean(String n, String s) {
name = n;
ssn = s;
}
}
생성자 오버로딩
- 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
Car() { ... } Car(String model) { ... } Car(String model, String color) { ... } Car(String model, String color, int maxSpeed) { ... }
- 매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이 아니다.
다른 생성자 호출: this()
- this()는 자신의 다른 생성자를 호출하는 코드
- 반드시
생성자의 첫 줄
에서만 허용된다.Car() { }
Car(String model) {
this(model, "은색", 250);
}
Car(String model, String color) {
this(model, color, 250);
}
## 메소드
- 리턴타입 : 메소드가 리턴하는 결과의 타입
- 메소드 이름 : 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지어준다.
- 매개 변수 선언 : 메소드를 실행할 때 필요한 데이터를 받기 위한 변수 선언
- 메소드 실행 블록 : 실행할 코드 작성
### 메소드 선언
- 리턴 타입 : 리턴값의 타입. 메소드를 실행한 후의 결과값
- 메소드 이름
-- 숫자로 시작하면 안 되고, $와 _를 제외한 특수 문자를 사용하지 말아야 한다.
-- 관례적으로 메소드 이름은 소문자로 작성
-- 서로 다른 단어가 혼합된 이름이라면 뒤이어 오는 단어의 첫 글자는 대문자로 작성
- 매개 변수 선언
```java
double divide ( int x, int y ) { ... }
// int x와 int y는 매개 변수
- 매개 변수의 개수를 모를 경우
int sum( int[] values) { }
리턴(return)문
- 메소드 선언에 리턴 타입이 있는 메소드는 반드시 리턴문을 작성해야한다.
int plus(int x, int y) { int result = x + y; return result; }
- void는 리턴값이 없는 메소드이다.
메소드 오버로딩
- 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것
- 매개 변수의 타입, 개수, 순서 중 하나가 달라야한다.
- 예시는 상단의 생성자 부분을 참조할 것
인스턴스 멤버와 정적 멤버
인스턴스 멤버와 this
인스턴스멤버
인스턴스 멤버란 객체를 생성한 후 사용할 수 있는 필드와 메소드
인스턴스 멤버 선언
public calss Car { int gas; void setSpeed(int speed) { ... } }
인스턴스 필드는 객체마다 따로 존재하고 인스턴스 메소드는 메소드 영역에 저장되고 공유된다
메소드는 코드블록이므로 객체마다 동일한 코드 블록을 가지고 있을 필요가 없기 때문
- 인스턴스라는 이름이 붙는 이유는 메모리 블록 내부에 인스턴스 필드 등이 사용되는 경우가 있기 때문
this
- 객체 자신을 가리키는 것
Car(String model) { this.model = model; } void setModel(String model) { this.model = model; }
정적 멤버와 static
정적멤버
정적 멤버 선언
public class 클래스 { // 정적 필드 static 타입 필드 = 초기값; //정적 메소드 static 리턴 타입 메소드( 매개변수선언, ...) { ... } }
정적 필드와 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리된다.
객체마다 가지고 있어야 할 데이터는 인스턴스 필드
그렇지 않은 공용 데이터는 정적 필드로 선언
정적 멤버 사용
- 클래스.필드;
- 정적 멤버이므로 인스턴스 객체 없이 사용 가능
- 인스턴스 객체로도 접근 가능(비권장)
정적 메소드 선언 시 주의할 점
- 객체가 없어도 실행된다는 특징 때문에 정적 메소드를 선언할 때는 이들 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없음. this 또한 불가능
싱글톤
전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우 사용하는 객체가 싱글톤
외부에서 new 연산자로 생성자를 호출할 수 없도록 막기 위해서 생성자에 private 접근 제한자를 붙여줌
자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화한다.
외부에서 싱글톤을 호출 가능하도록 getInstance() 메소드를 정의한다.
// 정적 필드 private static 클래스 singleton = new 클래스(); // 생성자 private 클래스() {} // 정적 메소드 static 클래스 getInstance() { return singleton; } }
final 필드와 상수
final 필드
- final 필드는 초기값이 저장되면 실행 도중 수정할 수 없다.
- 초기값을 주는 방법은 2가지
- 필드 선언 시에 주는 방법
- 생성자에서 주는 방법
상수
- 불변의 값을 상수(static final)라고 부른다.
- final 필드는 상수라고 부르지 않는다.
- final 필드는 객체마다 저장되고 생성자의 매개값을 통해서 여러 값을 가질 수 있기 때문이다.
- 상수는 staic이면서 final이어야한다.
- 즉 static final 필드이다.
패키지와 접근 제한자
- 패키지는 클래스를 유일하게 만들어주는 식별자 역할
- 상위패키지.하위패키지.클래스 형태
패키지 선언
- .java 파일 상단에 패키지를 명시한다.
package 상위패키지.하위패키지;
public class ClassName { ... }
- 패키지 이름 규칙
-- 숫자로 시작해서는 안 되고 _, $를 제외한 특수문자를 사용해서는 안된다.
-- java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용해서는 안된다.
-- 모두 소문자로 작성하는 것이 관례
-- 회사는 도메인 이름으로 짓는다.
- com.samsung.projectname
- com.hyundai.projectname
### import 문
- 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있다면 import문으로 포함시켜줘야 한다.
- import 상위패키지.하위패키지.클래스이름;
- import 상위패키지.하위패키지.*;
- 주의사항
-- 상위 패키지를 import했다고 해서 하위 패키지까지 import 되는 것은 아니다. 자바는 패키지 전체 이름으로 패키지를 식별하기 때문에 com.hankook과 com.hankook.project를 서로 다른 패키지로 인식한다.
### 접근 제한자
- 접근을 제한하기 위해 사용하는 것
- 클래스 및 인터페이스 그리고 멤버의 접근을 말한다.
- public : 외부 클래스가 자유롭게 사용 가능
- protected : 같은 패키지 또는 자식 클래스에서 사용 가능
- private : 외부에서 사용 불가능
- default : 같은 패키지에서만 사용 가능
728x90
'스터디 > 혼공학습단' 카테고리의 다른 글
혼자 공부하는 자바 5주차 (0) | 2024.02.05 |
---|---|
혼자 공부하는 자바 4주차 (0) | 2024.01.28 |
혼자 공부하는 자바 2주차 (0) | 2024.01.08 |
혼자 공부하는 자바 1주차 (1) | 2024.01.03 |
혼공학습단 10기 회고 (0) | 2023.08.24 |