우리는 매일 조건에 대한 행동의 분기나 반복을 하고 있다.예를 들어,"만약 일기예보가 비라면 우산을 가지고 간다" 라는 분기나,"정답일 때 까지 몇 번이라도 문제를 푼다" 라는 반복이다.프로그램도 이것과 같은 조건분기와 반복을 수행하며 처리를 진행해 나간다.코드를 실행
🤔 인간은 반복적인 작업을 잘하지 못한다. 실수하고, 지루해한다. 컴퓨터는 이런 반복적인 작업을 대행하기 위해서 만들어진 기계다. 인간이 하기 싫어하는 바로 그 일을 컴퓨터가 대신하도록 하는 것이 반복문(loop, iteration)이다. 조건분기와 반복 中 앞서
숫자나 문자열을 담을 수 있는 변수를 배웠다.많은 데이터의 평균을 구한다던지, 프로그램이 커질수록 많은 변수를 사용해야 한다.이제 배울 배열은, 변수를 보다 편리하게 사용하기 위한 방법이다.배열을 사용함으로써 한번에 많은 변수를 처리할 수 있다.배열의 최초의 요소는 0
💡 배열의 사용 학교를 비유해보자. 1반 학생들이 상담을 받는다고 했을 때, 이 사건에는 다음과 같은 절차가 함축되어 있다고 할 수 있다. >1. 1반 학생들을 번호순으로 정렬해서 줄을 세운다. 상담받은 학생의 숫자를 기록한다. 대기중인 학생과 상담을 한다. 상담받
소스코드가 너무 길어져서 개발자 자신도 파악하기 힘들어 짐대규모 프로그램도 즐겁게 개발하기 위해인간이 파악하기 어려운 복잡함을 극복하기 위해생각 하는 방법 (사고)암기가 아닌 이해와 전체상 그리는 것✔️ 객체 지향이란 무엇인가?소프트웨어를 개발할 때, 모듈화(부품화)를
💡 Method 코드가 길어지거나, 같은 코드를 반복해야 할 때, 코드를 부품화하여 분리해 보기 좋은 코드로 만들 수 있다. 코드의 부품화(코드의 모듈화) 하는 방법 중 한가지가 메서드이다. 소괄호가 있고 어떤 데이터타입을 받을 수 있다는 정의를 할 수 있다. 💡A
💡 object를 도출하는 순서 각 object가 가지고 있을만한 '속성'이나 '동작'을 생각해 종류와 내용을 정의 각 object를 가상세계에 도출, 동작시켜 보기 💡 용어 정리 >object: 현실 세게의 모든 객체 class: object를 가상세계 용으로
먼저 class Foo에다가 두개의 변수를 만들 것이다.변수 하나는 이름이 static String classVar이고 앞에 static이 붙여져 있기 때문에 소속이 클래스 소속이다.또 하나는 String instanceVar라는 이름의 변수를 만들 것인데 앞에 sta
대규모 개발에서는 혼자서 개발이 어렵고 분담을 하여 소스를 모듈화 해야 한다.1개의 소스파일로는 개발의 한계를 만날 것이다.예를 들어, 메서드가 많아지면 양이 너무 방대해 진다. 그래서 클래스를 따로 두어 분리를 해야 한다.이 예시는 메인클래스 안에다가 메서드를 넣은
💡 클래스 형과 참조 >* 가상세계 = 컴퓨터의 메모리 영역 인스턴스 = heap 영역 안에 확보된 메모리
이제 클래스나 인스턴스를 이용하여 현실세계를 객체 지향 프로그램으로 자유롭게 개발 할 수 있게 되었다. 하지만, 실수로 속성을 덮어 쓰거나, 잘못된 조작하는 등의 휴먼에러를 완전히 없앨 수는 없다. 그래서 Java에는 실수를 미연에 방지하는 "캡슐화"라는 방법이 있
편리함을 위해서 어떠한 기능을 수용하면 그 기능이 기존의 체계와 관계하면서 다양한 문제를 발생시킨다. 그 문제를 한마디로 줄여서 말하면 복잡도의 증가라고 할 수 있다. 생성자가 상속을 만나면서 발생한 복잡성을 보자. 그 맥락에서 super이라는 키워드의 의미도 중요하게
"이전에 만든 클래스와 닮았지만, 일부 다른 클래스"를 만들 필요가 있을 경우가 늘어날 것이다. 객체지향을 통해서 달성하고자 하는 목표 중에서 가장 중요한 것은 재활용성이다. 상속은 객체지향의 재활용성을 극대화시킨 프로그래밍 기법이라고 할 수 있다. 동시에 객체지향을
💡오버라이딩 상속은 상위 클래스의 기능을 하위 클래스에게 물려주는 기능이다. 그렇다면 하위 클래스는 상위 클래스의 메서드를 주어진 그대로 사용해야 할까? 만약 그래야 한다면 제약이 상당할 것이다. 이런 제약을 벗어나려면 하위 클래스가 부모 클래스의 기본적인 동작방법
우리의 계산기는 2개의 값(left, right)에 대한 연산(sum, avg) 만을 수행 할 수 있다. 그런데 만약 3개의 값을 대상으로 연산을 해야 한다면 어떻게 해야할까? 우선 아래와 같이 입력값을 3개 받아야 할 것이다.이를 위해서 기존의 setOprands 메
abstract란 한국어로는 추상으로 번역된다. ✔️ abstract: 상속을 강제하는 일종의 규제: 직접적으로 클래스나 메서드를 사용할 수 없다.➡️ abstract 클래스나 메소드를 사용하기 위해서 반드시 상속해서 사용하도록 강제하는 것✔️ 추상 메서드: 메서드의
위에 코드 중 이런 메서드가 있다. 저것이 되는 이유는 무엇일까?call() 호출되었다. \-> Super는 객체생성이 불가능하다. Super의 하위 객체가 존재한다.Super는 추상클래스. 추상메서드 todo()를 가지고 있다. 1에 의거하여 하위클래스는 일반클래스이
인터페이스는 abstract, final와 함께 대표적인 규제이다.인터페이스의 역할은 이렇다. 어떤 클래스가 있고 그 클래스가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메서드들을 구현해야 한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지
💡 다형성이란 ? >✔️ 다형성 하나의 메서드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미 동일한 조작방법으로 동작시키지만 동작방법은 다른 것을 의미 키보드의 키를 통해서 비유를 들어보자면, 키보드의 키를 사용하는 방법은 '누른다'이다. 하지만
위의 코드는 단순하게 객체를 하나 만들고 해당 객체를 toString 메서드로 출력하는 코드로 위와 같은 결과를 얻을 수 있다.참조형 변수는 객체의 주소를 가지기 때문에 타입의 역할이 객체의 주소를 담는다.객체의 주소는 모두 똑같지만 그 안에 갖고 있는 값은 다르다.따
Java에서 문자열을 비교하는 방법을 알아보자.보통 자바에서 equals를 사용하여 문자열이 동일한지 확인한다. 다른 언어와 다르게 ==로 문자열이 같은지 확인하지 않는다. (그 이유는 밑에)a와 c를 비교했을 때, 둘다 같은 문자열의 형태를 가지고 있으므로 true값
예전 포스팅에서 String.equals()에 대해서 알아보았다. 이번에는 Object.equals()에 대해서 알아보자.String.equals() 포스팅equals()는 두 객체를 비교하는 함수로써 모든 클래스의 조상인 Object 클래스의 함수이다. 그래서 @Ov
강제적으로 JVM을 종료시키고 싶을 때는 System 클래스의 exit() 메서드를 호출하면 된다. ✔️ exit()현재 실행하고 있는 프로세스를 강제 종료시키는 역할을 한다. int 매개값을 지정하도록 되어 있는데 이 값을 종료 상태값이라고 한다.❗️ 정상종료: 0❗
Random 클래스에 객체를 생성하면 다양한 메소드를 사용하여 원하는 random value를 생성할 수 있다.그 중에서 가장 많이 쓰이는건 nextInt()
이렇게 gettr / setter를 지정한다.만약 a값을 밖에서 증가시키고 싶을 때 어떻게 해야 할까?getA()++;을 하게 되면 이런 오류가 날 것이다.Invalid argument to operation ++/--variables.setA(variables.get
💡 정렬 알고리즘 비교 컴퓨터에서 정렬을 수행하는 이유 중 가장 큰 이유는 이진탐색이 가능한 데이터를 만들기 위해서이다. 하지만 정렬된 데이터만 이진탐색이 가능하다. 정렬되어있는 데이터는 안정감을 느낀다. 오른쪽으로 갈수록 메모리가 젤 크다. 오른쪽으로 갈수록 비용
📌 들어가기 전 먼저 객체의 배열 정렬의 예를 먼저 보고 들어가자. 📍핸드폰 객체 배열 폰 타입은 Comparable 로 형변환이 안된다는 에러문구이다. 그말은, sort() 메서드에서 Comparable 형변환 하고 있다는 뜻이다. 정렬의 기준이 어떤 것인
java는 오류가 발생하거나 발생할 여지가 있는 여러상황에 대한 예외를 만들어두었다. 우리에게 익숙한 IllegalArgumentException을 비롯해 원인을 찾기 힘든 NullPointerException도 있다. 또한, 파일 처리를 하다 보면 발생하기도 하는 I
기본적으로 프로그램에서 에러가 나는 경우 프로그램은 중단이 된다. 아무리 잘 만든 프로그램이어도 오류가 단 한번도 없이 돌아가기란 힘들다.프로그램에서 오류가 난 경우 그에 대한 예외처리를 하기 위해 try-catch문을 사용한다.예외가 발생될 만한 코드에 try 를 넣
제네릭 자바에서 제네릭(generic)이란 데이터의 타입을 일반화한다는 것을 의미한다. 제네릭이란 JDK 1.5부터 도입한 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. 이렇게 컴파일 시에 미리 타입 검사(type check)를 수행하면 다음과
Java에서는 문자열을 정수로 변화하기 위해서는 두가지 방법이 있다. >1. Interger.valueOf() Interger.parseInt() ✏️ Interger.parseInt() >문자열을 기본형 정수(primitive type int)로 리턴 문자열이 유
문자열을 int로 바꾸기\_문자열(string)을 정수(integer)로 바꾸는 법\_JTI이 포스팅에서 try-catch문을 통해 Interger.paraseInt() 와 Interger.valueOf() 가 어떻게 사용되는지 알아보았다.먼저 입력된 문자열이 숫자인지
💡 java.lang.String 클래스 > ✔️ 문자배열 : 문자열을 다루기 위한 클래스 데이터(char[]) + 메서드(문자열 관련) C언어에서는 문자열을 char형 배열로 표현하지만, 자바에서는 문자열을 위한 String이라는 클래스를 별도로 제공한다.
✔️ StringBuilder는 동기화되어 있다.❗️ 동기화: 멀티 쓰레드에 안전하게 하는 것 (thread - safe): 데이터 보호밑에 쓰레드의 내용은 참고만 하자. 나중에 자세히 공부하는 걸로!쓰레드는 2가지로 분류된다.싱글 쓰레드: 한번에 1개 작업 (지금까지
String 처럼 문자형 배열(char\[])을 내부적으로 가지고 있다.String과 달리 내용을 변경할 수 있다. append()(https://velog.io/@jipark09/Java-StringBuffer!\[](https://velog.vel
✔️ 배열을 다루기 편리한 메서드(static) 제공✔️ toString()새로운 배열을 생성해서 반환한다.✔️ copyOf()✔️ copyOfRange()✔️ fill()✔️ setAll()✔️ sort()✔️ binarySearch() : 이진탐색❗️ 이진탐색은 정
💡 Collection framework > ✔️ Collection framework : 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식 : 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공 (저장, 삭제, 검색, 정렬 기능) : java.u
ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일하다.ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어 있다.List 인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.데이터의 저장공간으로 배열을 사용한다.
💡HashSet 💡ArrayList
💡Stack 클래스 >✔️ Stack 클래스 List 컬렉션 클래스의 Vector 클래스를 상속받아, 전형적인 스택 메모리 구조의 클래스를 제공 스택 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 후입선출(LIFO)의 시멘틱을 따르는 자료 구조이다. 즉,
✔️ 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스Collection의 List / Set / Map 등등 구조가 다 다르다.하지만 Iterator 와 Enumeration 은 이들의 구조가 어떻든 간에 표준화하며 확인하고 읽어온다.읽어 올 요소가 남아있는지
✔️ 순서, 중복이 없다.Set 인터페이스를 구현한 대표적인 Collection 클래스순서를 유지하려면, LinkedHashSet 클래스를 사용하면 된다.HashSet 클래스는 Set 컬렉션 클래스에서 가장 많이 사용되는 클래스 중 하나이다.JDK 1.2부터 제공된 H
💡 HashMap > ✔️ Map 인터페이스를 구현한 대표적인 Collection 클래스. ✔️ 데이터를 키와 값의 쌍으로 저장한다. ✔️ HashMap(동기화 X)은 Hashtable(동기화 O)의 신버전이다. 순서를 유지하려면, LinkedHashMap 클래
자바에서 GUI(Graphic User Interface)를 구현하기 위해 JDK에서 기본적으로 제공하는 개발 툴킷단일-스레드 프로그래밍 모델을 따른다.❗️ MVC 패턴 : Model-View-ControllerModel : 데이터를 가져와 어떤 작업을 처리하거나 처리
지금까지 JFrame 창만 만드는 작업만 해보았다.이제 직접 속을 구현해서 동작하도록 만들어보자.✔️ ActionListenerinterface로 제공한다.이벤트가 발생할 때 어떤 기능을 쓸지 담당한다.아무구현도 되지 않는 창이다.plus 를 누르면 count되는 기능
💡ItemListener ItemSelectable 항목 이벤트는 인터페이스를 구현하는 구성 요소에 의해 시작된다. 일반적으로 ItemSelectable 구성 요소는 하나 이상의 항목에 대해 켜짐/꺼짐 상태를 유지한다. 항목 이벤트를 발생시키는 Swing 구성
💡 Border swing 구성요소의 가장자리 주위에 테두리를 렌더링할 수 있는 개체를 설명하는 인터페이스이다. > ✏️ 사용 방법 총 정리 하기 전에 기본 세팅을 미리 깔고 정리하겠다! > 임의의 getLabel() 메서드를 만들어주었다. 생성자에도 미리
💡 java.io > ❗️ I/O : Input과 OutPut의 약자로 입력과 출력을 의미함. 컴퓨터 내부 또는 외부의 프로그램간의 데이터를 주고 받는 것. 키보드로부터 데이터 입력 / System.out.println() 을 이용해서 화면 출력 등 💡 str
💡 InputStream의 메서드 InputStream(바이트기반 입력스트림의 최고 조상) 스트림의 종류에 따라서 mark() 와 reset() 을 사용하여 이미 읽은 데이터를 되돌려서 다시 읽을 수 있다. 💡 OutputStream의 메서드 OutputStr
write(buf, 0, count)buf배열안에 시작인덱스(0)부터 갯수만큼 다 읽어라는 뜻.byte데이터는 어마어마하게 큰 파일이 많다.그래서 buffer를 이용해서 관리한다.
✔️ 모든 바이트기반 보조스트림의 최고조상보조스트림은 자체적으로 입출력을 수행할 수 없다.상속을 통해 FilterInputStream / FilterOutputStream 의 read() 와 write() 를 원하는 기능대로 오버라이딩해야 한다.❗️ FilterIn
📁 File 클래스 > ❗️ File : File인스턴스는 파일 일수도 있고 디렉토리일 수 도 있다. File Directory java.io 패키지는 기존의 파일이나 디렉토리에 대한 제어를 하는 데 사용하는 File 클래스를 제공한다. 📎 File 생성자
✔️ file.length()✔️ file.getPath()✔️ file.getParent()✔️ file.getName()✔️ file.lastModified()lastModified 메소드를 호출 해, 일자의 long를 취득한다. ❗️ long은 출력에 형식화되고
✔️ 자바 기본 자료형 데이터를 입/출력이 전에 사용했던 FileReader, FileWriter, FileInputStream, FileOutputStream 은 직접적으로 파일을 문자 / 바이트 형식으로 읽고 쓰는 클래스였다.하지만 문자나 바이트형식으로도 읽고 쓸
✔️ Hashtable 을 상속받아 구현한 것으로, Properties(String, String) 형태로 저장한다. String 형태이기 때문에 get() 과 set(), put() 을 제공한다."Key = Value" 형태로 된 "파일이름.properties" 파일
메모리의 속도CPU 캐시 메모리디스크네트워크컨넥션❗️ 순차적 실행이 병렬실행 보다 빠른 경우도 있다. 동시 실행에 따르는 오버헤드가 없고, 단일 CPU 알고리즘은 하드웨어 작업에 더 친화적일 수 있기 때문이다.✔️ 단순히 실행중인 프로그램즉, 사용자가 작성한 프로그램이
💡 멀티 스레드와 멀티 프로세스 > ✔️ 멀티 스레드 : 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행 각 스레드가 자신이 속한 프로세스의 메모리를 공유 > ✔️ 멀티 프로세스 : 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행 각 프로세
💡 Thread Synchronization > ✔️ _ Synchronization_ : 여러 스레드가 한 리소스를 사용하려 할 때 사용하려는 스레드 하나를 제외한 나머지 스레드들은 리소스를 사용하지 못하도록 막는 것 ✏️ 동기화 전 if문을 통과하며 -500
스레드의 실행은 제어(스케줄링)할 수 있는 메서드가 제공된다. 이 들을 활용해서 보다 효율적인 프로그램을 작성할 수 있다.❗️ resume(), stop(), suspend()는 스레드를 교착상태로 만들기 쉽기 때문에 depraecated 되었다.✔️ 지정된 시간동안