목록개발 (194)
파파비의 블로그
쓰레드는 끈이라는 이야기이다. 코드가 존재하면 해당 코드는 쭉 처음부터 끝까지 실행된다. 하나의 끈처럼 말이다. 그런데 예를 들어 무한루프가 있다고 가정해보자. 해당 코드는 무한루프에 걸리면 계속 삥글삥글 돌 것이다. 더 이상 내려가지 않고 말이다. 만약 무한루프를 몇 개 따로 돌리면서 진행하는 프로그램을 만들고 싶다면 어떻게 해야할까? 쓰레드라는 개념을 알고 활용하면 된다. 쓰레드는 프로세스와 비슷하지만 다르다. 프로세스는 실행되면 하나의 일정 자원과 제어를 할 수 있게 되는데, 프로세스 끼리는 자원을 공유하지 않는다. 쓰레드는 프로세스 내에서 자원을 공유하면서 제어는 나눠서 하는 구조이다. 더 깊에 알고 싶으면 OS쪽을 공부하면 된다. (나도 아직 공부중이라 깊게는 잘 모른다..) 아무튼 쓰레드에 대..
인터페이스는 추상메소드만으로 이루어져 있다. 하지만 class는 아니다. 추상메소드와 모양은 비슷하다고 느껴질 수 있다. 인터페이스는 추상메소드로만 이루어져 있지만, 굳이 메소드에 abstract를 쓸 필요는 없다. 자동으로 abstract로 인식된다. 인터페이스는 변수도 넣을 수 있다. 이때 역시 자동으로 final static으로 인식된다. 인터페이스는 보통 규격을 만들 때 사용되고, 다른말로 말하면 참조변수를 통일시킬 때 사용된다. 예를 들어서 OS에서 어떤 이벤트가 발생했을 때, 어떤 객체의 onClick 함수를 실행한다고 해보자. 인터페이스를 활용하면 이벤트가 발생했을 때 마다 다양한 함수를 활용할 수 있다. 호출되는 함수는 같지만, 내용이 매번 다른... 이것이 인터페이스의 매력이다. 말로만 ..
추상클래스라는 것은 추상메소드가 '포함'된 클래스를 의미한다. 추상클래스에는 추상메소드'만' 있는 것은 아니다. 그렇다면 추상메소드라는 것은 무엇일까? 추상메소드는 이름만 있고, 구현이 안 된 메소드이다. 구현이 됐다 안됐다의 차이는 '블록'에 있다. public void function(){ } 해당 코드는 구현이 된 메소드이다. 비록 아무 내용도 없지만 말이다. 이유는 '블록'이 설정되어 있기 때문이다. public void function(); 이 것이 추상메소드이다. 구현이되지 않은 메소드이기 때문이다. 블록대신 ';'로 처리되어 있다. 실제로 이렇게 쓰면 오류가 날 것이다. 추상메소드는 abstract라는 키워드를 붙여줘야 한다. 그래서 제대로 된 것은 abstract public void fu..
보통 클래스를 만들 때는 새로 파일을 만들어서 거기에 class 내용을 넣는다. 이런 과정이 어떻게 보면 불편할 수도 있다. 특히 새로 만들어서 한 번만 쓸 경우에는 굳이 파일까지 만들어서 하는 과정이 많이 번거롭게 느껴질 수 있다. 그럴 때는 중첩클래스의 개념을 한 번 활용해 보는게 어떨까? 중첩클래스에는 4가지가 대표적으로 있다. 1. 가장 일반적인 형태로 class안에 class를 만드는 일반 중첩 클래스 2. class안에 class를 만드는데, static class로 만드는 static 중첩 클래스 3. 메소드 안에 클래스를 만들어서 메소드 안에서만 쓰는 메소드 중첩 클래스 4. 한 번만 오버로딩해서 쓸, 익명중첩클래스가 있다. 디테일한 내용을 한 번 알아보도록 하자. 1) 일반 중첩 클래스 ..
c#에서 모든 배열들은 System.Array를 상속 받았다. 그래서 Array class의 메소드나 프로퍼티를 공유하는데 쓸모있는 것들을 파악해보자 Length (인스턴스 프로퍼티) Sort (정적 메소드) Copy (정적 메소드) System.Array는 ValueType을 상속하지 않았다. 한마디로 참조형 타입이라는 것!
c#에서 가장 상위의 class는 오브젝트 클래스이다. 1. 클래스를 만들 때 아무런 상속 표시를 하지 않는다면 자동으로 object class를 상속하게 된다. 2. object는 참조형 class이다. 그러나 하위에 valuetype이라는 class를 만들고 이를 상속하는 class들은 전부 값형식이다. 3. object는 c#의 키워드이다. 닷넷프레임워크 형식은 System.Object이다. 그런데 보통 System 네임스페이스를 사용하는 경우가 많아 Object만 쳐도 되는데, 그래서 object랑 Object랑 뭐가 다른지 궁금하게 느껴졌을 수도 있는데, 사실은 둘이 같다. 4. object는 4개의 함수가 구현되어있다. - ToString, GetType, GetHashCode, Equals ..
형변환에 대해서 저번 글에 적어둔 내용을 보면 명시적 형변환을 할 경우, 잘 못 했을 경우 컴파일 단계가 아닌 런타임에서 에러를 발생할 수도 있다. 이것은 프로그래밍 과정에서 큰 비용을 가져온다. 그래서 그 해결책으로 나온 것이 as 라는 키워드이다. as는 컴파일단계에서 에러를 발생시키나? 그것은 아니고, as로 형변환을 할 경우, 성공하면 형변환된 객체가 반환되고 실패하면 null을 반환한다. 에러로 멈추는 것이 아니라서 처리만 잘 해준다면 더욱 효율적으로 처리가 가능하다. 그래서 예를 들어 부모 class의 computer와 그의 자식 class notebook 이 있다고 가정하면 computer com = new computer(); notebook nt = com as notebook; if(n..
다형성은 객체지향 프로그래밍의 특징중 하나이다. 이 개념을 이해하는 데 참 오랜 시간이 걸렸던 것 같다. 오늘은 형변환에 대한 부분을 복습하며 다형성에 대해서도 정리해보고자 한다. 다형성은 다양한 형태를 갖고 있음을 의미하는데, 그 것을 이해하려면 먼저 형변환을 이해하여야 한다. short라는 타입은 int 범위에 포함된다. 그리고 int는 정수라는 범위에 포함된다. 정수 > int > short의 순서에서 short로 갈수록 제한된, 특수한 범위에 해당한다. short는 무조건 int이며, int는 무조건 정수이다. 그래서 형변환이 가능하다 형변환은 형태를 변화시키는 것이다. 형변환은 2가지 종류가 존재한다. 암시적 형변환과 명시적 형변환이다. 암시적 형변환은 굳이 말하지 않아도 자연스럽게 되는 형변환..