문제 혹은 로직을 객체 단위로 나눠서 작성하는
객체들이 서로 유기적으로 상호작용하는 프로그래밍
ex) 자동차(객체) = 데이터(바퀴,핸들,차체 등) + 기능(주행보조기능, 길찾기 기능)
캡슐화
추상화
상속
다형성
인스턴스화 하는 과정

package chapter6;
class Student {
private int age = 19;
public String getAddress() {
return "경기도";
}
public int getAge(){
return age;
}
}
public class ObjectCreation {
public static void main(String[] args) {
Student Lil = new Student();
System.out.println(Lil.getAddress());
System.out.println(Lil.getAge());
}
}

package chapter6;
public class VariableType {
// class variable
static String subject = "Korean";
// instance variable
int score;
String studentName;
public boolean isPass(){
// local variable
boolean isPass = (score/50)>0?true:false;
return isPass;
}
}
변수를 선언하고 최초로 값을 지정하는 것
멤버변수 초기화 방법
1. 명시적 초기화
2. 초기화 블록
3. 생성자
package chapter6;
class Car {
// 명시적 초기화
static String brand = "람보르기니";
int speed;
String carname;
// 초기화 블록으로 초기화
{
speed = 140;
}
// 생성자
Car(String carname, int speed) {
this.speed = speed;
this.carname = carname;
}
public String getCar(){
return "브랜드:"+ brand + " speed:" + speed + " carname:" + carname;
}
}
public class VariableInitialization {
public static void main(String[] args) {
Car car1 = new Car("버전2",250);
System.out.println(car1.getCar());
}
}
출력결과

new키워드로 인스턴스를 생성할 때, 제일 먼저 실행되는 메소드
매개변수가 없고, 어떤 실행문도 없는 생성자
package chapter6;
class Lesson {
int score = 100;
String studentname = "Java";
public int getScore(){
return score;
}
public String getStudentName(){
return studentname;
}
}
public class DefaultConstructor {
public static void main(String[] args) {
Lesson lesson = new Lesson(); // 기본 생성자 호출
System.out.println(lesson.getScore());
System.out.println(lesson.getStudentName());
}
}
메서드처럼 매개변수를 인자로 받아 인스턴스 초기화에 값을 사용할 수 있는 생성자
package chapter6;
class User{
int userId;
String userName;
User(int userId, String userName){
this.userId = userId;
this. userName = userName;
}
public int getUserId(){
return userId;
}
public String getUserName(){
return userName;
}
}
public class ArgumentConstructor {
public static void main(String[] args) {
User user = new User(1234,"minou");
System.out.println(user.getUserId());
System.out.println(user.getUserName());
}
}
this()
this
package chapter6;
import java.lang.constant.Constable;
class Phone{
String phoneVersion;
String phoneName;
Phone(String phoneName){
//this()
this("A"+System.currentTimeMillis(),phoneName);
}
Phone(String phoneVersion, String phoneName){
this.phoneVersion = phoneVersion;
this.phoneName = phoneName;
}
public String getPhoneId(){
return phoneVersion;
}
public String getPhoneName(){
return phoneName;
}
}
public class thisKeyword {
public static void main(String[] args) {
Phone iphone = new Phone("iphone5");
System.out.println(iphone.getPhoneName());
System.out.println(iphone.getPhoneId());
}
}
어떤 특정한 기능을 수행하기 위한 명령문들의 집합체
구성요소
접근 제어자, static/final keyword, 메소드 이름, 매개변수 선언, 반환타입으로 구성
package chapter6;
public class MethodExample {
// 선언부
public static int add(int a, int b){
// 구현부
int sum = 0;
sum = a+b;
return sum;
}
public static void main(String[] args) {
System.out.println(add(1,2));
}
}
메서드에서 넘겨받는 매개변수의 종류는 크게 두가지

메소드의 작업에 필요한 메모리 공간 제공

static 메서드
인스턴스 메서드
package chapter6;
import java.time.LocalDate;
class Example {
static String today = LocalDate.now().toString();
private long todayTimeMs;
Example(){
this.todayTimeMs = System.currentTimeMillis();
}
//static 메서드
public static String getToday(){
return today;
}
//instance 메서드
public long getTodayTimeMs(){
return todayTimeMs;
}
}
public class StaticMethodAndInstanceMethodExample {
public static void main(String[] args) {
System.out.println(Example.getToday());
Example example = new Example();
System.out.println(example.getTodayTimeMs());
}
}
한 클래스에 같은 메소드 이름으로 여러 메소드를 정의하는 것
package chapter6;
public class OverloadingExample {
public static void main(String[] args) {
}
// 이름은 같지만 매개변수는 서로 다르다
private static int calculatorSum(int num1, int num2){
return num1 + num2;
}
private static int calculatorSum(double num1, double num2){
return (int)(num1+num2);
}
private static double calculatorSum(float num1, float num2){
return num1 + num2;
}
}
메소드의 매개변수를 동적으로 지정할 수 있는 기능(>=JDK1.5)
package chapter6;
public class VariableArgs {
public static void main(String[] args) {
String originStr = "abc";
System.out.println(addString(originStr,new String[]{"d","e"}));
System.out.println(addString(originStr,"f"));
System.out.println(addString(originStr));
}
private static String addString(String origin,String... add){
for(String element : add){
origin += element;
}
return origin;
}
}
출력결과

Human Class 직접 구현해보기
package chapter6;
class Human{
private String sex;
private int tall;
private int weight;
private int age;
private String name;
public Human(String sex, int tall, int weight, int age, String name){
this.sex = sex;
this.tall = tall;
this.weight = weight;
this.age = age;
this.name = name;
}
public String getSex(){
return sex;
}
public int getTall(){
return tall;
}
public int getWeight(){
return weight;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
public double getBMIScore(){
return Math.round(weight/Math.pow(tall,2)*10000);
}
}
public class task3 {
public static void main(String[] args) {
Human human1 = new Human("남",178,68,24,"Alex");
System.out.println(human1.getSex());
System.out.println(human1.getAge());
System.out.println(human1.getName());
System.out.println(human1.getAge());
System.out.println(human1.getTall());
System.out.println(human1.getBMIScore());
}
}
출력결과
