Language/JAVA (19) 썸네일형 리스트형 [JAVA] Thread(스레드)를 활용한 간단한 Counter(카운터) 프로그램 만들기 with IntelliJ Thread 스레드를 활용한 간단한 카운터 프로그램을 만들어보겠습니다. 💡확인하기 OS : Windows 11 JDK : 17 IDE : IntelliJ Thread를 사용하여 초 단위로 카운터 프로그램을 작성해 봅시다. 요구사항 카운팅 할 시간(초 단위)를 사용자에게 입력받습니다. 사용자가 시간을 입력하지 않으면 기본값을 할당합니다. Thread를 확장한 클래스를 작성합니다. main에서 Thread 서브 클래스의 인스턴스를 생성하고 호출하는 방식으로 실행합니다. 👇👇 전체 소스는 하단에 👇👇 구현하기 1. Thread 서브 클래스 작성 Thread를 확장한 클래스를 작성합니다. class CounterThread extends Thread { } 카운팅할 초를 저장할 정수형 멤버변수를 생성합니다. i.. [JAVA] Thread(스레드)와 State(상태) 자바의 Thread(스레드)에 대해 알아봅니다. Thread 스레드 프로그래밍 언어로 작성된 프로그램을 실행하는 것을 프로세스라고 하는데요. 이런 프로세스들은 보통 하나의 처리 경로 (왼쪽 > 오른쪽, 위 > 아래)에 따라 실행됩니다. 하나의 프로세스에서 여러 job을 한 번에 또는 동시에 실행하고 싶은 경우 스레드를 사용합니다. A thread is a thread of execution in a program. JVM allows an application to have multiple thread of execution running concurrently. [출처] https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html 자바 프로그램에서 .. [JAVA] Memory Structure(메모리 구조)와 Wrapper Class 자바의 Memory Structure(메모리 구조)와 Wrapper Class에 대해 알아봅니다. Memory Structure 메모리 구조 static 프로그램이 시작될 때 메모리가 할당되어 프로그램이 종료될 때까지 남아있는 영역입니다. 전역변수를 static으로 많이 사용할 경우, 메모리 부족 현상이 발생할 수 있습니다. stack 지역변수(파라미터, 블록 등)의 데이터들이 저장되는 공간입니다. 특정 메소드가 호출될 때 메모리가 할당되어 메소드가 종료되면 메모리가 반환됩니다. heap 참조형 데이터 타입(객체, 배열 등)들은 heap 영역에 저장됩니다. new 키워드로 객체 생성시 실제 데이터가 저장되는 heap 영역의 주소(참조값, Reference Value)를 반환합니다. 참조형 변수들은 hea.. [JAVA] 간단한 console 프로젝트 정수 계산기 프로그램 만들기 with IntelliJ 자바 간단한 프로젝트 console로 동작하는 정수 계산기 프로그램을 만들어보겠습니다. 💡확인하기 OS : Windows 11 JDK : 17 IDE : IntelliJ 정수 2개와 연산자를 입력받아 계산 결과를 출력해 주는 프로그램을 작성해 봅시다. 요구사항 정수 2개와 연산자를 사용자에게 입력받습니다. 연산자는 +(덧셈), -(뺄셈), *(곱셈), /(나눗셈)만 입력받아야 합니다. 정수나 연산자에 해당하는 문자가 아닌 다른 문자를 입력하면 올바른 값을 입력받을 때까지 반복해서 입력받습니다. 사용자가 끝내길 원할 때까지 전체 프로그램을 반복합니다. 👇👇 전체 소스는 하단에서 👇👇 구현하기 입력받는 데이터를 저장할 변수를 생성합니다. int num1, num2;// 연산할 정수 2개 char op;// .. [JAVA] method Overloading vs. Overriding(메소드 오버로딩 vs. 오버라이딩) 자바 메소드 Method의 오버로딩 Overloading과 오버라이딩 Overriding에 대해 알아봅니다. ❗오버로딩과 오버라이딩은 전혀 다른 의미지만 명칭이 비슷해서 혼동하기 쉬우니 유의! 메소드 오버로딩 Overloading 한 클래스 안에서 메소드명이 같은 메소드를 2개 이상 정의할 경우, 메소드 오버로딩(중복정의)이라고 합니다. 오버로딩을 통해 객체지향의 다형성의 특징을 구현합니다. 메소드명을 같게 하면 시스템은 어떻게 구분할까요? JVM은 같은 이름의 메소드가 여러개 정의되어 있으면 메소드의 파라미터 개수와 파라미터의 데이터 타입으로 구분하여 각각 다른 메소드로 인식합니다. 메소드 사용 범위를 제한하는 접근 제한과 반환 데이터 타입은 고려하지 않습니다. 파라미터만 다른 사실상 같은 내부 로직을.. [JAVA] Class Inheritance 클래스 상속 자바의 클래스 상속 Class Inheritance에 대해 알아봅니다. 상속 Inheritance 자바 클래스는 객체지향의 특성인 상속을 지원합니다. 어떤 클래스의 요소들을 재사용하고 싶을 경우, 클래스를 상속받아 확장하여 구현합니다. 두 클래스는 부모-자식/슈퍼-서브 관계가 성립됩니다. 상속받을(target) 클래스 정의 시 클래스명 작성 후 extends 키워드로 상속할(source) 클래스명을 작성합니다. 자식 클래스는 부모 클래스에서 접근 제한 private로 선언된 요소(멤버변수, 멤버함수)를 제외하고 모두 상속받습니다. 자식 클래스는 부모 클래스에서 상속받은 요소들을 자기 요소처럼 사용할 수 있습니다. class Father { String name; int birth; } // Child 클.. [JAVA] 변수 유효 범위, this와 접근 제어자(public, protected, private) 변수의 유효 범위, this 키워드와 접근 제어자에 대해 알아봅니다. 변수의 유효 범위 특정 변수를 사용할 수 있는 범위를 변수의 유효 범위라고 합니다. 블럭 내에서 선언한 변수는 블럭 안에서만 사용 가능하므로 유효 범위는 블럭이고, 함수 내에서 선언한 변수는 함수 내부에서만 사용 가능하므로 유효 범위는 함수 내부입니다. class Person { void calc() { int sum = 0;// sum 유효범위 : calc() 메소드 for (int i = 0; i < 5; i += 1) {// i 유효범위 : for 블럭 // loop } } } 클래스의 멤버변수는 클래스에서 전역으로 선언되었기에 해당 클래스 내에서 사용 가능하고, 멤버함수가 속한 클래스에 멤버변수가 있다면, 멤버함수에서 클래스의 .. [JAVA] 클래스 Class와 생성자 Constructor 자바의 클래스 구성 Class Structure 과 생성자 Constructor 에 대해 알아봅니다. 클래스 구성 Class Structure 클래스는 변수(상태, 속성) - 멤버변수 기능(메소드) - 멤버함수 인스턴스 생성시 호출되는 생성자 를 가질 수 있습니다. class Person { String name;// 멤버변수 void sayHello() {// 멤버함수 System.out.println("Helloooo"); } } 클래스 생성 규칙 클래스명의 첫 문자는 대문자로 정의합니다. 각 클래스는 각 개별 파일로 생성합니다. // Person.java class Person { String name; } // Car.java class Car { String modelNo; } 생성자 Const.. [JAVA] 객체지향 설계 5대 원칙 - SOLID 객체지향 설계 5대 원칙 SOLID에 대해 알아봅니다. 객체지향 설계 5대 원칙 SOLID 좋은 코드를 설계하려면 이러한 원칙들이 지켜지는 것이 좋다. 단일 책임 원칙 SRP : Single Responsibility Principle 클래스나 함수는 단 하나의 책임(기능)만을 가져야 합니다. 클래스나 함수가 거대해지면 분리시킬 필요가 있습니다. 책임 영역이 확실해지면 연쇄작용에서 자유롭습니다. 적용방식 ▶ 리팩토링 Refactoring 프로그램의 기능이나 동작(method) 변경 없이 내부 구조를 개선하는 방법 ▶ 여러 원인에 의한 변경 Divergent Change extra class를 통해 혼재된 각 책임을 개별 클래스로 분리하여 클래스 간의 복잡도를 줄이는 방법 ▶ 산탄총 수술 Shotgun S.. [JAVA] 객체지향프로그래밍 OOP 자바의 객체지향프로그래밍(OOP : Object Oriented Programming)에 대해 알아봅니다. 객체지향프로그래밍 OOP : Object Oriented Programming 현실에 존재하는 개체를 기준으로 프로그램의 구조를 모델링하는 것입니다. 프로그램을 단순히 명령어들의 집합이 아니라 독립된 묶음인 객체들의 집합으로 바라보는 것이죠. 특징 다형성 Polymorphoism 동일한 메소드명을 가진 메소드를 2개 이상 정의할 수 있습니다. 같은 동작을 하는 메소드인데 파라미터나 반환값의 데이터타입이 다른 경우, 메소드명을 동일하게 정의하여 가독성을 높입니다. 상속 Inheritance 이미 정의된 클래스의 요소를 재사용하고 싶으면, 해당 클래스를 상속받아 확장하여 새로운 클래스를 정의할 수 있습.. [JAVA] 메소드(method) 정의 및 사용하기 자바의 메소드(method) 에 대해 알아봅니다. 메소드 Method, Function 같은 로직의 코드를 재사용합니다. 실행하려 하는 코드들을 묶음으로 정의하고 메소드명으로 호출하여 실행시킵니다. 메소드들은 특정 기능을 가지고 있습니다. 모든 메소드는 호출시 특정 값을 파라미터로 전달받을 수 있고, 동작 후 결과값을 반환할 수 있습니다. 결과값을 반환하지 않는 메소드는 반환 데이터 타입을 void 키워드로 정의합니다. 자바 클래스 내에서 구현한 함수는 멤버함수라고도 부릅니다. 정의하기 반환데이터타입 메소드명(파라미터) { // 내부 코드 } 파라미터, 반환값 모두 없는 메소드 void printHello() { System.out.println("Helloooooo"); } 파라미터만 있는 메소드 vo.. [JAVA] 배열(array), 다차원배열(nested array)과 특징 자바의 배열(array), 다차원 배열(nested array)과 특징에 대해 알아봅니다. 배열 Array 연관된 데이터들을 모아 관리할 때 사용합니다. 여러 데이터들을 묶음으로 저장하기 위한 것이죠. 하나의 변수에 데이터 타입이 같은 여러 값들을 저장할 수 있습니다. 생성 새로운 배열 변수는 메모리 할당 연산인 new 키워드를 사용하여 생성합니다. 배열에 저장된 각 데이터들은 배열의 요소입니다. 한 배열에 저장할 수 있는 데이터 수를 배열의 크기, 길이 length 라고 하는데요. 배열은 선언시 크기가 정의되고, 정해진 크기는 변경할 수 없습니다. 데이터타입[] 변수명 = new 데이터타입[크기]; int[] data = new int[3];// 정수형 데이터 3개를 저장할 배열 공간 생성하기 int .. 이전 1 2 다음