[JAVA] 컬렉션 프레임워크 (Java Collection Framework:JCF) 간단하게 알아보기
·
Language/JAVA
JCF, Jaca Collection Framework자바는 데이터를 저장하는 자료구조와 활용하는 알고리즘을 구조화하여 사용자에게 제공한다. 자료구조가 정의된 인터페이스와 구현하는 클래스로 구분되어 있다. c언어에서 스택을 구현하기 위해서는 직접 push, pop, peek을 만들어야 한다. 하지만 자바를 이용하면 Stack 클래스의 객체를 선언해 push, pop, peek을 가져와 사용할 수 있다.이렇게 제공되는 프레임워크를 JCF라고 한다.    컬렉션 프레임워크 사용의 장점컬렉션 프레임워크는 인터페이스와 다형성을 이용한 객체 지향적 설계를 통해 표준화되어 있다. 자바에서 직접 제공하는 것이기 때문에 안정적으로 사용할 수 있으며 알고리즘을 고성능으로 구현할 수 있다. 재사용이 높고, 사용이 편리하다..
[JAVA] 예외 처리(Exception Handling) 하는 이유와 방법 알아보기
·
Language/JAVA
오류 Error & 예외 Exception프로그래밍을 하다가 오류가 발생했을 때, 회복이 가능한가를 기준으로 오류와 예외로 나눈다.오류 Error일반적으로 회복이 불가능한 문제환경적인 이유로 발생발생하는 경우 회복이 불가능하며 어떤 에러로 종료됐는지 확인할 수 있다.예외 Exception회복이 가능한 문제발생할 수 있는 문제에 대해 대응하는 예외 처리가 가능   예외 종류확인된 예외 Checked Exception컴파일 시점에 확인하는 예외로 특정 문제를 인지하고, 정의해두어서 확인이 가능하다.checked exception은 예외 처리를 하지 않으면 compile error가 발생한다.compile error - 프로그래밍 언어 규칙을 지키지 않았을 때 발생하는 에러, 문법에 맞게 작성미확인된 예외 U..
응집도(Conhension)와 결합도(Coupling), 그리고 캡슐화의 중요성
·
Language/JAVA
좋은 소프트웨어 설계좋은 소프트웨어는 객체 내부 상태를 캡슐화하고, 객체 간 메시지를 통해서 상호작용한다. 밀접하게 연관된 작업만 수행하고, 연관이 없는 작업은 다른 객체에게 위임한다. 내부 구현을 감추고 외부로부터 보호하며, 외부와 협력을 할 때는 인터페이스에 의존해야 한다. 자신이 소유하고 있지 않는 데이터로 작업을 처리하면 안 된다. 자신이 소유한 데이터만 책임하며, 메시지를 통해 협력하라.  좋은 설계를 만들기 위해서 생각해야 할 것들은 위 내용과 같다. 이 내용에서 응집도, 결합도, 캡슐화에 관한 내용을 볼 수 있다. 밀접하게 연관된 작업만 수행하는 것은 응집도가 높다고 할 수 있다. 자신의 데이터만 책임지고, 메시지를 통해 협력하는 것은 다른 모듈끼리 결합도가 낮다고 할 수 있다. 마지막으로 ..
[자바] 자바 가상 머신, JVM(Java Virtual Machine) 자세히 이해하기
·
Language/JAVA
VM (Virtual Machine) 이란?프로그램 실행을 위해 물리적 머신과 유사한 소프트웨어를 가상 머신이라고 한다. 소프트웨어로 구성된 하드웨어(머신)을 의미한다. 1960년대 중반 처음 개발되어 메인 프레임의 중요한 부분으로 자리 잡았다. 가상 머신을 사용하는 이유는 다음과 같다.격리와 보안 중요도 증가표준 운영체제 보안성과 신뢰성 실패클라우드 컴퓨팅과 같이 많은 사용자가 한 컴퓨터를 공유   JAVA Virtual MachineVM은 프로그램 실행을 위한 소프트웨어 가상 머신, 자바 가상 머신은 자바 실행을 위한 가상 머신으로 생각하면 된다.자바의 실행을 위해서 사용하는 JVM은 어떤 방식으로 동작될까? 먼저 자바는 운영체제에 종속적이지 않다는 사실을 알아야 한다. 자바를 설명할 때 "한번 동작..
객체 지향 5대 원칙 - SOLID 이해하기
·
Language/JAVA
이해하기 많이많이 힘들었습니다... 잘못된 부분이 있으면 피드백 주세요!   SOLID 원칙시스템에 새로운 요구사항이나 변경사항이 있을 때, 영향을 받는 범위가 적은 구조 → 좋은 설계 유지 보수와 이해가 쉬운 소프트웨어가 되도록, 유연한 대처와 확장성 있는 시스템 구조를 만드는 것이 중요하다. 크기가 커질 때 복잡성을 줄이고 문제가 생길 수 있는 부분을 제거한다. 여러 디자인 패턴이 SOLID 설계 원칙에 입각해 만들어져 표준화 작업부터 설계까지 다양하게 적용된다.⇒ 코드를 확장하고, 유지 보수 관리가 쉬우며, 복잡성을 제거해 개발의 생산성을 높일 수 있다.    SRP 단일 책임 원칙 (Single Responsibility)“there should never be more than one reaso..
객체 지향 프로그래밍(Object-Oriented-Programming) 자세히 이해하기
·
Language/JAVA
객체 지향 프로그래밍 OOP구조적 프로그래밍으로 소프트웨어 유지보수와 재사용이 어렵다는 문제 해결을 위해 도입된 프로그래밍 방법JAVA, Python, C++, C#, Ruby, Swift 등 여러 언어에서 객체 지향 프로그래밍 방법을 사용한다.객체 지향 프로그래밍의 주 특징 4가지는 상속, 다형성, 추상화, 캡슐화가 있다.주요 특징 4개 뿐만 아니라 객체 지향에서는 여러 특징을 만날 수 있다. 의존성 문제나 응집도, 결합도, 객체 지향 설계 5대 원칙 SOLID 등 그 개념은 아주 많으며 객체 지향 프로그래밍을 사용하는 사람들은 효율적으로 설계하기 위해 노력해야 한다.  관련 용어1. 협력 collaboration객체가 기능을 구현하기 위해 수행하는 상호 작용 2. 책임 responsibility협력에..
[자바/JAVA] 상속과 인터페이스의 관계, 인터페이스 잘 구현하기
·
Language/JAVA
객체 지향의 특징 '상속'상속은 객체 지향 특징 4개 중 하나로, 자식 클래스가 부모 클래스를 상속받아 사용하는 것을 의미한다. 자식 클래스는 부모 클래스가 가지고 있는 멤버나 메서드에 접근할 수 있고, 추가 연산이 가능하다. 자식 클래스만 사용할 수 있는 개인적인 메서드도 새로 생성할 수 있고, 부모 클래스의 메서드를 오버라이딩하여 재정의할 수 있다.객체 지향 프로그래밍을 사용하면서 상속은 위와 같은 이유로 많이 적용된다. 상속은 인터페이스와도 깊은 연관이 있다. 인터페이스는 실제로 동작하는 코드를 가지고 있지 않고, 인터페이스를 사용하기 위해서는 다른 클래스에서 인터페이스를 상속받아 사용해야 한다.인터페이스를 사용하기 위해서는 implements 키워드를 이용하여 무조건 상속이 적용되는 것이다.   ..
[자바/JAVA] 자바로 그래프(Graph) 직접 구현해보기 -인접 행렬, 인접 리스트
·
Language/JAVA
rvrlo - [자료구조] 그래프(Graph)자바를 이용해서 그래프를 직접 구현해보려고 한다.그래프에 대한 설명은 위 링크에서 확인할 수 있다. 이 글에서는 설명 없이 코드로 구현한 과정만 적는다.    인접 행렬로 무향 그래프 구현하기무방향 그래프를 구현할 것이기 때문에 입력받은 정점은 뒤바꿔서 서로 연결을 다시 해줘야 한다.방향 그래프로 구현한다면, [ from → to ]만 연결해줘도 된다.  사용하는 메서드 - add, getPrint public static void add(int from, int to){ graph[from-1][to-1] = 1; graph[to-1][from-1] = 1; } public static String getPrint(){ ..
[자바/JAVA] HashSet을 사용해서 정렬이 되는 이유 찾아보기
·
Language/JAVA
HashSetHashSet은 인터페이스 Set을 구현할 때 사용하며 HashMap 인스턴스로 Set 자료구조 형식을 나타낸다.Set은 비선형 자료구조로 순서가 보장되지 않고, 중복이 허용되지 않는 특징이 있다.HashSet말고도 TreeSet, LinkedHashSet, SortedSet과 같은 방식을 사용하기도 한다.  순서가 보장되지 않는 Set의 성질자바 컬렉션은 Set을 기본으로 제공한다. Set을 구현하는 방법은 여러가지가 있지만, 각자 성질이 조금씩 다르다. SortedSet과 이를 상속받은 TreeSet은 오름차순으로 정렬이 되고, HashSet을 상속받은 LinkedHashSet은 저장된 순서에 따라서 해시테이블에 저장된다.순서 없이 나오는 Set을 보기 위해 HashSet을 통해서 동작을..