저는 이곳에 정리해보겠습니다!
(학교에서 배웠던 내용이라 헷갈리는 것이나 중요한 것 위주로 조금 정리해보았습니당)
객체 : 자신의 속성을 가지고 식별이 가능한 모든 것이라고 생각하면 됨(자동차, 책, 강의 등), 필드와 메소드으로 구성
객체 모델링 : 현실세계의 객체를 소프트웨어 객체로 설계하는 것(시간 소요)
인스턴스 : 클래스로부터 만들어진 객체
필드 : 클래스 내에 있는 지역 변수
정적 : Static, 클래스에 고정되어 있는 것
객체 지향 프로그램이란 ?
: 객체를 모델링하고 이를 조립해 프로그램을 만드는 기법. 추상화, 상속, 다형성, 캡슐화등의 특징을 가짐
객체 내용은 위의 미션들에서 확인하기!
객체는 독립적이지만, 다른 객체와 메소드를 수단으로 상호작용 함
// 리턴 값 = 객체.메소드(매개값1, 매개값2..);
int result = Calculator.add(10, 20);
// return값 : 30
개발자가 클래스(설계도)를 설계 -> 객체(인스턴스)를 만드는 인스턴스화 과정 -> 객체 완성!
public
은 소스파일 이름과 같은 클래스에만 붙이기 (일반적으로 하나의 클래스만 생성)// 예시
public class 클래스 이름 {
}
new
연산자 사용하기new
연산자를 사용한 만큼 객체가 메모리에 생성됨클래스 변수;
변수 = new 클래스();
클래스 변수 = new 클래스();
// 예시
Student s1 = new Student();
public class ClassName {
int fieldname; // 필드
ClassName() { ... } // 생성자
void methodName() { ... } // 메소드
}
String company = '카카오';
int speed; // 0
boolean start; // false
.
객체 접근연산자(도트 연산자)를 사용해 필드나 메소드를 접근 가능함// 외부 클래스일 경우
Car myCar = new Car();
myCar.speed = 60;
new
연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당함public
으로 선언되면 기본 생성자에도 public
이 붙지만 없이 선언되면 기본 생성자에도 붙지 않음
.java
(소스 파일) ->컴파일
->.class
(바이트코드 파일)
Car myCar = newCar()
이 부분이 기본 생성자를 호출하는 것
클래스이름(매개변수 선언 , ...) {
// 객체의 초기화 코드
}
this.
사용하기 (필드를 뜻함, 전역)public Korean(String name, String ssn) {
this.name = name; // 필드 초기화
this.ssn = ssn;
}
public Car() {}; // 기본 생성자
public Car(String model) { // 생성자
this.model = model;
}
public Car(String model, String color) { // 생성자 오버로딩
this.model = model;
this.color = color;
}
public Car() {};
public Car(String model) {
this(model, "검정"); // 중복 코드 줄이기
}
public Car(String model, String color) {
this.model = model;
this.color = color;
}
// 메소드 형태
리턴타입 메소드이름(매개변수 선언, ...) {
실행할 코드 작성
}
void
사용 예시
// class
public class Calculator {
// 메소드
void powerOn() {
System.out.println("전원을 켭니다.");
}
void powerOff() {
System.out.println("전원을 끕니다.");
}
int plus(int x, int y) {
int result = x = y;
return result;
}
double divide(int x, int y) {
double result = (double)x / (double)y;
return result;
}
}
// main
public class CalculatorExample {
public static void main(String[] args) {
Calculator myCalc = new Calculator();
myCalc.powerOn();
int plus = myCalc.plus(3,5);
System.out.println(plus);
byte x = 10;
byte y = 4;
double divide = myCalc.divide(x, y);
System.out.println(divide);
myCalc.powerOff();
}
}
// 예시
public class Computer {
// 둘다 같은 값을 리턴함
int sum1(int values[]) {
int sum = 0;
for(int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum;
}
int sum2(int ... values) {
int sum = 0;
for(int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum;
}
}
public class ComputerExample {
public static void main(String[] args) {
// 메소드 사용방법 잘 보기!
Computer myCom = new Computer();
int values[] = {1, 2, 3}; // 먼저 선언
int result1 = myCom.sum1(values);
System.out.println("result1 : " + result1);
int result2 = myCom.sum1(new int[]{1, 2, 3, 4, 5}); // 내에서 선언
System.out.println("result2 : " + result2);
int result3 = myCom.sum2(1, 2, 3);
System.out.println("result3 : " + result3);
int result4 = myCom.sum2(1, 2, 3, 4, 5);
System.out.println("result4 : " + result4);
}
}
public class Calculator {
int plus(int x, int y) {
int result = x + y;
return result;
}
double avg(int x, int y) {
double sum = plus(x, y);
double result = sum / 2;
return result;
}
}
Car2 myCar = new Car2();
myCar.keyTurnOn();
myCar.run();
int speed = myCar.getSpeed();
public class Calculator1 {
// 메소드 오버로딩
// 정사각형의 넓이
double areaRectangle(double width) {
return width * width;
}
// 직사각형의 넓이
double areaRectangle(double width, double height) {
return width * height;
}
}
객체이름.필드 or 메소드
로 접근함this.model
은 필드를 객체에서 자기 자신, 필드(전역변수)를 뜻하게 됨Car(String model) {
this.model = model;
}
클래스이름.필드 or 메소드
로 접근함(객체이름도 가능하지만 구분을 위해서!)private
를 붙임// 내가 헷갈리는 관계로..
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
// private 생성자로 외부에서 인스턴스를 생성하지 못하게 막음
}
static Singleton getInstance() {
return singleton;
}
}
public class SingletonExample {
public static void main(String[] args) {
// Singleton obj = new Singleton(); 컴파일 에러
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if(obj1 == obj2)
System.out.println("같은 Singleton 객체입니다.");
else
System.out.println("다릅니다.");
// 출력결과 : 같은 객체
}
}
public class Person {
final String nation = "Korea";
final String ssn;
String name;
public Person(String ssn, String name) {
this.ssn = ssn;
this.name = name;
}
}
_
로 연결하기public class Earth {
static final double EARTH_RADIUS = 6400;
}
package 상위패키지.하위패키지;
public class 클래스 이름 { ... }
ctrl
+ shift
+ o
: 사용된 클래스를 조사해 알아서 import문을 추가해줌import 상위패키지.하위패키지.클래스 이름;
import 상위패키지.하위패키지.*; // 해당 패키지에 소속된 클래스를 사용한다는 뜻
큰 순서대로 public > protected > (default) > private
필드는 private로 + Getter, Setter 메소드 작성하기 (필드를 안전하게 변경/사용)
private 타입 fieldName;
//Getter, 리턴타입이 boolean일 경우 메소드 이름은 is로 시작
public 리턴타입 getFieldName() { // 메소드 이름: get + 필드이름(첫 글자는 대문자)
return fieldName;
}
// Setter
public void setFieldName(타입 fieldName) { // 메소드 이름: set + 필드이름(첫 글자는 대문자)
this.fieldName = fieldName;
}