programming/JAVA

    Java - SOLID

    Java - SOLID

    Object-Oriented Programming (OOP)를 더 유연하게 하고, 이해하기 쉽게 하기 위한 접근법으로 SOLID라는 객체지향의 설계 원칙이 있는데 본격적으로 SPRING 수업에 들어가기 전에 한번 정리를 해보려 한다. SOLID는 유명한 책인 '클린 코드'의 저자인 Robert C. Martin (Uncle BOB Martin..)이 00년도에 그의 논문 "Design Principles and Design Patterns"에 처음으로 소개된 5가지의 원칙이다. SOLID원칙을 잘 지킨다면 변경이 용이하고 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 된다고 한다. 어떻게 하면 객체지향을 더 잘 쓸 수 있을까? 하는 관점에 의미를 두고 정리해보자. Single responsibil..

    [TBC]Java - 자료구조 (Data Structure)

    [TBC]Java - 자료구조 (Data Structure)

    추가할 것: Hash Table / Deque / 데이터를 어떤 식으로 정리해서 활용할지를 다양한 방법을 통해 구현할 수 있도록 알고리즘으로 구체화한 것이다. 대부분의 자료구조는 특정 상황에 놓인 문제를 해결하는데에 특화 되어있다. 따라서 많은 자료구조를 알고 있으면, 어떤 상황이 닥쳤을때 해당 상황에 가장 적절한 자료구조를 사용해서 빠르고 정확하고 효율적이게 문제를 해결할 수 있다. Stack 프링글스 통 > LIFO (Last In First Out) - 후입 선출 > 입력과 출력이 하나의 방향으로 진행되는 '제한적 접근' > 데이터를 한번에 하나씩 넣고 뺀다. (한 번에 여러 개 불가) 어떨 때 쓰일까?? 웹 브라우저에서 뒤로 가기 / 앞으로 가기 구현, 응용 프로그램에서 Ctrl + Z 등등.. ..

    Java - 재귀

    재귀는 함수의 정의 단계에서 다시 자기 자신을 재 참조하는 함수를 말한다. 즉 자신 안에서 자신을 다시 호출. 이게 말로는 쉬운데 막상 코드를 쳐보면?????????? 하는 반응이 나오는데 처음 접하는 입장에서는 정말 당연한 반응이라고 생각한다. 지금의 내가 그렇고 앞으로도 그럴듯하다. 엄밀히 보면 반복문과 비슷하고 실제로 모든 재귀 함수를 반복문으로 표현할 수 있다. 하지만 반복문안의 반복 문안의 반복 문안의 반복문처럼 코드를 작성하면 정말 헷갈릴 수 있어 이런 상황이 온다면 재귀 알고리즘을 이용하는 것이 더 효율적이다. 하지만 마냥 치트키는 아닌데, 피보나치 수열을 보면 가장 대표적인 재귀의 예제라고 볼 수 있지만 실상은 매우 효율이 나쁘다. 중복되는 부분이 반복적으로 일어나면서 스택의 자리를 채우다..

    Java - Effective cont.

    Java - Effective cont.

    파일 입출력 (I/O) 바이트 기반 스트림 입출력 단위가 1byte인 바이트 기반 스트림으로 InputStream, OutputStream가 있다. 스트림은 한 번만 그리고 단 방향으로만 데이터를 전송하기 때문에 입출력을 동시에 하려면 스트림을 각각 만들어야 한다. 바이트 기반 입출력 스트림은 대상에 따라 종류가 달라진다. 입력 스트림 출력 스트림 입출력 대상 FileInputStream FileOutputStream 파일 PipedInputStream PipedOutputStream 프로세스 (프로세스 간의 통신) ByteArrayInputStream ByteArrayOutputStream 메모리(byte계열) AudioInputStream AudioOutputStream 오디오장치 입출력을 스트림을 ..

    Java - Effective

    Java - Effective

    다음글 Java - Effective cont. 파일 입출력 (I/O) 바이트 기반 스트림 입출력 단위가 1byte인 바이트 기반 스트림으로 InputStream, OutputStream가 있다. 스트림은 한 번만 그리고 단 방향으로만 데이터를 전송하기 때문에 입출력을 동 danc9921.tistory.com Enum Enum은 서로 관련이 있는 상수들의 집합이다. Enum은 열거형, 서로 관련이 있는 것들을 모아서 번호를 매겨놓은 것을 의미한다. enum 열거형이름 {상수명1, 상수명2, 상수명3, ...} 보통 상수명은 대문자로 작성한다. //과일을 열거형으로 작성 enum Fruits { APPLE, STRAWBERRY, ORANGE, GRAPE, WATERMELON } 여기서 { } 안에 있는 열..

    Java - Inner Class

    내부 클래스 (Inner Class) 내부 클래스는 클래스 안에 선언된 클래스이다. 주로 서로 깊은 관계에 있는 클래스에 사용하며 두 클래스의 멤버 간 쉬운 접근이 가능하고 외부에는 불 필요한 클래스의 노출을 감춰 코드를 간결하게 작성할 수 있다. 즉 객체지향의 '캡슐화'와도 관련이 어느 정도 있는 듯하다 장점을 정리하면 내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근 가능 코드의 복잡함을 줄임 (캡슐화) class A //외부 클래스 { ... class B // 내부 클래스 { ... } static class C //정적 내부 클래스 { ... } void test() { class D //지역 내부 클래스 { ... } } ... } 위와 같은 구조이며 내부 클래스는 외부 클래스를 제외하고는 다..

    [TBC]Java - 컬렉션 프레임워크 (Collections Framework)

    [TBC]Java - 컬렉션 프레임워크 (Collections Framework)

    컬렉션 프레임워크 컬렉션 프레임워크는 많은 양의 데이터와 컬렉션을 다루는데 필요한, 특히 그 유명한 자료 구조를 바탕으로 객체들을 효율적으로 사용할 수 있도록 컬렉션을 만들고 그와 관련된 유용한 클래스와 인터페이스들을 포함하고 있다. 특히, 인터페이스와 다형성을 이용한 OOP적 설계를 토대로 표준화되어 있기 때문에 편리하고 재사용성이 높은 코드를 작성할 수 있도록 많은 도움을 준다. 위의 상속계층에서 붉은색 = 인터페이스, 녹색 = 클래스이다 컬렉션 프레임워크의 주요 인터페이스로 List, Set, Queue 그리고 Map이 있다. 공통적인 데이터를 모아놓은 Collection과 쌍으로 이루어진 데이터(key, value) 집합인 Map이 있는데, 상속 관계도를 보면 알 수 있듯이 List, Set, Q..

    Java - 지네릭 (generic)

    추가할 것: 지네릭 타입 제한 Generic 지네릭은 왜 필요한가 지네릭 vs 오브젝트 타입 차이점? generic은 굉장히 중요하다. 어떤 타입이 들어올지 미리 정하지 않고 객체를 만들거나 호출 시 어떤 타입으로 할 것인지 설정 지네릭(또는 제네릭, 제네릭스)은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스의 컴파일 단계에서 타입 체크(compile-time type check)를 해주는 기능이다. 인스턴스 별로 다르게 동작하려고 만든 기능이므로 static멤버에 타입 변수 지정 불가 즉 클래스와 메서드에서 쓸 데이터 타입을 나중에 정하는 방식이다. 매개변수와 비슷해 보여 헷갈리지만 매개변수는 값에 연관이 되어있고 generic은 데이터 타입에 포커스 되어있다. 객체의 타입을 런타임이 아닌 컴파..

    [TBC]Java - Array 정리

    [TBC]Java - Array 정리

    추가예정: 배열의 길이 변경(복사) / String 배열 / + 예제 연습 배열 배열 (Array)은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것이라 정의할 수 있다. 예를 들어 100개의 값을 담기 위해 100개의 변수를 하나하나 int a = 1; int b = 2;, int c = 3;..... int qq = 99; , int ww = 100; 이런 식으로 정의하는 것은 가능은 할 것이나 매우 비 효율적이다. 이럴 때 배열이 매우 유용하게 사용된다. 배열은 1차원 배열과 다차원 배열로 나뉠 수 있으며 배열이 가진 각각의 값을 배열의 요소 또는 배열의 원소 라고 한다. 그리고 배열의 모든 요소는 순서에 따라 번호표를 갖고 있는데 이걸 인덱스(index)라고 한다. 배열에 접근할 때는 배열 이..

    [TBC]Java - 객체지향언어 (OOP - Object-oriented Programming)

    [TBC]Java - 객체지향언어 (OOP - Object-oriented Programming)

    데이터베이스에 자바를 이용하여 테이터를 효율적으로 잘 때려박자 객체지향 언어 (OOP)의 특징 코드의 재사용성이 높다. 코드의 관리가 용이하다. 프로그래밍의 신뢰성을 높인다. 즉, 코드의 재사용성이 높고 유지보수가 용이하다. 따라서 개발과 유지보수에 드는 시간과 비용을 획기적으로 개선하였다. 어떤식으로 개발을 할지에 대한 방법론 중 하나이다. 자바!= OOP 그렇게 중요하다는데 문제는 내가 이해가 잘 안되는 것 같다. 계속 업데이트하면서 복습할것 포스팅 링크 OOP 기본 OOP 심화 클래스와 객체 상속 필드와 변수 캡슐화 메서드 다형성 생성자 추상화/인터페이스

    Java - 추상화 / 인터페이스

    추상화 추상화는 상속, 캡슐화, 다형성 과 더불어 객체지향 프로그래밍의 핵심 개념 중 하나이다. 추상이라는 말에서 유추를 할 수 있듯이 말 그대로 추상적인 개념, 뭔가 애매모호 함을 활용한다. 상속에서 상위클래스-하위클래스를 연결했을 때 상위클래스의 멤버를 하위클래스도 상속을 받는데 상위클래스에서 정의된 멤버를 똑같이 받아 쓴다. 추상화도 상속을 받아 쓴다 라는 개념에서 보면 비슷하지만 큰 차이가 있는데 추상화의 개념에서는 "미완성 설계도"라고 불리는 추상 클래스와 시그니처만 있고 바디 가 없는 추상 메서드를 하위 클래스에서 상속받아 하위클래스에서 정의를 한다. 즉 비어있는 기본 틀만 가져와 하위클래스에서 맞게 설정한다. 따라서 코드의 중복과 유지보수 면에서 편리하다. 여럿이 개발을 하는 경우에도 추상클..

    Java - 다형성

    다형성은 객체지향에서 제일 중요한 부분이라 많이들 말한다. 꼭 이해하고 넘어갈 수 있도록 하자. 다형성 자바에서 다형성은 상위​클래스 타입의 참조 변수로 하위 클래스의 인스턴스를 참조할 수 있게 하는 것이다. 아래에 TV 리모컨을 예로 들어놨는데, 다형성은 일종의 컨트롤러(참조 변수)로 사용할 수 있는 멤버의 개수를 조절한다. 여기서 상위클래스가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야한다. 상속에서 하위 클래스가 상위 클래스보다 같거나 더 많은 멤버 수를 갖는 것과 반대 개념이다. 즉 다형성을 사용하면 상위 클래스의 멤버만 사용 가능하다. 다형성의 핵심 중점은 반복적으로 사용하는 보일러플레이트 코드(반복적으로 사용하는 비슷한 코드)의 최소화를 할 수 있다. 이전에 배웠던 메..