make it simple
article thumbnail

객체란 무엇인가?

  • 객체는 상태(필드)와 동작(메서드)를 가진다.
  • 객체는 클래스의 인스턴스를 나타내며 메모리의 공간을 차지한다.

클래스란 무엇인가?

  • 객체를 생성하기 위한 템플릿 또는 청사진입니다.
  • 클래스는 인스턴스화하기 전까지는 메모리의 힙 영역을 소모하지 않는다.

추상화란 무엇인가?

  • 사용자와 관련있는 내용만 노출하고 나머지 세부 내용은 숨기는 개념입니다.
  • 추상화를 통해 어플리케이션이 일을 수행하는 방법에 집중이 아닌 수행하는 일 자체에 집중한다.
  • 내용을 노출하는 복잡성을 줄이고 코드의 재사용성을 높이며 코드 중복을 방지함으로써 낮은 결합도와 높은 응집도를 유지한다.
public interface car {
    public void speedUp(); // 속도 높이기
    public void slowDown(); // 속도 낮추기
    public void turnRight(); // 우회전
    public void turnLeft(); // 좌회전
    public String getCarType(); // 자동차 유형 
}
public class ElectricCar implements Car { 
	private final String carType;
    
public ElectricCar(String carType) { 
        this.carType = carType;
    }
@Override
public void speedUpO {
        System.out.println("Speed up the electric car"); 
    }
@Override
public void slowDown() {
        System.out.printIn("Slow down the electric car"); 
    }
@Override
public void turnRight() {
        System.out.printIn("Turn right the electric car"); 
    }
@Override
public void turnLeft() {
        System.out.printIn("Turn left the electric car"); 
    }
@Override
public String getCarType() {
        return this.carType; 
    }
}
  • 위처럼 car라는 인터페이스를 생성 후 ElectricCar라는 클래스에서 상속받아 구현했습니다. 전기차량 클래스가 아닌 자동차 유형이 경유차량(GasCar)이나 디젤차량(DieselCar)인 경우에는 해당 차량 유형에 맞는 클래스를 생성 후 같은 Car라는 인터페이스를 상속받아 구현할 수 있습니다. 이 처럼 적절한 상황에 맞춰 인터페이스를 활용하면 코드 중복을 줄이고 재사용을 할 수 있는 객체지향적인 어플리케이션을 만들 수 있습니다.

캡슐화란 무엇인가?

  • 객체 상태가 외부로부터 숨겨진 상황에서 이 상태에 접근하는 일련의 공개 메서드만 노출하는 기법
  • 캡슐화는 정보 은닉 메커니즘, 각 객체가 클래스 내에서 객체의 상태를 비공개로 유지합니다.
  • 자바에서 캡슐화는 접근제어자(public,private,protected)로 구현합니다.
public class Cat {
    private int mood = 50;
    private int hungry = 50;
    private int energy = 50;

    public void sleep() {
        System.out.println("Sleep...");
        energy++;
        hungry++;
    }

    public void play() {
        System.out.println("Play...");
        mood++;
        energy--;
        meow();
    }

    public void feed() {
        System.out.println("Feed...");
        hungry--;
        mood++;
        meow();
    }

    private void meow() {
        System.out.println("Meow!");
    }

    public int getMood() {
        return mood;
    }

    public int getHungry(){
        return hungry;
    }

    public int getEnergy(){
        return energy;
    }
}
public static void main(String[] args) {
    Cat cat = new Cat();
    cat.feed(); 
    cat.play(); 
    cat.feed(); 
    cat.sleep();
}
  • 위처럼 Cat 클래스에서 meow()라는 메서드를 private으로 생성해서 다른 클래스에서 접근이 불가하다. 그럼으로 meow라는 함수는main클래스에서 사용할수가 없습니다. 캡슐화를 할 때 생각해야하는 부분이 왜 정보를 은닉해야하는지 생각하고 하는게 좋다.

상속이란 무엇인가?

  • 상속은 객체가 다른 객체의 코드를 재사용할 수 있도록 허용하여 코드의 재사용성을 유지합니다. 또한 각 객체만의 로직도 추가할 수 있습니다.
  • IS-A 관계로 부모 자녀 관계입니다.
  • 자바에서 상속은 extends 키워드로 구현할 수 있습니다.(여러개의 클래스를 상속할 수 없습니다)
// 직원 클래스
public class Employee{
	private String name;
    
   	public Employee(String name){
    	this.name = name;
    }
}

 

// Employee - 부모 클래스  
// Programmer - 자식 클래스
public class Programmer extends Employee {
	private String team;
    
    public Programmer(String name, String team){
    	super(name);
        this.team = team;
    }
}

다형성이란 무엇인가?

  • 다형성은 polymorphism이라고 하는데 poly(많다) morph(형태)라는 2개의 그리스어로 구성된 단어입니다. 다형성은 많은 형태를 의미합니다. 다양한 형태로 객체가 때에 따라 다르게 동작 할 수 있습니다.

 

  • 다형성 구현하는 방법 
    • 메서드 오버로딩 : 매개변수가 다른 경우 컴파일러가 오버로드된 메서드 가운데 어떤 형식을 호출할 것인지 컴파일 시간에 식별 가능하다. 컴파일 타임 다형성이라고 불린다.
public class Triangle{
    public void draw(){
    	System.out.println("Draw default triangle ...");
    }
    
    public void draw(String color){
    	Syste.out.println("Draw a triangle of color" + color);
    }
    
    public void draw(int size,String color){
    	Syste.out.println("Draw a triangle of color" + color +
        	" and scale it up with the new size of " + size);
    }
}



// 메인에서 호출 하기
public static void main(String[] args){
    Triangle triangle = new Triangle();
    
    triangle.draw();
    triangle.draw("blue");
    triangle.draw(10,"blue");
   
}

// 출력 결과
// Draw default triangle ...
// Draw a triangle of color blue
// Draw a triangle of color blue and scale it up with the new size of 10

 

  • 메서드 오버라이딩: IS-A 관계이며, 런타임 다형성으로 불립니다. 인터페이스 생성 후, 각 클래스의 특화된 동작을 수행하기 위해 인터페이스에 있는 메서드를 오버라이드 한 후 구현한다.
public interface Shape{
	public void draw();
}

public class Triangle Implements Shape{
    @Override
    public void draw(){
    	System.out.println("Draw a triangle ...");
    }
}

public class Rectangle implements Shape{
    @Override
    public void draw(){
    	System.out.println("Draw a rectangle ...");
    }
}

public class Circle implements Shape{
    @Override
    public void draw(){
    	System.out.println("Draw a circle ...");
    }
}

// 메인 호출
public static void main(String[] args){
    Shape triangle = new triangle();
    Shape rectangle = new Rectangle();
    Shape circle = new Circle();
    
    triangle.draw();
    rectangle.draw();
    circle.draw();
}

// 출력 결과
// Draw a triangle ...
// Draw a rectangle ...
// Draw a circle ...

 

reference:

  • 자바 코딩 인터뷰 완벽 가이드
profile

make it simple

@keep it simple

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!