Class는 변수와 함수를 가지고있는 한 구조체이다. 이것은 하나의 그냥 구조체인거지 이 Class를 사용하려면 컴퓨터상에서는 메모리에 올려야 한다. Class를 사용할수 있게 메모리에 올리면 그것은 Instance가 되는것이다. 예를 들어 Human이라는 하나의 클래스를 정의했다 치자. Human Class에는 변수와 함수가 정의 되어있을 것이고 이것을 사용하기 위해 Human man = new Human() 을 했을 것이다. 그러면 Human은 Class이고 man은 Instance이다. man은 new Human() 이라는 메모리에 올려진 하나의 클래스를 담은 변수이다. 이것은 곧 Instance이다.
제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 컬렉션을 사용할 때 제네릭을 특히 많이 사용한다. 하지만 파라미터로 컬렉션을 받을 때 제네릭이 Stirng이라면 String 제네릭을 가진 컬렉션만이 파라미터로 받아진다. public class Test { public static void main(String[] args) { List list1 = new ArrayList(); list1.add("1"); list1.add("1"); list1.add("1"); list1.add("1"); method1(list1); List list2 = new ArrayList(); list2.add(1); list2.add(1); list2.add(1); list..
Object 클래스 클래스를 선언할 때 extneds 키워드로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속하게 된다. 따라서 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다. Object는 자바의 최상위 부모 클래스에 해당한다. 따라서 Object에 있는 메소드를 사용할 수 있는 것이다. 다음 대표적인 객체비교 equals() 메소드를 보자 객체 비교(equals()) equals() 메소드의 매개 타입은 Object인데, 이것은 모든 객체가 매개값으로 대입될 수있음을 말한다. 그 이유는 Object가 최상위 타입이므로 모든 객체는 Object 타입으로 자동 타입 변환될 수 있기 때문이다. 기본적으로 equals() 메소드는 비교 연산자인 =..
스레드의 이름스레드는 자신의 이름을 가지고 있따. 스레드의 이름으로 디버깅할 때 어떤 스레드가 어떤 작업을 하는지 조사할 목적으로 가끔 사용된다. 메인 스레드는 "main"이라는 이름을 가지고 있고, 우리가 직접 생성한 스레드는 자동적으로 "Thread-n"이라는 이름으로 설정된다. Thread-n 대신 다른 이름으로 설정하고 싶다면 Thread 클래스의 setName() 메소드로 변경하면 된다. public class ThreadNameExample { public static void main(String[] args) { Thread mainThread = Thread.currentThread(); System.out.println("프로그램 시작 스레드 이름: " + mainThread.getNa..
프로세스(process)와 스레드(thread) 프로세스란 간단히 말해서 '실행 중인 프로그램'이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 드리고 스레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 즉 프로세스는 CPU, 메모리 등의 자원과 스레드로 구성되어있고, 프로세스에 할당된 자원을 가지고 실제로 작업을 수행하는건 스레드이다. 그리고 프로세스에 자원을 할당해주는건 운영체제이다. 그래서 모든 프로세스에는 최소한 하나 이상의 스레드가 존재하며, 둘 이상의 스레드를 가진 프로세스를 '멀티스레드 프로세스(multi-threaded process..
Scanner 클래스 java.util 패키지의 Scanner 클래스를 이용하면 콘솔로부터 기본 타입의 값을 바로 읽을 수 있다. Scanner 객체를 생성하려면 다음과 같이 생성자에 System.in 매개값을 주면 된다. Scanner scanner = new Scanner(System.in) Scanner 메소드들은 콘솔에서 데이터를 입력한 후 Enter키를 누르면 동작하도록 되어 있다. 다음 예제를 보자 public class ScannerExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("문자열입력: "); String str = scanner.ne..
컬렉션 프레임워크(Collection Framework)컬렉션 프레임웍이란 데이터를 저장하는 클래스들을 표준화한 설계를 뜻한다. 컬렉션은 다수의 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다. 애플리케이션을 개발하다 보면 다수의 객체를 저장해 두고 필요할 때마다 꺼내서 사용하는 경우가 많다. 만약 10개의 Product 객체를 저장해 두고, 필요할 때마다 하나씩 꺼내서 이용한다고 가정할때 배열을 사용할 것이다 배열은 쉽게 생성하고 사용할 수 있지만, 저장할 수 있는 객체 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 객체를 저장하기에는 문제가 있다. 물론 배열의 길이를 크게 생성하면 되지만, 이것은 좋은 방법이 될 수 없다. 배열의 또 다른 문제점은 객체를 삭제했을 때..
접근제한자접근 제한자는 pulbic, procted, default, private와 같이 네 가지 종류가 있다. 이중에서 protected는 상속과 관련이 있다. public < protected < default < private 접근 제한이 강화 접근 제한 적용할 내용 접근할 수 없는 클래스 public 클래스, 필드, 생성자, 메소드 없음 protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스 defalut 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스 private 필드, 생성자, 메소드 모든 외부 클래스 protected는 public과 default 접근 제한의 중간쯤에 해당한다. 같은 패키지에서는 default와 같이 접근 제한이 없지만 다른..
패키지(package)패키지란, 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다. 지금까지는 단순히 클래스 이름으로만 클래스를 구분 했지만 클래스의 실제 이름(full name)은 패키지명을 포함한 것이다. 예를 들면 String클래스의 패키지명을 포함한 이름은 java.lang.String이다. 즉, java.lang패키지에 속한 String클래스라는 의미이다. 그래서 같은 이름의 클래스 일..
예외 처리 코드프로그램에서 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 한다. 자바 컴파일러는 소스 파일을 컴파일할 때 일반 예외가 발생할 가능성이 있는 코드를 발견하면 컴파일 오류를 발생시켜 개발자로 하여금 강제적으로 예외 처리 코드를 작성하도록 요구한다. 그러나 실행 예외는 컴파일러가 체크해주지 않기 떄문에 예외 처리 코드를 개발자의 경험을 바탕으로 작성해야 한다. 예외 처리 코드는 try-catch-finally 블록을 이용한다. try-catch-finally 블록은 생성자 내부와 메소드 내부에서 작성되어 일반 예외와 실행 예외가 발생할 경우 예외 처리를 할 수 있도록 해준다. try-catch-finally 블록 작성..
프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 경ㄹ과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 이를 발생시점에 따라 컴파일 에러(compile-time error)와 런타임 에러(runtime error)로 나눌 수 있는데 컴파일 시에 발생하는 에러는 컴파일 할 때 발생하는 에러이고 프로그램의 실행도중에 발생하는 에러를 런타임 에러라고 한다. 이 외에도 논리적 에러(logical error)가 있는데, 컴파일도 잘되고 실행도 잘되지만 의도한 것과 다르게 동작하는 것을 말한다. 자바 에러(Error)와 예외(Exception) 자바에서는 실행 시 발생할 수 있는 프로그램 오류를 에러와 예이 두 가지로 구분하였다. 컴퓨터 하드웨어..
C언어 콘솔 응용 프로젝트 생성 방법 Visual Stdio 2017 community C언어만 설치한 상태에서 프로젝트 생성을 하였는데 C언어 공부를 하기 위해 어떻게 프로젝트 생성을 해야하는지 많이 해맸다. 위에서 보듯이 windows 데스크톱 메뉴에서 windows 데스크톱 마법사를 선택하고 확인 을 누른다. 그러면 이 창이 뜨는데 빈 프로젝트를 선택하고 SDL 검사는 체크 해제해주는게 좋다. 이걸 체크하면 빌드시 scanf 를 사용할때 뒤에 _s를 붙여서 사용하라고 권장한다. 귀찮으므로 왠만하면 SDL을 체크해제 하자 확인을 누르면 프로젝트 생성이 완료된다. 오른쪽 프로젝트 메뉴에서 소스파일 우클릭후 -> 추가 -> 새 항목을 선택한다. 이름은 확장자가 기본으로 cpp로 되있을텐데 c를 공부하기 ..