[JAVA] 객체 지향의 강한 결합과 약한 결합

HEETAE HEO·2022년 5월 29일
0
post-thumbnail

강한 결합이란?

객체의 의존 관계에서 강한 결합이란, 어떠한 객체가 다른 객체에 강한 의존성을 가지고 있음을 뜻한다. 예를 들어 A클래스가 B클래스의 참조가 필요합니다. 이때 A가 B에 의존하고 있다고 말하고 B를 A의 종속 항목이라고 합니다.

public class Animal{
		private Dog dog;
        
        public Animal(){
        	this.dog = new Dog();
        }
        
        public void Bark(){
        	dog.bark();
        }
    }
    
    public class Dog {
    	public void bark(){
        	system.out.println("개가 짖습니다.");
            }
       }

Animal 클래스를 통해서 Dog 클래스가 존재하게 됩니다. 이렇게 되면 문제점이 생기는데 다음과 같습니다.

Dog 클래스는 Animal 클래스에 의해 정의되기 때문에 Animal 클래스의 수정이 생긴다면 Dog클래스에 영향을 끼칠 수가 있게되고 Animal 클래스 뿐만 아니라 Dog 클래스에서도 수정이 필요하게 됩니다.

이러한 상황이 Animal클래스가 Dog클래스에 의존성이 존재한다고 하는 것입니다.

약한 결합

public interface Animal{
	void bark();
    }
    
public class Dog implements Animal{
	@override
    public void bark(){
    	system.out.println("개가 짖습니다.");
    }
}


public class Zoo {
	private Zoo zoo;
    
    public Zoo(Animal animal){
    	this.animal = animal;
    }
    
    public void ZooOpen(){
    	animal.bark();
    }
}
        

위와 같이 Animal 인터페이스를 만들어 Bark()라는 추상 메서드를 선언합니다. 그리고 Animal 인터페이스를 상속받은 Dog클래스에서 추상 메서드인Bark를 오버라이드 하여 해당 클래스에 적합하도록 변환해서 사용하는 것입니다. 이는 Zoo 클래스 내부적으로 코드의 변경이 일어날 필요 없이, 생성자를 통해 객체를 받아 멤버변수에 대입하기만 하면 오브젝트를 변경 가능하게 해줍니다. 즉 상호간의 종속성에서 벗어나 약한 결합을 이루게 해줍니다.

Android Di(Dependency injection)를 공부하고 사용하기 전 알아야하는 지식입니다.

profile
Android 개발 잘하고 싶어요!!!

0개의 댓글