Programming Languages 9

[Java] - 오토박싱, 언박싱 (Autoboxing and Unboxing)

Autoboxing 자바로 개발을 하다보면 int와 같은 primitive type이 클래스가 아니기 때문에 불편을 겪은적이 있다. 예를 들어, 정수로 되어 있는 리스트를 만들어 본다고 하자 public class Main { public static void main(String[] args) { ArrayList intArrayList = new ArrayList(); } 이렇게 정수로 된 ArrayList를 만드려고 하면 에러가 나온다. ArrayList에 들어갈수 있는건 클래스여야 하기 때문이다.. 물론, 이런 상황에 대한 해법으로 int를 클래스로 직접 만들수도 있다. import java.util.ArrayList; class IntClass { private int myValue; publi..

[Java] 배열을 복사하는 방법 (Shallow Copy, Deep Copy)

Shallow Copy (얕은 복사) 배열을 복사하는 방법에는 Shallow Copy와 Deep Copy가 있는데 먼저 Shallow Copy에 대해서 알아 보았다. 얕은 복사라고도 불리며 원본 객체와 복사한 객체는 메모리에서 같은 배열을 가르키게 된다 복사본을 변경할 경우 당연히 원본도 변경 얕은 복사를 하는 방법 public class Array_Copy{ public static void main(String[] args) { int[] original = { 2, 5, 10, 15, 1557, 31, 488 }; int[] copied = original; } } Deep Copy (깊은 복사) 원본의 전체 배열을 복사해서 메모리의 다른 위치에 지정한 후 복사한 객체에 할당한다. 원본 객체와 복사..

[Java] - 쓰레드(Thread)의 사용

쓰레드란 무엇인가? 쓰레드가 무엇인지에 대해서 검색하면 프로세스 내에서 실행되는 흐름의 단위라고 나온다. 기본적으로 하나의 프로세스 당 최소 한개의 쓰레드를 가진다. 즉, 이 말은 하나의 프로세스 내에 여러 쓰레드를 가질수도 있다는 것을 뜻한다. 자바에서 쓰레드를 구현하는 방법에는 두가지가 있습니다. Thread Runnable 둘의 차이는 Thread를 클래스라서 extends를 이용해서 상속 받아야 되지만 Runnable은 인터페이스 이기 때문에 implements를 이용해서 삭속 받는다는 것이다. Thread 클래스를 상속 받아서 구현하면 다른 클래스를 상속 받을수 없지만 Runnable 인터페이스를 상속 받으면 동시에 다른 클래스도 상속 받을수 있다는 장점이 있다. 둘 모두 예시를 통해 확인해보자..

[Java] - 싱글턴 패턴 (Singleton Pattern)

싱글턴 패턴이란? 하나의 인스턴스만 가진 클래스를 정의하고, 해당 인스턴스를 다른 클래스에서 사용할수 있게 하는 디자인 패턴을 뜻한다. 즉, 클래스의 인스턴스는 한번만 생성되어야 하며, 생성된 객체는 모든 다른 클래스에서 사용될수 있다. 찾아보니 Spring framework에서 기본 객체 운영방식이 싱글턴 패턴이라고 하네요. 자바를 공부하면서 꼭 알아둬야 되는 디자인 패턴 같습니다. 언제 사용하는가 시스템 상에서 단 한번 객체를 생성하고 여러 곳에서 공유해 사용하고자 할 때 적용방법 생성자의 접근 제어자를 private으로 명시해 외부에서 객체 생성하는 것을 막는다. private static 멤버변수 차원에서 클래스 로딩시점에 자신의 생성자를 이용해 객체를 생성하고 주소값을 저장한다. public s..

[Java] - JDBC를 사용하여 데이터베이스 연결 (오라클db)

JDBC ( Java Database Connectivity ) JDBC는 자바에서 데이터베이스에 접속할수 있도록 도와주는 API 입니다. 자바에서 데이터베이스에 접속하기 위해선 컴퓨터에 데이터를 관리하는 소프트웨어인 DBMS(Database Management System)이 설치되어 있어야 합니다. 예를 들면, mariadb, 오라클db, mysql 같은 것들이 DBMS 프로그램들입니다. 참고로 제 컴퓨터에는 오라클db가 설치되어 있습니다. 만약 오라클db가 설치되어 있지 않다면, 아래 링크에서 다운 받으시면 됩니다. * 다운 받기 위해서는 오라클에 회원가입이 필요합니다. https://www.oracle.com/database/technologies/xe-downloads.html ㅇ JDBC (..

[자바/Java] - 문자열 (String)

문자열 (String) 자바에서 문자열을 나타낼때 사용하는 객체는 String 입니다. String을 사용하여 문자열을 사용하고 싶다면, String str = "Hello World"; 이렇게 사용하시면 됩니다. String 객체를 사용하여 "Hello World"라는 문자열을 str에 할당한 코드 입니다. Method String에서 자주 사용되는 함수들을 알아보도록 하겠습니다. startsWith()는 문자열이 지정한 문자로 시작하는지 확인하는 함수 입니다. 아래의 경우 만약 str이 "M"으로 시작한다면 true를 반환하고 그렇지 않다면 false를 반환 합니다. String str = "Melon"; boolean startswith = str.startsWith("M"); System.out...

[자바/Java] 오버라이딩 (Overriding)

오늘은 자바의 오버라이딩에 대해서 공부 해봤습니다. 오버라이딩이란? 조상 클래스로부터 상속 받은 메소드의 내용을 자식 클래스에서 변경하는걸 뜻 합니다. 오버라이딩의 조건 오버라이딩 하는 메소드의 이름이 같아야 한다. 메소드의 매개변수(parameter)가 같아야 한다. 메소드의 리턴 타입도 같아야 한다. 그럼 어떤 경우에 오버라이딩이 사용 되는지 알아 보도록 하겠습니다. Point라는 클래스인데요. 일직선에서 한 점을 뜻하는 클래스 입니다. 여기서 getLocation()이라는 메소드는 일직선에서 점의 위치를 x값으로 나타내고 있는데요. 이 메소드를 오버라이딩 해보겠습니다. 위의 Point 클래스를 상속 받은 Point2D라는 자식 클래스 입니다. Point 클래스가 일직선에서 위치를 나타내는 1차원 좌..

[자바/Java] 오버로딩 (Overloading)

오늘은 오버로딩에 대해 공부해봤습니다. 오버로딩(Overloading)이란? - 보통 하나의 메소드 이름에 하나의 기능만을 구현해야 하는데, 하나의 메소드 이름으로 여러 기능을 구현하고 싶을때 사용합니다. 오버로딩의 조건 메소드 이름이 같아야 한다. 매개변수(parameter)의 개수 또는 타입이 달라야 한다. 오버로딩의 예시 Math 클래스 안에 add라는 메소드를 만들었습니다. 메소드 이름은 같지만 parameter의 개수를 다르게 해서 이 add 메소드는 2개의 숫자를 더하는데에 사용할수도 있고 3개의 숫자를 더하는데에 사용할수도 있게 되었습니다. 여기 메소드 오버로딩이 잘 동작 되는지 확인하기 위해 테스트 코드를 준비 했습니다. 처음 add는 1 과 2 를 더한 값을 리턴하며 두번째 add는 1,..

[Java] switch 문 (case, default )

오늘은 자바 switch 문에 대해서 알아 보겠습니다. 자바의 switch문은 여러 가지 경우의 수 중에 한개를 선택해야 될때 유용하게 사용 됩니다. switch 문에 들어간 값은 각각의 case에 할당된 값들과 비교 되어진다. 일치하는 값을 찾으면 해당 case를 실행한다. break와 default는 필수가 아닌 선택이다. 예를 들면, 달력에서 입력된 월의 마지막 날이 몇일인지 구하는 함수를 작성해야 하는 경우를 보겠습니다. 1월, 3월, 5월, 7월, 8월, 10월, 12일은 마지막 날이 31일 입니다. 4월, 6월, 9월, 11월은 마지막 날이 30일 입니다. 2월은 마지막 날이 28일 입니다. 코드로 구현한다면, public class DateService { public void printLa..