반응형
혼자 공부하는 자바
- 객체 지향 프로그래밍
객체 지향 프로그래밍(OOP : Object-Oriented Programming)은, 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법
객체(Object)
물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것
객체는 속성과 동작으로 구성되어 있음.
속성 = 필드, 구성 = 메소드
클래스
클래스 = 설계도
인스턴스 = 클래스로부터 만들어진 객체
클래스 선언 규칙
- 하나 이상의 문자로 이루어져야 함. (Car, SportsCar...)
- 첫 글자에는 숫자가 올 수 없음.
- 특수문자는 '$', '_'만 사용 가능.
- 자바 키워드 사용 불가
- 영어 대소문자 구분 필수
- class 뒤에는 반드시 소문자로 작성해야 함
new 연산자 new 클래스();
클래스의 구성 멤버
필드 : 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳
생성자 : new 연산자로 호출되는 특별한 중괄호 {} 블록
메소드 : 객체의 동작에 해당하는 중괄호 {} 블록
- 필드
필드는 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳
타입 필드 [ = 초기값 ] ;
필드 초기화
- 정수 타입 0
- 실수 타입 0.0
- boolean false
- 참조 타입 null
- 생성자
생성자는 new 연산자로 호출되는 중괄호 {} 블록이며, 객체의 초기화를 담당함.
객체 초기화란 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것
생성자 오버로딩
매개 변수를 달리하는 생성자를 여러 개 선언하는 것
this() 생성자
자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용
- 메소드
객체의 동작에 해당하는 중괄호 {} 블록
어떤 일들을 처리하는 실행문들을 모아놓은 블록
void : 리턴값이 없는 메소드
메소드 이름 규칙
- 숫자로 시작 불가
- 특수문자는 '$', '_'만 가능
- 관례적으로 메소드 이름은 소문자로 작성
- 단어가 혼합된 이름이라면 뒤에 오는 단어의 첫 글자를 대문자로 작성
final 필드 : 저장된 초기값이 최종값이므로, 수정이 불가함.
상수(static final) : 불변의 값
import java.util.Arrays;
import java.util.Iterator;
class Cat{
// 속성 : 변수
String name; // 초기화 no (초기화하면 모든 고양이가 같은 이름을 가져감)
// 기본값 null
int golgol = 50;
// 생성자 : 인스턴스를 생성할 때 사용하는 메소드
public Cat(String name) {
this.name = name;
}
// 기능 : 메소드
public void stroke(int count) {
if(golgol >= 60) {
System.out.println("골골송 수치가 "+golgol + "입니다.");
count++;
System.out.println("♥ ♥ ♥ ♥ ♥ ♥ 골골송을 부릅니다. ♥ ♥ ♥ ♥ ♥ ♥");
System.out.println("♥ ♥ ♥ ♥ ♥ ♥ 골골송을 부릅니다. ♥ ♥ ♥ ♥ ♥ ♥");
} else {
System.out.println(count + "회 만졌습니다.");
System.out.println("골골송 수치가 1 올라갑니다.");
System.out.println("현재 골골 수치 : " + golgol++);
}
}
public void sleep() {
System.out.println(name + "(이)가 잠을 잡니다.");
}
}
public class CM01 {
public static void main(String[] args) {
Cat cat1 = new Cat("콩이");
Cat cat2 = new Cat("봄이");
Cat cat3 = new Cat("삼이");
Cat cat4 = new Cat("댕이");
Cat cats[] = new Cat[4];
cats[0] = cat1;
cats[1] = cat2;
cats[2] = cat3;
cats[3] = cat4;
for (Cat cat : cats) {
cat.sleep();
}
// cat1.sleep();
// cat2.sleep();
// cat3.sleep();
// cat4.sleep();
for (int i = 0; i < 11; i++) {
cat1.stroke(i);
}
}
}
// 메소드
public int sleep() {
System.out.println(name + "(이)가 잠을 잡니다.");
return this.name.length();
}
public int add(int num1, int num2) {
int num3 = num1 + num2;
return num3;
}
System.out.println(cat1.golgol);
System.out.println(cat2.golgol);
int length = cat1.sleep();
System.out.println(length);
int result = cat4.add(10, 20); // 호출할 때는 파라미터 수, 순서, 타입에 맞게
System.out.println(result);
package oop;
class Human { // 클래스는 절대 겹치지 않게, 메소드와 클래스 안에 생성 불가!
// 속성 = 변수
String name;
int age;
String addr;
// 생성자 (리턴타입 없음)
public Human(String name, int age) {
this.name = name;
this.age = age;
}
// 오버로딩 : 같은 이름으로 여러개 만들 수 있음. 파라미터가 다르면 다른 것.
public Human(String name, int age, String addr) {
this.name = name;
this.age = age;
this.addr = addr;
}
// 기능 = 메소드
}
public class OOP2 {
public static void main(String[] args) {
// 인간
Human h1 = new Human("홍길동", 1); // 생성자 (가장 먼저 실행)
System.out.println(h1); // oop.Human@73a28541
System.out.println(h1.name); // 홍길동
System.out.println(h1.age); // 1
System.out.println(h1.addr); // null
Human h2 = new Human("김길동", 5);
System.out.println(h2.name); // 김길동
System.out.println(h2.age); // 5
System.out.println(h2.addr); // null
Human h3 = new Human("금수저", 10, "서울시");
System.out.println(h3.name); // 금수저
System.out.println(h3.age); // 10
System.out.println(h3.addr); // 서울시
Human h4 = new Human("집", 100, null);
}
}
package test;
// 2022년 2회차 17번
class Conv {
public Conv(int a) { // 생성자
this.a = a; // 3 대입
}
int func() { // 기능 (a = 5, b = 1, i =1)
int b = 1;
for (int i = 1; i < a; i++) { // a = 5 (i = 1~4)
b = a * i + b; // b = 51
// 1 = 5 * 1 + 1 (6)
// 6 = 5 * 2 + 6 (16)
// 16 = 5 * 3 + 16 (31)
// 31 = 5 * 4 + 31 (51)
}
return a + b; // (5 + 51 = 61)
}
int a; // 속성
}
public class Test01 {
public static void main(String[] args) {
Conv obj = new Conv(3); // a=5
obj.a = 5;
int b = obj.func();
System.out.println(obj.a + b);
}
}
반응형
'개발 공부 Today I Learned' 카테고리의 다른 글
[국비 20일차 TIL] 자바 static, 인스턴스, 상속 (1) | 2023.12.18 |
---|---|
[국비 19일차 TIL] 자바 객체지향(속성, 생성자, 메소드), C언어, 파이썬 (0) | 2023.12.15 |
[국비 17일차 TIL] 자바 String 메소드 (0) | 2023.12.13 |
[국비 16일차 TIL] JAVA 배열 복사 / 이중for문 / String (0) | 2023.12.12 |
[국비 15일차 TIL] 자바 반복문 while, do-while, switch, 동적가변배열 (1) | 2023.12.11 |
댓글