'Language'에 해당되는 글 14건

매크로 가드(Macro Guard)

Language/C Language


매크로 가드(Macro Guard)

#include 지시어 사용 시 발생할 수 있는 의도하지 않은 헤더 파일의 중복 포함 문제를 해결하기 위해 만들어진 구조


참조 : 위키피디아 (http://en.wikipedia.org/wiki/Include_guard)


Here, the file "child.c" has indirectly included two copies of the text in the header file "grandfather.h". This causes a compilation error, since the structure type foo is apparently defined twice. In C++, this would be a violation of the One Definition Rule.

"child.c" 에서 간접적으로 "grandfather.h" 헤더파일을 두번 포함시킨다. foo가 두번 정의되기 때문에, 이것이 컴파일 에러를 일으킨다.

따라서 아래와 같이 매크로 가드를 이용한다.


Here, the first inclusion of "grandfather.h" causes the macro GRANDFATHER_H to be defined. Then, when "child.c" includes "grandfather.h" the second time, the #ifndef test fails, and the preprocessor skips down to the #endif, thus avoiding the second definition of struct foo. The program compiles correctly.

GRANDFATHER_H로 매크로를 정의했다. 그러면 "child.c"가 "grandfather.h"헤더파일을 2번 포함할 때 #ifndef가 실패되고 전처리기가 #endif 부분으로 바로 내려가도록 처리하게 됨으로써 컴파일이 올바르게 된다.

'Language > C Language' 카테고리의 다른 글

QuickSort  (0) 2011.03.23
2-Way Merge Sort  (0) 2011.03.22
Hello world!  (0) 2011.02.07

중첩 클래스(Nested Class)

Language/Java Language
대표 클래스가 공통적인 속성 값만을 가지고 나머지 각기 다른 중첩된 클래스에서 관리하도록 만들기 위해서 중첩 클래스(Nested Class)의 필요성이 생긴다.

예)
class Person{
	private String name;
	private String jumin;
	
	.....
	
	class Grade {
		private int kor, eng, math, total;
		private float average;
	
		.....

	}
}



중첩클래스의 접근 방법


Person person = new Person(); // 외부 클래스(Outer Class) 객체 생성
Person.Grade grade = person.new Inner(); // 내부 클래스(Inner Class) 객체 생성



중첩클래스에서의 내부클래스에서 멤버 접근 법

class Outer{
	private static int x = 1;
	class Inner{
		private int x = 2;
		public void func(){
			System.out.println(Outer.x); // 1 출력
			System.out.println(this.x); // 2 출력
		}
	}
}


정적 중첩 클래스

일반 중첩 클래스와는 달리 Outer클래스의 객체가 없어도 Inner클래스의 객체를 만들 수 있다.
Outer.Inner temp = new Outer.Inner();


정적 중첩클래스는 내부 클래스에 static이라는 예약어만 붙이면 된다.
Outer.Inner 객체 = new Outer.Inner();


지역 중첩 클래스

메서드를 실행할 때에만 필요하고 별로 사용할 경우가 없다면 굳이 외부에 드러나는 형태로 만들 필요가 없다. 그래서 특정 메서드에 한정적인 용도로 사용할 클래스로 지역 중첩 클래스라는 개념이 생겼다. 하지만 이 경우에는 접근 제한자(private, protected, package, public)와 지정 예약어를 사용할 수 없는 형태이다. 그 외에 나머지 기능은 클래스와 동일하다.

지정 예약어
필드
: static, final, static final, transient
메서드 : static, final, static final, abstract, synchronized, native

public class Outer{
	public static void main(String[] ar) {
		int x = 100;
		class Inner{
			int y = 200;
		}
		Inner in = new Inner();
		System.out.println(x);
		System.out.println(in.y);
	}
}




익명 중첩 클래스

지역 중첩클래스의 변형된 형태라 할 수 있다.
class라는 예약어와 클래스명을 가지지 않고 단지 인스턴스의 생성과 내용부의 정의만 가진다.
중첩 클래스는 이미 기존에 존재하는 것이어야 한다.

class Inner{
	int y = 200;
	public Inner(){
		this.disp();
	}
	public void disp(){}
}

public class abc{
	public static void main(String[] ar) {
		final int x = 100; // final이 아닌 경우 compile-error
		new Inner(){
			public void disp(){
				System.out.println("Default 생성자");
				System.out.println("x = " + x);
				System.out.println("y = " + y);
			}
		};
	}
}

 

참조 : 열혈강의 JAVA 프로그래밍

'Language > Java Language' 카테고리의 다른 글

Eclipse .class 파일 build path 에 추가할 때  (0) 2015.03.17
Promotion, Casting  (2) 2011.02.11

Promotion, Casting

Language/Java Language

Promotion(자동 형변환) : 큰 자료형 <- 작은 자료형
Casting(강제 형변환) : 작은 자료형 <- 큰 자료형

float fl = 20.0; // 20.0은 컴파일러에서 Double로 인식, 따라서 컴파일 에러, 20.0f는 OK



실수 > 정수

float fl = 20;
long lo = fl; // 컴파일 에러, 8바이트 long, 4바이트 float 이지만 실수 > 정수 이므로 casting 되어야 한다.

'Language > Java Language' 카테고리의 다른 글

Eclipse .class 파일 build path 에 추가할 때  (0) 2015.03.17
중첩 클래스(Nested Class)  (0) 2011.02.11

Hello world!

Language/C Language
 
#include <stdio.h> 
  
           int main() 
{ 
printf("hello, world\n"); 
  return 0; 
} 

Testing syntax highlighter 3.x

'Language > C Language' 카테고리의 다른 글

QuickSort  (0) 2011.03.23
2-Way Merge Sort  (0) 2011.03.22
매크로 가드(Macro Guard)  (0) 2011.02.13