일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 빅데이터분석기사필기
- 빅분기필기
- sql
- 멀티캠퍼스
- 이차원배열
- KB국민은행
- 빅분기
- 첫알고리즘평가
- prefixsum #C언어
- 반별이벤트
- kb취업교육
- kb it's your life
- 금융권it
- kb it's your life 기자단
- 부트캠프
- 데이터분석자격증
- 금융권 부트캠프
- SQL데이터타입
- kbit교육
- autohotkey
- 빅데이터분석기사
- 금융권 it
- 전문가특강
- kb 기자단
- 백엔드개발교육과정
- 백엔드개발
- sql내장함수
- kb네트워킹캠프
- kb 취업교육
- kb it's your life 6기
- Today
- Total
지식보부상님의 공부 일지
Java [06] 클래스 본문
[1] 객체지향 프로그래밍
◈ 객체, 필드, 메서드
- 객체(object) : 물리적으로 존재하거나 개념적인 것 중 다른 것과 식별 가능한 것
- 필드(field) : 객체 내 속성, 객체의 데이터
- 메서드(method) : 객체 내 동작
◈ 객체 간의 관계
- 집합 관계: 완성품과 부품의 관계
- 사용 관계: 다른 객체의 필드 읽고 변경하거나 메소드 호출하는 관계
- 상속 관계: 부모와 자식 관계, 부모의 특징을 자식에게 물려줌
◈ 객체 지향 프로그래밍 특징
- 캡슐화(Encapsulation): 객체의 데이터(필드), 동작(메서드)를 하나로 묶어서 실제 구현 내용은 외부에 감춤
- 접근 제한자(Access Modifier) 이용 => 캡슐화된 멤버 노출 여부 결정
- 상속: 부모(상위) 객체의 필드와 메소드를 자식(하위) 객체가 사용할 수 있도록 함
- 코드의 재사용성 ↑, 유지보수 기간 ↓
- 다형성(Polymorphism): 사용 방법은 동일하나 다양한 실행 결과가 나오는 것
[2] 객체와 클래스
◈ 클래스와 인스턴스
- 클래스: 객체를 생성하기 위한 설계도
- 인스턴스: 클래스로부터 생성된 객체
[3] 클래스 선언
◈ 클래스 선언
- 소스 파일명과 동일하게 작성
- 첫문자 대문자의 캐멀스타일, 숫자 가능 but 첫문자는 숫자x, $, _ 사용 가능
[4] 객체 생성과 클래스 변수
◈ 객체 생성
클래스 변수 = new 클래스();
◈ 클래스 용도
- 라이브러리(library) 클래스 : 실행 불가, 다른 클래스에서 이용하는 용도
- 실행 클래스: main() 메소드 가지는 실행 가능한 클래스
[5] 클래스의 구성 멤버
◈ 클래스 구성 멤버
- 필드(Field) : 객체 데이터 저장, 선언 형태는 변수 선언과 비슷
- 성성자(Constructor) : 객체 생성시 초기화 담당, 리턴 타입 없음, 이름은 클래스 이름과 동일
- 메소드(Method) : 객체가 수행할 동작, 객체간의 상호작용 위해 호출됨
[6] 필드 선언과 사용
◈ 필드 선언
타입 필드명 [= 초기값];
- 반드시 클래스 블록 내에서 선언되어야
- 선언시 초기값 설정 해도/하지 않아도 됨, 설정 안하면 기본값으로 초기화됨
◈ 필드 사용
- 객체 내부에서는 필드명으로 값 변경(접근 가능)
- 객체 외부에서는 도트(.) 연산자 이용하여 접근
[7] 생성자 선언과 호출
◈ new 연산자
- 객체 생성 후 바로 생성자(constructor) 호출하여 객체 초기화
클래스 변수 = new 클래스();
- 생성자 호출 끝나면 객체 주소를 반환 => 클래스 변수에 대입
◈ 기본 생성자
- 기본 생성자: 클래스에 생성자 없으면 컴파일러가 바이트코드 파일에 자동으로 추가하는 생성자
◈ 생성자 선언
- 객체 초기화 위해 선언
- 한개 이상 생성자 선언 가능
- 리턴 타입 없고 클래스 이름과 동일하게 선언 (메소드와 비슷한 형태)
- [alt] + [ins] 단축키로 빠른 선언 가능
◈ 생성자에서의 변수명
- this 키워드: 현재 인스턴스에 대한 참조 변수, this.변수명으로 필드 변수에 접근
public class Korean {
// 필드 선언
String nation = "대한민국";
String name;
String phoneNum;
// 생성자 선언
public Korean(String name, String phoneNum) {
this.name = name;
this.phoneNum = phoneNum;
}
}
◈ 생성자 오버로딩
- 생성자 오버로딩: 매객변수가 다른 생성자를 여러개 선언하는 것
public class Car {
// 필드 선언
String company;
String model;
String color;
int maxSpeed;
// 생성자 선언 (오버로딩)
Car() {}
Car(String model){
this.model = model;
}
Car(String model, String color){
this.model = model;
this.color = color;
}
Car(String model, String color, int maxSpeed){
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
◈ 다른 생성자 호출
- this(el1, el2, ...) : 생성자 오버로딩 많은 경우의 중복 코드를 줄이는 방법
public class CarModified {
// 필드 선언
String company;
String model;
String color;
int maxSpeed;
// 생성자 선언 (오버로딩)
CarModified() {}
CarModified(String model){
this(model, "black", 200);
}
CarModified(String model, String color){
this(model, color, 200);
}
CarModified(String model, String color, int maxSpeed){
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
[8] 메소드 선언과 호출
◈ 메소드 선언
- 리턴타입 메소드명 ( 매개변수, ... ) { 실행 코드 } 로 선언
- 리턴타입: 리턴값 없으면 void, 있다면 리턴하는 값의 자료형
- 메소드명: 첫 문자 소문자로 시작, 캐멀 스타일
◈ 메소드 호출
- 객체 내부에서는 메소드 이름으로 호출
- 객체 외부에서는 도트(.) 연산자로 호출
◈ 가변길이 매개변수
- 매개값들이 자동으로 배열 항목으로 변환되어 메소드에서 사용됨
int sum(int ... values){ } // 메소드 정의
Calculator.java
public class Calculator {
int sum (int ... values) {
int sum = 0;
for (int value : values) {
sum += value;
}
return sum;
}
}
CalculatorMain.java
public class CalculatorMain {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.sum(1, 2, 3)); // 6
System.out.println(calc.sum(1, 2, 3, 4, 5)); // 15
System.out.println(calc.sum(new int[] {1, 2, 3, 4, 5})); // 15
}
}
◈ 메소드 오버로딩(Overloading)
- 메소드 이름은 같지만 매개변수 타입, 개수, 순서 등이 다른 메소드 여러개 선언하는 것
- 다양한 매개값을 처리하기 위함
public class AreaCalculator {
// 정사각형 넓이
double areaRectangle(double width){
return width * width;
}
// 직사각형 넓이
double areaRectangle(double width, double height){
return width * height;
}
}
[9] 인스턴스 멤버
◈ 선언 방법에 따른 멤버 구분
- 인스턴스(Instance) 멤버
- 객체에 소속된 멤버로 객체 생성해야만 사용 가능
- 객체 내부에서 접근하려먼 this 로 접근
- 정적(Static) 멤버: 클래스에 고정된 멤버, 객체 없이도 사용 가능
[10] 정적 멤버
◈ 정적 멤버
- 메소드 영역의 클래스에 고정적으로 위치하는 멤버
- 객체 생성 필요 없이 클래스이름. (도트) 로 접근
- static 키워드를 추가하여 선언하면 됨
- 클래스가 메모리로 로딩될 때 자동으로 실행되므로 생성자에서 초기화 x
Calculator.java
public class Calculator {
static double pi = 3.14;
static double circumference (int radius) {
return 2 * pi * radius;
}
static double area (int radius) {
return pi * radius * radius;
}
}
CalculatorMain.java
public class CalculatorMain {
public static void main(String[] args) {
System.out.println("pi : " + Calculator.pi);
System.out.println("circumference : " + Calculator.circumference(10));
System.out.println("area : " + Calculator.area(10));
}
}
^ 위와 같이 객체 생성 없이 출력 가능하다
◈ 인스턴스 멤버 사용 불가
- 정적 블록, 메소드 내부에서 인스턴스 필드, 메소드, this 사용 불가
=> 사용하고 싶다면 객체 생성하여 참조 변수로 사용
static void Method() {
// 객체 생성
ClassName obj = new ClassName();
// 인스턴스 멤버 사용
obj.field1 = 10;
obj.method();
}
[11] final 필드와 상수
◈ final 필드
- 초기값 저장되면 프로그램 실행 도중 수정 불가
final 타입 필드 [=초기값];
- 필드 선언시 초기값 대입 또는 생성자에서 대입
◈ 상수 (Constant)
- 불변의 값 => final 이면서 static 인 성격
static final 타입 상수 [=초기값];
- 관례적으로 대문자로 스네이크 표기법 이용
- static 이므로 클래스명.상수명 으로 접근하면 됨
[13] 접근 제한자
◈ 접근 제한자
- 중요한 필드, 메소드 외부도 노출되지 않도록 함
접근 제한자 | 제한 대상 | 제한 범위 |
public | 클래스, 필드, 생성자, 메소드 | 없음 |
protected | 필드, 생성자, 메소드 | 같은 패키지 또는 자식 객체만 |
(default) | 클래스, 필드, 생성자, 메소드 | 같은 패키지 |
private | 필드, 생성자, 메소드 | 객체 내부 |
◈ 클래스의 접근 제한
- public 또는 default 접근 제한 가질 수 있음 (생략시 default)
◈ 생성자의 접근 제한
- public, default, private 접근 제한 가질 수 있음
◈ 필드, 메소드의 접근 제한
- public, default, private 접근 제한 가질 수 있음
[14] Getter와 Setter
◈ Setter
- 외부에서의 직접적인 필드 접근을 막아 객체의 무결성 유지되도록 함
- 메소드 통해 데이터 검증해서 유효한 값만 필드에 저장할 수 있도록 함
- 일반적으로 set + 필드이름(첫글자 대문자)로 메소드명 지정
private double speed;
// Setter 메서드
public void setSpeed(double speed) {
if(speed < 0){
this.speed = 0;
return;
} else {
this.speed = speed;
}
}
^ Setter 메서드인 setSpeed 를 정의하여 음수의 speed는 저장되지 않도록 제어함
◈ Getter
- 객체 외부에서 적절한 값으로 사용할 수 있도록 객체 내부의 필드를 리턴해주는 메소드
- 일반적으로 get + 필드이름(첫글자 대문자) 로 메소드명 지정
- 리턴 타입이 boolean 이면 is + 필드이름(첫글자 대문자) 로 지정
private double speed;
// Getter
public double getSpeed() {
double km = speed * 16;
return km;
}
^ private 필드인 speed를 km 단위로 변환하여 객체 외부로 리턴
'KB IT's Your Life > Java' 카테고리의 다른 글
Java [08] 인터페이스 (0) | 2025.04.23 |
---|---|
Java [07] 상속 (1) | 2025.04.22 |
Java [05] 참조 타입 (3) | 2025.04.22 |
Java [04] 조건문과 반복문 (1) | 2025.04.21 |
Java [03] 연산자 (0) | 2025.04.21 |