본문 바로가기

전체 글118

추상클래스와 인터페이스 추상 클래스 : 인스턴스화할 수 없는 클래스입니다. 즉, 객체로 만들 수 없습니다. ( 추상메서드를 익명으로 구현하면 가능하지만요..) 이 클래스는 다른 클래스가 상속 받아 사용될 목적으로 설계 됩니다. 부모 클래스는 제공하지만 실제 인스턴스가 생성 되면 안되는 클래스 추상클래스는 말 그대로 추상적인 개념만 제공하는 클래스로 사용되어야 한다. 상속을 목적으로 사용된다. // 추상 클래스로 선언 public abstract class Animal { public void sound() { System.out.println("Animal.sound()"); } } public class AnimalSoundMain { public static void main(String[] args) { Dog dog =.. 2023. 12. 11.
상속과 다형성 기본 상속(Inheritance) : 한 클래스가 다른 클래스의 속성을 가져와 확정하거나 수정하는 메커니즘 입니다. 자바는 다중 상속을 지원하지 않습니다. 그래서 extends 대상은 하나만 선택할 수 있습니다. 물론 부모가 상위 부모를 가지는 것은 괜찮습니다. 만약 비행기와 자동차를 상속 받아서 하늘을 나는 자동차를 만든가고 가정해보면. 아래 그림과 같이 다중 상속을 사용하게 됩니다. AirplaneCar 입장에서 move()를 호출할 때 어떤 부모의 move() 사용해야 할지 애매한 문제가 발생합니다. 이것을 다이아몬드 문제라고 합니다. 그리고 다중 상속을 사용하면 클래스 계층 구조가 매우 복잡해질 수 있습니다. 이런 문제점 때문에 자바는 클래스의 다중 상속을 허용하지 않습니다. 대신에 인터페이스의 다중 .. 2023. 12. 11.
객체지향적으로 개발해야 하는 이유 객체지향 프로그래밍이란 절차지향적인 개발 방법에서 발생하던 여러가지 문제점들을 해결하기 위해 등장한 패러다임 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용합니다. 레고 블럭 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴퓨터 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 객체지향 프로그래밍은 컴퓨터의 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 객체는 메시지를 주고 받고, 데이터를 처리할 수 있습니다(협력) 실세계와 객체 지향을 1:1로 매칭 x 그래도 실세계의 비유로 이해하기에는 좋음 역할과 구현으로 세상을 분리 캡슐화는 데이터(변수)와.. 2023. 12. 11.
동시성 이슈 동시성 이슈는 여러 스레드나 프로세스가 동시에 실행될 때 발생하는 문제입니다. 이러한 문제는 주로 공유 자원에 대한 동시 접근, 경쟁 조건, 데드락 등과 관련이 있습니다. 1. 공유 자원에 대한 동시 접근 : 여러 스레드가 동시에 같은 자원(변수, 객체, 데이터)에 접근하려고 할 때 발생합니다. 이로 인해 예상치 못한 결과나 데이터의 무결성 문제가 발생할 수 있습니다. 2. 경재조건 (Race Condition) : 두 개 이상의 스레드가 특정 연산의 순서에 따라 결과가 달라지는 상황을 의미합니다. 예를 들어 두 스레드가 동시에 같은 변수를 증가 시키려고 할 때, 예상 값 보다 다른 값이 저장 될 수 있습니다. 3. 데드락 (Deadlock) : 두 개 이상의 스레드가 서로 다른 자원을 기다리며 무한히 .. 2023. 12. 11.