수업교재 05] 자바 객체개념
16) Design Pattern3
>Singleton
- 개념: 실행중 알고리즘 전략선택, 객체동작 실시간 교체 패턴을 의미
- 사용이유:
- 메모리 절감
- 다른 클래스 간에 데이터 공유 용이
- 회사 전략을 코딩에 반영하고 유연하게 처리하기 위해
- 사례: DB 접수, 회사의 마케팅이 바뀔
수업교재 09] 자바 주요 클래스
4) 패키지 개요와 종류
- JDK에서 많은 패키지 제공, awt는 거의 사용 안함
5) 자바 API
https://docs.oracle.com/javase/8/docs/api/overview-summary.html
- ⭐자바 Applocation Programming Interface
- 단어의 첫글자나 마침표(.)를 입력하고 ctrl+space를 사용하여 약자를 활용하는 것을 API를 사용한다고
- 다 외울 필요는 없고 필요한 것만 익히고, 이외에는 구글링으로 하는 것을 추천
혼자공] 06~ 09(P234 ~ P445)(5/29 일기 참조)
06) 클래스- 2.필드
1) 필드란?: 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상태 데이터를 저장하는 곳
2) 필드 사용이란?: 필드값을 읽고 변경하는 작업
06) 클래스- 3.생성자
1) 생성자란?: new연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당함
즉, class명과 같은 이름을 공유하는 메소
- 기본 생성자: 클래스 선언 시 컴파일러에 의해 자동으로 추가되는 생성자
- 생성자의 조건: 1.클래스와 이름이 같아야한다 2.리턴 값이 없어야한다 3.모든 클래스는 반드시 생성자를 가져야 한
(아래는 생성자 예시↓↓↓)
클래스이름(){}; //기본생성자
Point(){}; //Point클래스의 기본 생성자
class Card{
private String cardName;
public Card() {
}
}
-
- 컴파일러: 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램
- 컴파일: 인간이 읽기 편게 만든 코드를 컴퓨터가 읽을 수 있는 언어로 바꿔주는 작업
- 생성자 선언: 클래스로부터 객체를 생성할 때 호출되는 생성자를 명시적으로 선언할 수 있으며, 생성자를 선언하면 기본 생성자는 생성되지 않는다
- 매개 변수: 생성자 호출 시 값을 전달받기 위해 선언되는 변수
- 객체 초기화: 객체를 사용하기 전에 준비하는 과정, 필드를 선언할 때 초기화하거나 생성자 내부에서 필드값을 초기화할 수 있으며, 메소드를 호출하는 내용으로 구성됨
- ⭐⭐⭐⭐⭐오버로딩: 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
- this():객체 자신의 또 다른 생성자를 호출할 때 사용
2) 필드 초기화: 클래스로부터 개겣가 생성될 떄 필드는 기본 초기값으로 자동 설정된다
3) 생성자 오버로딩: 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
- 주의할점: 매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로디이 아님
06) 클래스- 4.메소드
참조: https://ittrue.tistory.com/97
0)메소드: 메소드는 클래스의 내부에 존재하는 영역으로, 특정기능을 하는 코드를 묶어서 나타내는 것이다. 즉, 특정 기능을 수행하기 위한 코드의 집합체
//클래스
public class Main {
//메소드
public static void main (String[] args){
//특정 기능을 구현하는 곳
1) 메소드 선언부: 메소드 시그니처라고도 하며 선언부와 실행 블록에는 다음 요소를 포함한다
- 리턴 타입: 메소드가 리턴하는 결과의 타입을 표시
- 메소드 이름: 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지어줌
- 매개 변수 선언: 메소드를 실행할 때 필요한 데이터를 받기 위한 변수를 선언함
- 메소드 실행 블록: 실행할 코드를 작성함
2) return문
- return값이 있는 메소드: 메소드 선언에 리턴 타입이 있는 메소드는 반드시 return문을 사용해서 리턴값을 지정해야함
int plus(int x, int y)
int result = x, + y;
return result;
}
- void- return값이 없는 메소드
3) 메소드 오버로딩: 클래스 내에 같은 이름의 메소드를 여러개 선언하는 것
- 조건: 매개 변수의 타입, 개수, 순서중 하나가 달라야 함
class 클래스
return타입 메소드 이름 (타입변수,...) {...}
(상관없음) (동일) (매개 변수의 타입, 개수, 순서가 달라야 함)
return타입 메소드 이름 (타입변수,...) {...}
int plus(int x, int y) {
int result = x + y;
return result;
}
4) 호출: 메소드를 실행하려면 '메소드 이름(매개값, ...)' 형태로 호출해야 한다
06) 클래스- 5.인스턴스 멤버와 정적 멤버
1) 인스턴스 멤버: 객체(인스턴스)를 생성한 후 사용할 수 있는 인스턴스 필드와 인스턴스 메소드를 말하며, 객체에 소속된 멤버이므로 객체 없이는 사용할 수 없음
2) this: 객체 내부에서 인스턴스 멤버에 접근하기 위해 사용됨
주로 생성자와 메소드의 매개 변수 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 명시하고자 할 때 사용됨
3) 정적 멤버: 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 정적 필드와 정적 메소드를 말함
4) 싱글톤 Singleton: 전체 프로그램에서 단 하나의 객체만 만들때 이 객체를 싱글톤이라 칭함,
싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야하는데, 이를 위해서는 public이 아닌 private를 붙여줘야 한다
5) final 필드: 초기값이 저장되어 한 번 초기화되면 수정할 수 없는 필드
초기값을 주는 방법은 필드 선언 시에 주거나, 생성자에서 주는 방법이 있다
final필드는 객체마다 저장되고 생성자의 매개값을 통해서 여러가지 값을 가질 수 있기 떄문에 상수가 될 수 없음
final 타입 필드 [=초기값]
6) 상수 static final: 불변의 값(ex.원주율이나 지구의 무게)을 저장하는 필드
불변의 값은 객체마다 저장할 필요가 없는 공용성을 띠고 있으며, 여러 가지 값으로 초기화될수 없기에 상수는 final 필드라고 불리지 않는다. 즉, 상수는 static이면서 final이다
06) 클래스- 6.패키지와 접근 제한자
1) 접근 제한자( 아래로 갈수록 접근 제한이 약화) (0529일지 참조)
- private: 오로지 클래스 내부에서만 생성자를 호출할 수 있다
- default: 같은 패키지에 소속된 클래스에서만 생성자를 호출할 수 있도록 한다
↳ public, pritected, private 세 가지 접근 제한자가 적용되지 않으면 default 접근 제한을 가진다 - protected: 같은 패키지 또는 다른 패키지라도 자식 클래스라면 생성자를 호출할 수 있도록 한다
- public: 모든 외부 클래스와 패키지에서 아무런 제한 없이 생성자를 호출할 수 있도록 한다
2) 패키지 선언: 해당 클래스 또는 인터페이스가 어떤 패키지에 속할 것인지를 선언하는 것을 패키지 선언이라고 하며 소스파일의 최상단에 위치한다
package 상위패키지. 하위패키지;
3) import문: 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있을때, import문으로 해당 패키지의 클래스 또는 인터페이스를 가져와 사용할 것임을 컴파일러에게 알려줘야 한다
import 상위패키지. 하위패키지. 클래스이름;
import 상위패키지. 하위패키지.*;
4) Getter/Setter: 필드는 외부에서 접근할 수 없도록 막고 메소드는 공개해서 외부에서 메소드를 통해 필드에 접근하도록 유도한다.
- Getter: 필드의 값을 외부로 리턴해주는 메소드
- Setter: 외부에서 값을 받아 필드를 변경하는 메소드
07) 상속- 1.상속
1) 상속inheritance이란?
- 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소
- 상위 클래스와 하위 클래스 나누어 상위 클래스의 멤버(필드, 메소드, 이너 클래스)를 하위 클래스와 공유하는 것
- 하위 클래스가 상위 클래스의 모든 멤버를 상속받게 됨
class 자식클래스 extends 부모클래스 {
//필드
//생성자
//메소드
}
2) 부모 생성자 호출: 자바에서도 자식 객체를 생성하면 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성
3) 메소드 재정의: 자식 클래스가 사용하기에 적합하지 않을 때 상속된 일부 메소드는 자식 클래스에서 다시 수정해서 사용해야하는데, 이것을 메소드 재정의라고 한다
4) 접근 제한: 접근 제한을 더 강하게 재정의할 수 없다는 것은 부모 메소드가 public 접근 제한을 가지고 있을 경우 재정의하는 자식 메소드 default나 private나 접근 제한으로 수정할 수 없다는 뜻
5) final 클래스: final 키워드로 선언된 클래스는 부모 클래스로 사용할 수 없는 final 클래스입니다
6) final 메소드: final 키워드로 선언된 메소드는 자식 클래스에서 재정의할 수 없는 final 메소드입니다
07) 상속- 2.타입 변환과 다형성
1) 다형성: 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질
2) 타입 변환
- 클래스 타입 변환: 다른 클래스 타입으로 객체를 대입하는 것을 말한다
- 자동 타입 변환 (형변환) promotion: 프로그램 실행 도중에 자동적으로 타입 변환 일어나는 것
↓ ← ↑
부모타입 변수 = 자식 타입; - 강제 타입 변환 casting: 부모 타입을 자식 타입으로 변환하는 것, 그러나 모든 부모 타입을 자식 타입으로 강제 변환할 수 있는 것은 아님, 전문가들은 권장하지 않음
- ⭐⭐⭐instanceof 연산자: 객체가 어떤 타입인지 조사할 때 사용하는데 주로 강제 타입 변환 전에 변환이 가능한지 조사할 때 사용함
07) 상속- 3.추상 클래스
0) 추상(abstract): 실체 간에 공통되는 특성(필드와 메소드)을 추출한 것
1) 추상 클래스란?: 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 함
2) 추상 클래스 선언: 추상 클래스를 선언할 때에는 클래스 선언에 abstract 키워드를 붙여야함--> 붙이면 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있다
3) 추상 메소드: 추상 클래스에서만 선언 가능하며 메소드의 선언부만 있는 메소드를 말한다
오늘의 코딩
순서
ch09_ex01>>
- Calen1>> 자주 쓰이는 API의 사용법
- DateFor1
- DateTimeCreateEx
- DateTimeOperationEx
- Point3DEx
- GreCal1
ch09_ex02>>
- Integ1
- Math1
- Math2
- Ran1
ch09_ex03>>
- RegularEx >>정규표현식 사이트: https://regex101.com
만약 cafe12같은 문자를 추가한다면>>> "c[a-zA-Z]+\\d*" or "c[a-z]*[0-9]*" - String1>>equals, equalsIgnoreCase
equals() 메소드는 대소문자를 구분하여 비교하고, equalsIgnoreCase() 메소드는 대소문자를 구분하지 않고 비교한다 - String2
- String4
- ⭐⭐String5>> indexof와 substring 많이 쓰이니 복습 필수!
package ch09_ex03;
//중요!!! 복습필수:indexof랑 substring 많이 쓰임
public class String5 {
public static void main(String[] args) {
String fullName = "Hello.java" ;
int index = fullName.indexOf('.');
System.out.println("index->"+index);
String fileName = fullName.substring(0, index);
String ext = fullName.substring(index+1);
System.out.println(fullName+"의 확장자를 제외한 이름은 " + fileName);
System.out.println(fullName+"의 확장자는" + ext);
}
}
- StringTok01>> delimeter: ","/ 문자열 분리, 객체는 아님, 구분자와 구분자 사이에 아무 데이터가 없어도 하나의 요소로 인정(배열의 방을 만들어준다.)
- System1
오늘의 과제
ch09_ex04>>
- Person
package ch09_ex04;
//HW01: 학번만 같으면 결과값이 같게 되도록 설정하기
public class Person {
int id;
String name;
public Person (int id, String name ) {
this.id = id;
this.name = name;
}
}
푼 내용
- PersonEx
package ch09_ex04;
public class PersonEx {
public static void main(String[] args) {
Person p1 = new Person(1111,"광해");
Person p2 = new Person(1111,"광해군");
if (p1.equals(p2)) System.out.println("같다");
else System.out.println("다르다");
}
}
'Java' 카테고리의 다른 글
2024_06_05_수 (0) | 2024.06.05 |
---|---|
2024_06_04_화 (0) | 2024.06.04 |
2024_05_31_금 (0) | 2024.05.31 |
2024_05_30_목 (0) | 2024.05.30 |
2024_05_29_수 (0) | 2024.05.29 |